So lança um linha do DB grid

08/03/2013

0

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
Tiago Santos

Tiago Santos

Responder

Posts

08/03/2013

Marcio

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....

Responder

08/03/2013

Tiago Santos

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
Responder

08/03/2013

Joel Rodrigues

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.
Responder

08/03/2013

Tiago Santos

e como ficaria a solução pra esse problema?
Responder

08/03/2013

Tiago Santos

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
Responder

08/03/2013

Perivaldo Martins

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


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!
Responder

09/03/2013

Tiago Santos

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;
Responder

09/03/2013

Perivaldo Martins

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;


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!
Responder

09/03/2013

Tiago Santos

---------------------------
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.
Responder

09/03/2013

Perivaldo Martins

---------------------------
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!
Responder

09/03/2013

Tiago Santos

sim,os 2 bancos estao no mesmo servidor
Responder

09/03/2013

Perivaldo Martins

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!
Responder

09/03/2013

Tiago Santos

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.
Responder

09/03/2013

Perivaldo Martins

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.


Post sua instrução, como você fez. Você usou ADOQuery?

Boa sorte e bons códigos!
Responder

09/03/2013

Tiago Santos

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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar