TRANSFERIR CONTEUDO DE A PARA B

MARCOS 08/09/2009 11:00:24
#322268
Bom dia!
Tenho 2 Bancos de Dados Access (2003):

1.) Bd1
2.) Bd2

Em ambos Bancos eu tenho uma tabela chamada Tb_Cliente.

Eu já criei duas conexões [Ô]Con1[Ô] e [Ô]Con2[Ô] para acesar ambos
os Bancos. Minha dúvida é:

Como fica a instrução sql que consegue transferir Todo conteúdo
da tabela [Ô]TB_Cliente[Ô] no Banco [Ô]Bd1[Ô] para a tabela [Ô]TB_Cliente[Ô]
no Banco [Ô]Bd2[Ô] ???


Agradeço qualquer ajuda
THIGO 08/09/2009 11:11:48
#322272
Resposta escolhida
Amigo basta realizar um select da primeira tabela exemplo

dim rsCliente as new ADODB.Recordset

strsql = [Ô]Select * from TB_Cliente[Ô]

rsCliente.open strsq, bd1


ah não sei como voce usa sua conexão

Execute esse select com a conexao do banco bd1

Feito isto basta realizar um loop nos registro e inserindo no outro banco exemplo

Do While Not rsCliente.EOF

[ô] aqui voce realiza o isert na tabela do banco 2

with rscliente

strsql = [Ô]Insert into tb_cliente (Aqui vai os nomes da colula) values (aqui vai os valores do retorno do select)

bd2.execute strsql

end with

loop



Acho que deu para entender qualquer coisa pergunte

flw
MARCOS 08/09/2009 12:21:25
#322286
Pessoal,
Eu agradeço a boa vontade em ajudar. Mas, o [Ô]GRANDE[Ô] problema desta instrução é que tenho de pegar
o conteúdo da tabela (Tb_Cliente) no Banco (Bd1) e transportar para a tabela (Tb_Cliente) do Banco (Bd2),
numa única instrução sql.

Obs:

1.) A tabela em ambos os Bancos tem a mesma estrutura (São idênticas)
2.) Estou usando [Ô]ADO[Ô] para me conectar as duas bases ( Bd1 e Bd2 ). Chamei a primeira conexão de [Ô]Con1[Ô] e
da segunda [Ô]Con2[Ô].

Algum Guru em SQL sabe se é possível fazer a transferencia , numa única instrução sql, usando as conexões Con1 e Con2???
THIGO 08/09/2009 13:17:02
#322290
Amigo, você terá que pesquisar sobre db linq no acess para realizar isto sei que tem como sim porem onde eu trabalho usamos o oracle que é diferente.

flw

LCSD 08/09/2009 13:37:44
#322293
SERÁ SIMPLES....


Abra um RECORDSET com os dados da primeira tabela
SELECT * from TABELA where ....................... (da sua base 1)

Em seguida, faça um INSERT na sua segunda base
INSERT INTO TABELA (base 2) values (SELECT do seu primeiro RECORDSET)



Pronto. FEITO....
CLEVERTON 08/09/2009 13:58:18
#322296
BASTA usar somente um conection

db.execute [Ô]INSERT INTO tabela_destino SELECT * FROM tabela_origem IN [ô]C:\seubd.mdb[ô][Ô]
MARCOS 30/09/2009 13:36:29
#324074
Pessoal,
A sugestão do Cleverton é exatamente o que preciso.

db.execute [Ô]INSERT INTO tabela_destino SELECT * FROM tabela_origem IN [ô]C:\seubd.mdb[ô][Ô]


[Ô]Mas[Ô] eu não tenho o endereço fisico do Banco de origem. Tenho somente o nome da conexo do BD de origem (Con1)

Eu tentei:

db.execute [Ô]INSERT INTO tabela_destino SELECT * FROM tabela_origem IN [ô]Con1[ô]

mas, deu erro de sintaxe

Algum colega sabe o que esta errado???

KERPLUNK 01/10/2009 14:58:33
#324180
Citação:

[Ô]Mas[Ô] eu não tenho o endereço fisico do Banco de origem. Tenho somente o nome da conexo do BD de origem (Con1)


E como vc conecta este banco???
CLEVERTON 02/10/2009 08:16:44
#324238
Citação:

KERPLUNK

E como vc conecta este banco???



Boa Pergunta. [S23]
WEBMASTER 02/10/2009 15:59:36
#324272
na boa, se eh de access para access use objetos nativos dele.
é mais rapido e pratico, com docmd.TransferDataBase
MAYCONIGHT 02/10/2009 22:41:29
#324296
kra, eu sei o que vc ta precisando!

esqueça o sql ([Ô]só neste caso ok?[Ô]), voce precisa de um FOR dentro de outro FOR.

ae vc me pergunta, porque? porque o primeiro for vai passar na primeira tabela do primeiro banco de dados, verificar se o codigo esta cadastrado na segunda tabela do segundo banco de dados, se nao ele inseri uma linha e copia no segundo banco de dados, senao, chegando no eof ele pula para o proximo registro da primeira tabela do primeiro banco de dados.

falando assim parece cavernovo, mas vou te mostrar a codificação:
Qualquer coisa, declara as variaveis no topo OPTION EXPLICIT, geral no formula sacou?

dim i as integer
dim j as integer
dim quantidade1 as double [ô]quantidade de registros do primeiro banco de dados
dim quantidade2 as double [ô]quantidade de registros do segundo banco de dados
dim con1 as adodb.connection
dim rs1 as adodb.recordset
dim con2 as adodb.connection
dim rs2 as adodb.recordset

con1.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\bancoaccess2003origem.mdb[Ô]
con2.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\bancoaccess2003destino.mdb[Ô]

rs1.Open [Ô]select * from TB_Cliente[Ô], con1, adOpenKeyset, adLockOptimistic
rs2.Open [Ô]select * from TB_Cliente[Ô], con2, adOpenKeyset, adLockOptimistic

quantidade1= rs1.RecordCount
quantidade2 = rs2.recordcount

for i = 1 to quantidade1 ‘loop no primeiro banco
for j = 1 to quantidade2 ‘loop no segundo banco
if rs1![cod_cliente] = rs2![cod_cliente] then ‘se os registros forem iguais, sai do Segundo for…
exit for ‘sai do Segundo for
else ‘senao, move para o Segundo registro do segundo banco de dados
rs2.movenext
if rs2.eof then ‘se chegar ao EOF do segundo banco de dados inclui uma linha e inseri os dados.
rs2.addnew
rs2![cod_cliente] = rs1![cod_cliente]
rs2![descricao] = rs1![ descricao]
rs2![cpf] = rs1![cpf]
rs2![endereco] = rs1![endereco]
[ô]coloque todos os campos igualando
rs2.update
end if
end if
next
rs1.movenext ‘... saindo do segundo for, move o registro do primeiro banco p/ proximo registro do primeiro banco
if rs1.eof then ‘…se fôr EOF entao pára o FOR, esta concluido sua exportação de dados
msgbox “Dados exportados com sucesso!”, vbinformation, “Administrador”
exit sub
else ‘senao move para o primeiro registro do segundo banco, pois ae fará novamente a comparação dos dados
rs2.movefirst
end if
next

e nao fica preocupado, ele vai passar registro por registro do seu banco de dados, pode parecer que vai ficar lento, ledo engano meu caro. manda bala e fala ae depois se foi rapido ou nao.

abraço.
Tópico encerrado , respostas não são mais permitidas