COPIAR ARQUIVOS ALTERADOS DE UM BD PARA OUTRO

FILMAN 27/05/2010 18:30:54
#343000
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 !
XXXANGELSXXX 28/05/2010 09:58:00
#343048
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..
FILMAN 28/05/2010 13:41:26
#343088
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
TECLA 28/05/2010 13:46:27
#343090
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.
FILMAN 28/05/2010 14:21:29
#343095
Não estara no mesmo instante.



Como farei isso
MSMJUDAS 28/05/2010 15:48:23
#343101
Resposta escolhida
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.
FILMAN 28/05/2010 20:20:50
#343128
Funcionou


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