Fórum Erro ...Query - Loop ... First/EOF/Next ? #342037

18/05/2007

0

Pessoal na sei se consigo explicar direito, mais preciso que esse codigo abaixo ao usar o EOF para percorer a tabela e a condiçao do where estiver True nos dois campos abra um form que aqui chamo de MyForm. Bom ateh ai tudo OK, o problema esta assim

Entao eh o seguinte, no dbgrid tenho dois campos em duas colunas que ficam como cheched (jvDBGrid tem esse recurso para campos boolean), bom o como disse ta tudo ok nas marcaçoes, o problema esta assim vamos supor que tenho que marcar a primeira linha os dois chechs do dbgrid e jogar para um label, ele funciona agora se eu marcar novamente os dois checheds da linha de baixo do gbgrid e rodar o codigo no label do outro edit que abre nao apareçe o primeiro campo..ou aparece sem nada e depois no segundo apareçe certo, ou aparece no label as duas veses que abre o segundo campo no label. [b:b0c1c9d263](Pareçe que o ponteiro se perde)[/b:b0c1c9d263]
Olhem como quero passar o codigo
MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString;


A parcial do codigo eh essa
//começando a filtrar as condicoes das formulas ativas
   qTransportaFormula.sql.clear;
   qTransportaFormula.sql.add(´select * from formulas´);
   qTransportaFormula.sql.add(´WHERE (marcar=true and quantidade=True)´); //condiçao para abrir form e mostrar quantidade
   qTransportaFormula.open;
   qTransportaFormula.First;
   while not qTransportaFormula.Eof do
   begin
     //--Exibe o form
     MyForm.ShowModal;
     MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString;
     qTransportaFormula.Next;
   end;   


Nao sei aonde esta o erro, mais existe.

O codigo geral deste button eh assim
procedure TForm1.Button3Click(Sender: TObject);
var
MyForm1 : TForm; //variavel para criar classe de um form em tempo de execuçao
MyLabel1 : TLabel; //variavel para criar Label em tempo de execucao Classe TLabel
begin
jvDBGrid1.refresh; // atualizar o grid antes de começar
//começando a filtrar as condicoes das formulas ativas
   qTransportaFormula.sql.clear;
   qTransportaFormula.sql.add(´select * from formulas´);
   qTransportaFormula.sql.add(´WHERE (marcar=true and quantidade=True)´); //condiçao para abrir form e mostrar quantidade
   qTransportaFormula.open;
   qTransportaFormula.First;
   while not qTransportaFormula.Eof do
   begin
     //--Exibe o form
     MyForm.ShowModal;
     MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString;
     qTransportaFormula.Next;
   end;   
//-----------------------------
//recebebdo o salario do funcionario na variavel
//selecionado em um cluque no grid e armazenado na variavel
vSalario:=ibquery1.fieldbyname(´salario´).asString;
//começando a filtrar as condicoes das formulas ativas
qTransportaFormula.sql.clear;
qTransportaFormula.sql.add(´select * from formulas´);
qTransportaFormula.sql.add(´WHERE id_gerarformula= :iD_Sal and marcar = True´); //condiçao para transportar somente true e a empresa
qTransportaFormula.open;
M.Clear; //limpar o memo
qTransportaFormula.First;
while not qTransportaFormula.Eof do
begin
//converte tds "pontos" em "virgulas"
vsalario := stringreplace(IBQUERY1.FIELDBYNAME(´SALARIO´).ASSTRING, ´.´,´.´, [rfReplaceAll]);
//passa o valor para variavel
vsalario := IBQUERY1.FIELDBYNAME(´SALARIO´).ASSTRING;
//converte tds "virgulas" em "pontos"
vsalario := stringreplace(vsalario,´,´,´.´, [rfReplaceAll]);
{passando os comando que estao como True no dbgrid para o memo + variavel de memoria}
m.lines.add(vSalario+qTransportaFormula.fieldbyname(´formula´).asString);
qTransportaFormula.Next;
end; 

end;


Explicando, esse button tem que primeiro checar se a condiçoes acimas entao as duas como true, e abrir um form para eu digitar algo, depois que fecha volta a percorer em busca de outra condiçao conforme esta mostrando ai joga o resultado para um Memo que estou chamando de M ai no codigo.

Eh complicado de explicar, mas...
Entenderam minha duvida?

Senao entenderam post alguma coisa aqui para eu tentar explicar melhor.

Grato pela ajuda de todos
Adriano.


Adriano_servitec

Adriano_servitec

Responder

Posts

19/05/2007

Adriano_servitec

Talvez eu nao expliquei direito.

Vamos tentar resumir.

A tabela do dbgrid (piradox)
codigo n descricao A 50 formula A 100 marcar L quantidade L


Entao tenho em um dbgrid campos gravados assim
descricao----------formula--------marcar------quantidade [b:6e1368e953]Horas extra 50¬--(salario/220)----true---------true[/b:6e1368e953] insalubridade------(salario/30)------true---------false [b:6e1368e953]Horas Extras 100¬(salario/220)-- -true---------true[/b:6e1368e953] Abono Salarial----- (valor)----------false--------false


Ou que tiverem em negrito eh os que vao ter que aparecer num label em outro form (Form2)

Ai fiz a SQL assim
qTransportaFormula.sql.clear;
   qTransportaFormula.sql.add(´select * from formulas´);
   qTransportaFormula.sql.add(´WHERE id_gerarformula= :iD_Sal and(marcar=true and quantidade=True)´); //condiçao para abrir form e mostrar quantidade
   qTransportaFormula.open;


Bom essa SQL filtra as condiçoes do where e mostra exatamente como mostrei esse simulaçao de um grid no quote acima.

Ateh ai blz.

Agora quero percorrer a tabela que esteja filtrada e ir abrindo outro form (form2) a cada vez que achar o filtro acima.
Ai fiz assim:
qTransportaFormula.First;
   while not qTransportaFormula.Eof do
   begin
     //--Exibe o form
     MyForm.ShowModal;
     MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString;
     qTransportaFormula.Next;
   end;

MyForm(Eh o nome do Form2)

Bom abrir ateh que abre, mais gostaria que ao abrir a cada vez mostrasse no codigo [b:6e1368e953] MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName[/b:6e1368e953] o campo que se encontra na tabela que esta fazendo o loop.

E no caso nao esta ocorrendo, isso depois de umas insistencias ele resolve mostrar, mais pareçe que esta vindo de baixo pra cima ou o ponteiro esta perdido.

O problema eh que nao consigo do jeito que tem que ser.

Espero que tenham entendido minha duvida.

Grato a todos
Adriano.


Responder

Gostei + 0

19/05/2007

Adriano_servitec

Incrivel fui em todos eventos do dbgrid achando que poderia achar um jeito de encaixar o codigo ate que achei o erro, e que erro

Olhem o que um codigo mal feito faz com a gente

Errado
[size=16:f5db1e6941][b:f5db1e6941]while not qTransportaFormula.Eof do begin //--Exibe o form [color=red:f5db1e6941]MyForm.ShowModal; MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString; [/color:f5db1e6941] qTransportaFormula.Next; end;[/b:f5db1e6941][/size:f5db1e6941]


O certo
[size=16:f5db1e6941][b:f5db1e6941]while not qTransportaFormula.Eof do begin //--Exibe o form [color=blue:f5db1e6941]MyForm.MyLabel.Caption:=qTransportaFormula.FieldByName(´descricao´).AsString; MayForm.ShowModal; [/color:f5db1e6941] qTransportaFormula.Next; end;[/b:f5db1e6941][/size:f5db1e6941]


Por motivo dessa linha estarem na posiçao errada perdi 3 dias tentado achar uma maneira de fazer com que esse codigo funcionasse, ao ponto de quase mudar por achar que nao tinha jeito de fazer.

Bom fica ai o codigo, para que o pessoal que ler fique com mais atençao nos codigos do seu programa, pois uma mudança de uma simples linha nos causa esse transtorno todo.

Valeu pessoal.


Responder

Gostei + 0

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

Aceitar