Jump to content
Fórum Script Brasil
  • 0

TQuery


Pedro Dias

Question

Bom dia pessoal.

Estou com um problema e não consigo resolver. E estou precisando disso com urgência. Provável que se eu não consiga antes do prazo resolver possa perder meu emprego.

É o seguinte, tenho um componente dtTemp do tipo TQuery. Tenho que percorrê-lo e atualizar todas todas a linhas. E eu também queria saber se tem alguma função pra eu ter um resultado da diferença no valor de meses entre duas datas.

With dtTemp do

begin

First;

dataFim := StrToDate(MaskEditDataFim.Text);

mesesStr := IntToStr(MonthsBetween(dataIni,dataFim));

meses := StrToInt(mesesStr);

While not dtTemp.Eof do

begin

brinco := Fields[1].AsString;

SQL.Clear;

SQL.Add('UPDATE tempTeste SET AnLote = :lote WHERE AnNumBrinco = :brinc');

ParamByName('brinc').AsString := brinco;

if (meses >= 0) AND (meses <=12) then

begin

ParamByName('lote').AsString := 'dose';

end

else if (meses > 12) AND (meses <= 24) then

begin

ParamByName('lote').AsString := 'vinte e quatro';

end

else if (meses > 24) then

begin

ParamByName('lote').AsString := 'maior';

end;

ExecSQL;

Next;

end;

dtTemp.SQL.Clear;

dtTemp.SQL.Add('SELECT FazCod, AnNumBrinco, AnDataNasc, AnLote, AnSexo FROM tempTeste');

dtTemp.Open;

end;

Quando eu coloco o Next e para passar para o próximo registro é quando ocorre o erro. Sem o Next ele funciona, porém ele altera só o primeiro registro.

Alguém pode me ajudar.

Qualquer duvida quanto a minha questão.

e-mail: pedrocarvalhodias@hotmail.com

facebook: https://www.facebook.com/profile.php?id=100002952873534

Agradeço desde já.

Edited by Pedro Dias
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

reveja o seu código

voce está usando a TQuery ( dtTemp ) para executar 2 processos

SQL.Add('UPDATE tempTeste SET AnLote = :lote WHERE AnNumBrinco = :brinc');

e

dtTemp.SQL.Add('SELECT FazCod, AnNumBrinco, AnDataNasc, AnLote, AnSexo FROM tempTeste');

use um TQuery para UPDATE e outro para SELECT e não terá erro

abraço

Link to comment
Share on other sites

  • 0

Não mudou em nada =/

O que acontece é que quando entra no While ele deve fazer um UPDATE pra cada registro.

E depois do While eu faço um SELECT pra buscar os registros atualizados.

Quando eu não dou um 'Next' dentro do While e busco apenas o primeiro registro, ele atualiza e mostra depois. Mas quando percorro os registros, ele me retorna um erro.

Link to comment
Share on other sites

  • 0
Quando eu coloco o Next e para passar para o próximo registro é quando ocorre o erro. Sem o Next ele funciona, porém ele altera só o primeiro registro.

acho que voce ainda não entendeu o que ocorre... voce esta usando a mesma Tquery para executar um select ( selecionar os registros da tabela ) e executando um update ( atualizar os dados da tabela )

entretanto voce não leva em conta que um comando next é executado antes que o update termine ... em função disso o next tenta achar o proximo registro que já não existe mais, porque o select já foi desfeito

While not dtTemp.Eof do
...
SQL.Clear;

OBS: Coloque a mensagem de erro extamente como é mostrada na tela

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...