COPIAR ARQUIVOS ALTERADOS DE UM BD PARA OUTRO
Ola pessoal gostaria de saber como posso fazer para copiar somente os arquivos alterados de ACCESS para outro ACCESS
ou seja os dois banco de dados tem os mesmos formatos são identicos, gostaria de uma rotina que verificasse o ACCESS_1
varendo os arquivos e vendo o que foi alterado e enviasse para o ACCESS_2.
Como posso fazer isso?
Obrigado
Conto com vocês !
ou seja os dois banco de dados tem os mesmos formatos são identicos, gostaria de uma rotina que verificasse o ACCESS_1
varendo os arquivos e vendo o que foi alterado e enviasse para o ACCESS_2.
Como posso fazer isso?
Obrigado
Conto com vocês !
amigo.. voce tem que fazer uma rotina de comparação entre os dois bancos.. ou seja, no momento da copia, comparar os dois bancos.. mais ou menos assim..
RS!TABELA <> RS!TABELA
E passar o parametro para copiar somente os registros adicionados..
RS!TABELA <> RS!TABELA
E passar o parametro para copiar somente os registros adicionados..
TÃ, MAS COMO FARIA ESSA ROTINA ????
Pensei em colocar um campo na TABELA onde se foi alterado marcaria um X se não foi ficaria NULL
aà criaria um loop que verificasse onde tem esse X e exportasse para um Arquivo de TEXTO temporário
ou mandasse direto para o outro DB verificando o arquivo se ja existente altera o que modificou se não
existente cria um novo.
Mas como criarei essa rotina precisaria do código, pois não sei nem como fazer esse trabalho.
Contro com vocês
Obrigado
Pensei em colocar um campo na TABELA onde se foi alterado marcaria um X se não foi ficaria NULL
aà criaria um loop que verificasse onde tem esse X e exportasse para um Arquivo de TEXTO temporário
ou mandasse direto para o outro DB verificando o arquivo se ja existente altera o que modificou se não
existente cria um novo.
Mas como criarei essa rotina precisaria do código, pois não sei nem como fazer esse trabalho.
Contro com vocês
Obrigado
Se os dois bancos estão acessÃveis no mesmo instante, execute a rotina atual nas duas bases.
Exemplo:
Ao inserir um cliente no BANCO01.TABELA01 (ex. INSERT INTO cliente (... ) VALUES (...)), execute a mesma rotina no BANCO02.TABELA01.
Se o banco não está acessÃvel, uma solução seria armazenar as INSTRUÇÕES SQL em um arquivo temporário (ex. um SQL.TXT) com todas elas para executar no BANCO02, em um momento oportuno.
Exemplo:
Ao inserir um cliente no BANCO01.TABELA01 (ex. INSERT INTO cliente (... ) VALUES (...)), execute a mesma rotina no BANCO02.TABELA01.
Se o banco não está acessÃvel, uma solução seria armazenar as INSTRUÇÕES SQL em um arquivo temporário (ex. um SQL.TXT) com todas elas para executar no BANCO02, em um momento oportuno.
Não estara no mesmo instante.
Como farei isso
Como farei isso
Teste essa função:
Public Sub CopiaDados(vTabela As String, vCampo As String)
Dim ConnDestino As New ADODB.Connection
Dim ConnOrigem As New ADODB.Connection
Dim RsOrigem As New ADODB.Recordset
Dim RsDestino As New ADODB.Recordset
Dim I As Integer
ConnOrigem.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]\BD01.mdb[Ô] & [Ô]; Jet OLEDB:Database Password=teste;[Ô]
ConnDestino.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]\BD02.mdb[Ô] & [Ô]; Jet OLEDB:Database Password=teste;[Ô]
RsOrigem.Open [Ô]SELECT * FROM [Ô] & vTabela & [Ô][Ô], ConnOrigem, adOpenKeyset, adLockReadOnly
While Not RsOrigem.EOF
RsDestino.Open [Ô]SELECT * FROM [Ô] & vTabela & [Ô] WHERE [Ô] & vCampo & [Ô] = [Ô] & RsOrigem([Ô][Ô] & vCampo & [Ô][Ô]), ConnDestino, adOpenKeyset, adLockOptimistic
If RsDestino.RecordCount = 0 Then
RsDestino.AddNew
For I = 0 To RsOrigem.Fields.Count - 1
RsDestino(RsOrigem.Fields(I).Name) = RsOrigem.Fields(I).Value
Next I
RsDestino.Update
Else
For I = 0 To RsOrigem.Fields.Count - 1
If RsDestino(RsOrigem.Fields(I).Name).Value <> RsOrigem.Fields(I).Value Then
RsDestino(RsOrigem.Fields(I).Name) = RsOrigem.Fields(I).Value
End If
Next I
RsDestino.Update
End If
RsDestino.Close: Set Rs = Nothing
RsOrigem.MoveNext
Wend
RsOrigem.Close: Set RsOrigem = Nothing
ConnDestino.Close: Set ConnDestino = Nothing
ConnOrigem.Close: Set ConnOrigem = Nothing
End Sub
Aà é só chamar com CopiaDados [Ô]TABELA[Ô], [Ô]CODIGO[Ô]
O vCampo serve pra verificar se já existe o registro. Se não existe, adiciona com o ADDNEW
Em anexo os bancos.
Public Sub CopiaDados(vTabela As String, vCampo As String)
Dim ConnDestino As New ADODB.Connection
Dim ConnOrigem As New ADODB.Connection
Dim RsOrigem As New ADODB.Recordset
Dim RsDestino As New ADODB.Recordset
Dim I As Integer
ConnOrigem.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]\BD01.mdb[Ô] & [Ô]; Jet OLEDB:Database Password=teste;[Ô]
ConnDestino.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]\BD02.mdb[Ô] & [Ô]; Jet OLEDB:Database Password=teste;[Ô]
RsOrigem.Open [Ô]SELECT * FROM [Ô] & vTabela & [Ô][Ô], ConnOrigem, adOpenKeyset, adLockReadOnly
While Not RsOrigem.EOF
RsDestino.Open [Ô]SELECT * FROM [Ô] & vTabela & [Ô] WHERE [Ô] & vCampo & [Ô] = [Ô] & RsOrigem([Ô][Ô] & vCampo & [Ô][Ô]), ConnDestino, adOpenKeyset, adLockOptimistic
If RsDestino.RecordCount = 0 Then
RsDestino.AddNew
For I = 0 To RsOrigem.Fields.Count - 1
RsDestino(RsOrigem.Fields(I).Name) = RsOrigem.Fields(I).Value
Next I
RsDestino.Update
Else
For I = 0 To RsOrigem.Fields.Count - 1
If RsDestino(RsOrigem.Fields(I).Name).Value <> RsOrigem.Fields(I).Value Then
RsDestino(RsOrigem.Fields(I).Name) = RsOrigem.Fields(I).Value
End If
Next I
RsDestino.Update
End If
RsDestino.Close: Set Rs = Nothing
RsOrigem.MoveNext
Wend
RsOrigem.Close: Set RsOrigem = Nothing
ConnDestino.Close: Set ConnDestino = Nothing
ConnOrigem.Close: Set ConnOrigem = Nothing
End Sub
Aà é só chamar com CopiaDados [Ô]TABELA[Ô], [Ô]CODIGO[Ô]
O vCampo serve pra verificar se já existe o registro. Se não existe, adiciona com o ADDNEW
Em anexo os bancos.
Funcionou
muito Obrigado
é bom saber que posso contar com vocês nas horas dificeis
Obrigado
Mesmooooo
muito Obrigado
é bom saber que posso contar com vocês nas horas dificeis
Obrigado
Mesmooooo
Tópico encerrado , respostas não são mais permitidas