TRANSFERIR CONTEUDO DE A PARA B
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
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
Amigo basta realizar um select da primeira tabela exemplo
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
Acho que deu para entender qualquer coisa pergunte
flw
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
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???
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???
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
flw
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....
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....
BASTA usar somente um conection
db.execute [Ô]INSERT INTO tabela_destino SELECT * FROM tabela_origem IN [ô]C:\seubd.mdb[ô][Ô]
db.execute [Ô]INSERT INTO tabela_destino SELECT * FROM tabela_origem IN [ô]C:\seubd.mdb[ô][Ô]
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???
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???
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???
Citação:KERPLUNK
E como vc conecta este banco???
Boa Pergunta. [S23]
na boa, se eh de access para access use objetos nativos dele.
é mais rapido e pratico, com docmd.TransferDataBase
é mais rapido e pratico, com docmd.TransferDataBase
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.
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