[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