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
A parcial do codigo eh essa
Nao sei aonde esta o erro, mais existe.
O codigo geral deste button eh assim
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.
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
Curtir tópico
+ 0
Responder
Posts
19/05/2007
Adriano_servitec
Talvez eu nao expliquei direito.
Vamos tentar resumir.
A tabela do dbgrid (piradox)
Entao tenho em um dbgrid campos gravados assim
Ou que tiverem em negrito eh os que vao ter que aparecer num label em outro form (Form2)
Ai fiz a SQL assim
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:
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.
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
O certo
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.
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
Clique aqui para fazer login e interagir na Comunidade :)