So lança um linha do DB grid

08/03/2013

1

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
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
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
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
---------------------------
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
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]http://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
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