Jump to content

[Resolvido] [ajuda] Registo em branco=false


smack_dead
 Share

Recommended Posts

Olá bom dia, alguém me pode dar uma dica de uma valição?

Então eu tenho de numa função devolver 0 (False ) se o registo de encomendas não tiver linhas de artigos....

Não sei como comparar ou verificar se não esta preenchida....

isto porque é o meu ordProducts que não vai permitir o registo se não tiver "linhas" de artigos

e o meu ordProducts faz referencia a 2 elementos ...neste caso...e é onde me estou a baralhar....



[code=Delphi]

function validarprodutos :integer;
begin

D.ADOQuerytable.SQL.Text := 'select * from sf_encomendas where 1=0';
D.ADOQuerytable.Open;
D.ADOQuerytable.First;

if D.ADOQuerytable.FieldByName('nomenabd').AsString <....????
  result:=1
  else
  begin
   // showmessage( 'Nao tem linhas de arquivos' );
	result:=0
  end;
end;

Edited by smack_dead
Link to comment
Share on other sites

Para testares se uma tabela tem linhas, usas o recordcount.

function validarprodutos :integer;
begin

   D.ADOQuerytable.SQL.Text := 'select * from sf_encomendas where 1=0';
   D.ADOQuerytable.Open;
   D.ADOQuerytable.First;

   if D.ADOQuerytable.RecordCount > 0 
  then result:=1
  else
  begin
      // showmessage( 'Nao tem linhas de arquivos' );
       result:=0
  end;
end;
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

A condição já lá está.

O (RecordCount > 0) já devolve um valor True ou False.

Aliás, já que não queres mesmo usar o resultado boolean, podes simplesmente fazer typecasting, assim:

function validarprodutos :integer;
begin

   D.ADOQuerytable.SQL.Text := 'select * from sf_encomendas where 1=0';
   D.ADOQuerytable.Open;

   Result:=Integer(D.ADOQuerytable.RecordCount > 0); 
end;

Ao colocar uma condição booleana dentro do typecast (no caso, ao usar Integer(<condição booleana>) estás a mandar converter o False em 0 e o True em 1.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Atenção ao usar o FOR para percorrer um dataset.

Os Dataset's não são 0-based, pelo que o FOR deve começar em 1 e terminar no RecordCount (e não começar em 0 e terminar no RecordCount-1).

À parte disso, o segundo bloco que puseste funciona, da seguinte maneira:

Quando corres isso, ele vai buscar informação ao registo actual da DB.

Quando corres uma query, a registo actual é o primeiro. Mas se entretanto mudares isso (usando o Next, por exemplo, ou o proprio RecNo), a indicação de registo actual muda, e depois ao executar aquele código, ele vai buscar onde estiver (seja lá onde for).

Por isso, antes de correr o código, deves sempre ter a certeza em que posição está o registo actual, a não ser que saibas à partida que essa query só terá um registo.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Nem precisa tanto código...

function validarquantidades :integer;
begin
   D.ADOQuerytable.SQL.Text := 'select * from sf_encomendas where 1=0';
   D.ADOQuerytable.Open;
   D.ADOQuerytable.First;

   Result:=Integer(D.ADOQuerytable.FieldByName('linequantity').AsString > 0);
end;
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não...

Num, a condição usa o recordcount.

No outro, usa o valor do campo linequantity.

Fora isso, o esquema é parecido: Aproveitar o resultado de uma condição para o resultado da função.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Sim...

Dependendo de como estás a gravar na DB, caso falhe o próprio sistema te devolve uma excepção.

Podes também apanhar essa excepção (ou não) e dar a mensagem a condizer...

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.