[firebase-br] Off-Topic Duvidas com IBO
Forum ASR & Associados
forum em asreassociados.com.br
Sáb Mar 8 22:34:19 -03 2008
Vamos lá ao código:
IB_Vendas.Close;
IB_Vendas.SQL.Clear;
IB_Vendas.SQL.Add('SELECT PEDIDO, NOTAFISCAL, CODCLIENTE,
NOMECLIENTE, DATA, ');
IB_Vendas.SQL.Add('FROM VENDAS WHERE DATA BETWEEN :DATAI AND :DATAF
ORDER BY NOTAFISCAL');
IB_Vendas.Prepare;
IB_Vendas.Params[0].Value := IB_DateTimePicker1.Date;
IB_Vendas.Params[1].AsDate := IB_DateTimePicker2.Date;
IB_Vendas.Open;
IB_ITENSVENDAS.SQL.Clear;
IB_ITENSVENDAS.SQL.Add('SELECT PEDIDO, TRANSPORTADORA, NATUREZA,
QUANTIDADE, TOTALNF ');
IB_ITENSVENDAS.SQL.Add('FROM ITENSVENDAS WHERE PEDIDO = :nroped
ORDER BY PEDIDO');
IB_ITENSVENDAS.Prepare;
While not IB_Vendas.EOF do
begin
IB_ITENSVENDAS.Close;
IB_ITENSVENDAS.Params[0].AsInteger :=
IB_Vendas.FieldByName('PEDIDO').AsInteger;
IB_ITENSVENDAS.Open;
// a linha para adicionar um novo registro
IB_NOVATB.Append;
IB_NOVATB.FieldByName('PEDIDO').AsString :=
IB_VENDAS.FieldByName('PEDIDO').AsInteger;
IB_NOVATB.FieldByName('TRANSPORTADORA').AsInteger :=
IB_ITENSVENDAS.FieldByName('TRANSPORTADORA').AsInteger;
IB_NOVATB.FieldByName('QUANTIDADE').AsInteger :=
IB_ITENSVENDAS.FieldByName('QUANTIDADE').AsInteger;
IB_NOVATB.Post;
IB_Vendas.Next;
end;
Considerações: tente utilizar um IB_cursor para fazer essas tarefas ou
ainda o IB_query o objeto tabela é muito lento !
Sem falar que vc poderia fazer um procedure dentro do banco e copiar
internamente o conteúdo de ambas, colocando todos os objetos numa mesma
transação
Outra não estou vendo o controle transacional
(IB_transaction.StartTransaction e o commit na última linha).
Espero ter ajudado !
Atenciosamente,
Airton Salviano
Analista de Sistemas
www.asrtecnologia.com.br
www.pedeborracha.com
paulollazaro - Gmail escreveu:
> boa noite a todos
>
> Me desculpem novamente pelo off-topic, mas estou tentando fazer esta
> rotina, mas não está dando certo. Se alguem puder me ajudar?
>
> Utilizo D7, IBO e Firebird.
>
> O que eu gostaria de fazer é o seguinte: ler duas tabelas e gravar
> alguns dados numa terceira tabela, a query que receberá os dados está
> com generate EditSQL, generate insertSQL e Generate DeleteSQL marcados.
>
> É a primeira vez que faço desta forma, utilizava IBO com IBOTABLE, e
> agora estou apanhando mais que vaca na horta.
>
> O que acontece, o programa executa o while, mas não faz a inclusão dos
> registros lidos na nova tabela
>
> Segue abaixo um exemplo do que estou tentando fazer. obrigado a todos e
> desculpem o tamanho do e-mail.
>
> Paulo
> IB_Vendas.Close;
> IB_Vendas.SQL.Clear;
> IB_Vendas.SQL.Add('SELECT PEDIDO, NOTAFISCAL, CODCLIENTE,
> NOMECLIENTE, DATA, ');
> IB_Vendas.SQL.Add('FROM VENDAS WHERE DATA BETWEEN :DATAI AND :DATAF
> ORDER BY NOTAFISCAL');
> IB_Vendas.Prepare;
> IB_Vendas.Params[0].Value := IB_DateTimePicker1.Date;
> IB_Vendas.Params[1].AsDate := IB_DateTimePicker2.Date;
> IB_Vendas.Open;
>
> While not IB_Vendas.EOF do
> begin
> IB_ITENSVENDAS.Close;
> IB_ITENSVENDAS.SQL.Clear;
> IB_ITENSVENDAS.SQL.Add('SELECT PEDIDO, TRANSPORTADORA, NATUREZA,
> QUANTIDADE, TOTALNF ');
> IB_ITENSVENDAS.SQL.Add('FROM ITENSVENDAS WHERE PEDIDO = :nroped
> ORDER BY PEDIDO');
> IB_ITENSVENDAS.Prepare;
> IB_ITENSVENDAS.Params[0].AsInteger :=
> IB_Vendas.FieldByName('PEDIDO').AsInteger;
> IB_ITENSVENDAS.Open;
>
> IB_NOVATB.FieldByName('PEDIDO').AsString :=
> IB_VENDAS.FieldByName('PEDIDO').AsInteger;
> IB_NOVATB.FieldByName('TRANSPORTADORA').AsInteger :=
> IB_ITENSVENDAS.FieldByName('TRANSPORTADORA').AsInteger;
> IB_NOVATB.FieldByName('QUANTIDADE').AsInteger :=
> IB_ITENSVENDAS.FieldByName('QUANTIDADE').AsInteger;
>
> IB_NOVATB.Post; É NECESSÁRIO COLOCAR ESTE POST ?
> IB_Vendas.Next;
> end;
>
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
Mais detalhes sobre a lista de discussão lista