[firebase-br] Off-Topic Duvidas com IBO

MagnoS magnoscosta em bol.com.br
Seg Mar 10 06:13:23 -03 2008


Só uma pergunta....

Pra cada venda vc tem só 1 item????
Pq desta forma ai vc faz o loop em Vendas e nao faz nos itens... ta certo 
isso??

Bom.. caso tenha mais de um item vou dar a dica, caso contrario 
desconsidere:

Vendas.Close;
...
Vendas.Open;
while not Vendas.eof do
begin
  Itens.Close;
  ...
  ItensOpen;
  while not Itens.Eof do
  begin
    Nova.Insert;
    ...
    Nova.Post;
    Itens.Next;
  end;
Vendas.Next
end;

flw

----- Original Message ----- 
From: "Forum ASR & Associados" <forum em asreassociados.com.br>
To: <paulollazaro em gmail.com>; "FireBase" <lista em firebase.com.br>
Sent: Sunday, March 09, 2008 2:34 AM
Subject: Re: [firebase-br] Off-Topic Duvidas com IBO


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


______________________________________________
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


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.516 / Virus Database: 269.21.6/1317 - Release Date: 07/03/2008 
8:15





Mais detalhes sobre a lista de discussão lista