So lança um linha do DB grid
Estou copiando os dados de um DB pra outro, conforme codigo abaixo:
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').AsString := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Open;
Porem no select da Query 1 vem mais registro e so consigo copiar 1 dos registros
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').AsString := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Open;
Porem no select da Query 1 vem mais registro e so consigo copiar 1 dos registros
Tiago Santos
Curtidas 0
Respostas
Marcio
08/03/2013
pode ser que tenha vários registros com o mesmo código de referência
desse jeito copia um registro só...
seria melhor fazer um loop....
desse jeito copia um registro só...
seria melhor fazer um loop....
GOSTEI 0
Tiago Santos
08/03/2013
são referencias diferente, digamos 0001, 0002, 0003, 0004 e por ai vai. Ai preciso que venha todos os registros, so vem 1 quando seleciono e clico no botão. Preciso que ele venha atendendo aquela validação da query e traga quantas referecias tiver
GOSTEI 0
Joel Rodrigues
08/03/2013
Na verdade, nesse código você está pegando apenas o registro selecionado na ADOQuery1, ou seja, sempre vai retornar sempre um registro. Você precisaria percorrer a query1 e montar um string pra usar em um operador IN na consulta.
GOSTEI 0
Tiago Santos
08/03/2013
e como ficaria a solução pra esse problema?
GOSTEI 0
Tiago Santos
08/03/2013
fiz assim:
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Open;
while not DMTransfere.ADOQuery3.Eof Do
begin
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Next;
end;
mas nao tras nenhum registro
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Open;
while not DMTransfere.ADOQuery3.Eof Do
begin
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Next;
end;
mas nao tras nenhum registro
GOSTEI 0
Perivaldo Martins
08/03/2013
fiz assim:
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Open;
while not DMTransfere.ADOQuery3.Eof Do
begin
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Next;
end;
mas nao tras nenhum registro
DMTransfere.ADOQuery3.Close;
DMTransfere.ADOQuery3.SQL.Clear;
DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
DMTransfere.ADOQuery3.Open;
while not DMTransfere.ADOQuery3.Eof Do
begin
DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
DMTransfere.ADOQuery3.Next;
end;
mas nao tras nenhum registro
O colega poderia postar a estrutura dessas duas tabelas?
Da forma que está não vai retornar o que você espera, reveja a lógica, você tenta fazer a consulta informando uma condição REFERÊNCIA, porém vc não está alimentando o parametro.
O que o seu código está fazendo?
- Fazendo a consulta e tentando condicioná-la, porém o parametro está vazio, ele não está sendo alimentado corretamente.
- Você abre a ADOQuery3, depois faz um While not ... do para varre o dataset e alimentar o parametro, está errado.
Já tem algum tempo que não uso ADO, por isso não sei se ele vai suportar o código abaixo, mas não custa nada tentar.
DMTransfere.ADOQuery3.Close; DMTransfere.ADOQuery3.SQL.Clear; DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque '); DMTransfere.ADOQuery3.SQL.Add('where referencia in (select campo from tabela'); DMTransfere.ADOQuery3.Open;
Substitua [campo] pelo campo da sua tabela e [tabela] por sua tabela que tem os códigos de referência.
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
Estrutura 01
DMTransfere.ADOQuery1.Close;
DMTransfere.ADOQuery1.SQL.Clear;
DMTransfere.ADOQuery1.SQL.Add('select referencia,descricao,quantidade,unitario_real,total_liq from ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery1.SQL.Add('where CODIGO = :Edt_numero');
DMTransfere.ADOQuery1.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery1.Open;
if not (DMTransfere.ADOQuery1.IsEmpty) then
ShowMessage('Localizado com Sucesso!')
else
ShowMessage('Nenhum registro encontrado');
Estrutura 02
//DMTransfere.ADOQuery3.Close;
//DMTransfere.ADOQuery3.SQL.Clear;
//DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
//DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
//DMTransfere.ADOQuery3.Open;
DMTransfere.ADOQuery1.Close;
DMTransfere.ADOQuery1.SQL.Clear;
DMTransfere.ADOQuery1.SQL.Add('select referencia,descricao,quantidade,unitario_real,total_liq from ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery1.SQL.Add('where CODIGO = :Edt_numero');
DMTransfere.ADOQuery1.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery1.Open;
if not (DMTransfere.ADOQuery1.IsEmpty) then
ShowMessage('Localizado com Sucesso!')
else
ShowMessage('Nenhum registro encontrado');
Estrutura 02
//DMTransfere.ADOQuery3.Close;
//DMTransfere.ADOQuery3.SQL.Clear;
//DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
//DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
//DMTransfere.ADOQuery3.Open;
GOSTEI 0
Perivaldo Martins
08/03/2013
Estrutura 01
DMTransfere.ADOQuery1.Close;
DMTransfere.ADOQuery1.SQL.Clear;
DMTransfere.ADOQuery1.SQL.Add('select referencia,descricao,quantidade,unitario_real,total_liq from ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery1.SQL.Add('where CODIGO = :Edt_numero');
DMTransfere.ADOQuery1.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery1.Open;
if not (DMTransfere.ADOQuery1.IsEmpty) then
ShowMessage('Localizado com Sucesso!')
else
ShowMessage('Nenhum registro encontrado');
Estrutura 02
//DMTransfere.ADOQuery3.Close;
//DMTransfere.ADOQuery3.SQL.Clear;
//DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
//DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
//DMTransfere.ADOQuery3.Open;
DMTransfere.ADOQuery1.Close;
DMTransfere.ADOQuery1.SQL.Clear;
DMTransfere.ADOQuery1.SQL.Add('select referencia,descricao,quantidade,unitario_real,total_liq from ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery1.SQL.Add('where CODIGO = :Edt_numero');
DMTransfere.ADOQuery1.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery1.Open;
if not (DMTransfere.ADOQuery1.IsEmpty) then
ShowMessage('Localizado com Sucesso!')
else
ShowMessage('Nenhum registro encontrado');
Estrutura 02
//DMTransfere.ADOQuery3.Close;
//DMTransfere.ADOQuery3.SQL.Clear;
//DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque where referencia =:pref');
//DMTransfere.ADOQuery3.Parameters.ParamByName('pref').value := DMTransfere.ADOQuery1.FieldByName('referencia').AsString;
//DMTransfere.ADOQuery3.Open;
O colega poderia testar o código abaixo?
DMTransfere.ADOQuery3.Close; DMTransfere.ADOQuery3.SQL.Clear; DMTransfere.ADOQuery3.SQL.Add('select referencia,descricao from estoque '); DMTransfere.ADOQuery3.SQL.Add('where referencia in (select referencia from ITENS_PED_ORCAMENTO'); DMTransfere.ADOQuery3.Open;
Se não funcionar, poderemos tentar de outra forma.
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
---------------------------
Transfere
---------------------------
Incorrect syntax near 'ITENS_PED_ORCAMENTO'
---------------------------
OK
---------------------------
apresentou o sequinte erro acima, mas isso pq a query1 ele busca esses itens no banco1, a query3 estou validando de acordo com o filtro da referencia pra poder copiar pro DB , pra ai sim lançar na tabela ITENS_PED_ORCAMENTO do banco 2.
Transfere
---------------------------
Incorrect syntax near 'ITENS_PED_ORCAMENTO'
---------------------------
OK
---------------------------
apresentou o sequinte erro acima, mas isso pq a query1 ele busca esses itens no banco1, a query3 estou validando de acordo com o filtro da referencia pra poder copiar pro DB , pra ai sim lançar na tabela ITENS_PED_ORCAMENTO do banco 2.
GOSTEI 0
Perivaldo Martins
08/03/2013
---------------------------
Transfere
---------------------------
Incorrect syntax near 'ITENS_PED_ORCAMENTO'
---------------------------
OK
---------------------------
apresentou o sequinte erro acima, mas isso pq a query1 ele busca esses itens no banco1, a query3 estou validando de acordo com o filtro da referencia pra poder copiar pro DB , pra ai sim lançar na tabela ITENS_PED_ORCAMENTO do banco 2.
Transfere
---------------------------
Incorrect syntax near 'ITENS_PED_ORCAMENTO'
---------------------------
OK
---------------------------
apresentou o sequinte erro acima, mas isso pq a query1 ele busca esses itens no banco1, a query3 estou validando de acordo com o filtro da referencia pra poder copiar pro DB , pra ai sim lançar na tabela ITENS_PED_ORCAMENTO do banco 2.
Seu banco de dados é SQL Server?
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
sim,os 2 bancos estao no mesmo servidor
GOSTEI 0
Perivaldo Martins
08/03/2013
sim,os 2 bancos estao no mesmo servidor
Veja se o conteúdo deste artigo te dá uma idéia de como fazer a cópia, qualquer coisa, retorne ao fórum.
[url]https://www.devmedia.com.br/copiando-dados-de-um-banco-para-outro/20247[/url]
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
Primeiramente obrigado pela força Perivaldo e olhei o post publicado e fui fazer aqui mas deu esse erro
Update or insert of view or function 'banco2_sql.dbo.ITENS_PED_ORCAMENTO' failed because it contains a derived or constant field.
Update or insert of view or function 'banco2_sql.dbo.ITENS_PED_ORCAMENTO' failed because it contains a derived or constant field.
GOSTEI 0
Perivaldo Martins
08/03/2013
Primeiramente obrigado pela força Perivaldo e olhei o post publicado e fui fazer aqui mas deu esse erro
Update or insert of view or function 'banco2_sql.dbo.ITENS_PED_ORCAMENTO' failed because it contains a derived or constant field.
Update or insert of view or function 'banco2_sql.dbo.ITENS_PED_ORCAMENTO' failed because it contains a derived or constant field.
Post sua instrução, como você fez. Você usou ADOQuery?
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
DMTransfere.ADOQuery4.Close;
DMTransfere.ADOQuery4.SQL.Clear;
DMTransfere.ADOQuery4.SQL.Add('insert into banco2_sql.dbo.ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery4.SQL.Add('select * from banco1_sql.dbo.ITENS_PED_ORCAMENTO where CODIGO=:Edt_numero');
DMTransfere.ADOQuery4.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery4.Open
DMTransfere.ADOQuery4.SQL.Clear;
DMTransfere.ADOQuery4.SQL.Add('insert into banco2_sql.dbo.ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery4.SQL.Add('select * from banco1_sql.dbo.ITENS_PED_ORCAMENTO where CODIGO=:Edt_numero');
DMTransfere.ADOQuery4.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery4.Open
GOSTEI 0
Perivaldo Martins
08/03/2013
DMTransfere.ADOQuery4.Close;
DMTransfere.ADOQuery4.SQL.Clear;
DMTransfere.ADOQuery4.SQL.Add('insert into banco2_sql.dbo.ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery4.SQL.Add('select * from banco1_sql.dbo.ITENS_PED_ORCAMENTO where CODIGO=:Edt_numero');
DMTransfere.ADOQuery4.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery4.Open
DMTransfere.ADOQuery4.SQL.Clear;
DMTransfere.ADOQuery4.SQL.Add('insert into banco2_sql.dbo.ITENS_PED_ORCAMENTO');
DMTransfere.ADOQuery4.SQL.Add('select * from banco1_sql.dbo.ITENS_PED_ORCAMENTO where CODIGO=:Edt_numero');
DMTransfere.ADOQuery4.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.text);
DMTransfere.ADOQuery4.Open
Você me informou que os bancos estão no mesmo servidor, então tente usar o código abaixo:
DMTransfere.ADOQuery4.Close; DMTransfere.ADOQuery4.SQL.Clear; DMTransfere.ADOQuery4.SQL.Add('INSERT INTO banco2_sql.dbo.ITENS_PED_ORCAMENTO '); DMTransfere.ADOQuery4.SQL.Add('SELECT * from ITENS_PED_ORCAMENTO WHERE CODIGO = :Edt_numero'); DMTransfere.ADOQuery4.Parameters.ParamByName('Edt_numero').Value := StrToInt(Edt_numero.Text); DMTransfere.ADOQuery4.ExecSQL;
Levando em consideração que seu ADOQuery4 já está vinculado ao ADOConnection que está setado para o Banco1.
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
---------------------------
Transfere
---------------------------
An explicit value for the identity column in table 'banco2.dbo.ITENS_PED_ORCAMENTO' can only be specified when a column list is used and IDENTITY_INSERT is ON.
---------------------------
OK
---------------------------
Transfere
---------------------------
An explicit value for the identity column in table 'banco2.dbo.ITENS_PED_ORCAMENTO' can only be specified when a column list is used and IDENTITY_INSERT is ON.
---------------------------
OK
---------------------------
GOSTEI 0
Perivaldo Martins
08/03/2013
---------------------------
Transfere
---------------------------
An explicit value for the identity column in table 'banco2.dbo.ITENS_PED_ORCAMENTO' can only be specified when a column list is used and IDENTITY_INSERT is ON.
---------------------------
OK
---------------------------
Transfere
---------------------------
An explicit value for the identity column in table 'banco2.dbo.ITENS_PED_ORCAMENTO' can only be specified when a column list is used and IDENTITY_INSERT is ON.
---------------------------
OK
---------------------------
Muito estranho, os nomes dos seus dois bancos de dados são banco2.mdf e banco1.mdf?
Quais os nomes dos bancos?
Boa sorte e bons códigos!
GOSTEI 0
Tiago Santos
08/03/2013
consegui resolver, valeu mesmo Martins
GOSTEI 0
Perivaldo Martins
08/03/2013
consegui resolver, valeu mesmo Martins
Blza! Você poderia postar a solução, pode ajudar outros no futuro.
Boa sorte e bons códigos!
GOSTEI 0