Código Matricula incremento

Delphi

25/01/2012

Bom Dia

Tenho a seguinte função para gerar cod automatico campo da tabela MATRICULA (INTEGER)

function matricula(Tabela, Campo: String; Connection: TZConnection;
                   Caracter: string): String;
var
  Qry: TZQuery;
  nr: integer;
begin
  Qry := TZQuery.Create(nil);
  try
    Qry.Connection := Connection;
    Qry.SQL.Add(SELECT MAX(+Campo+)FROM + Tabela);
    Qry.Open;
   if Qry.Fields[0].IsNull then
     Begin
       nr := 1; 
       Result:= formatfloat(Caracter,nr);
     end
   else
     Begin
       nr := Qry.Fields[0].value+1;
       Result:= FormatFloat(Caracter,nr);
     end;
  finally
    FreeAndNil(Qry);
  end;
end;


estou chamando essa função no OnNewRecord da query porem não grava no banco esta gravando 0

matricula(TB_CLIENTE,MATRICULA, DM.Connection,0000);
no que estou errando

Coloquei a ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000));; e aparece certinho a seguencia
Frost

Frost

Curtidas 0

Respostas

Marco Salles

Marco Salles

25/01/2012


Coloquei a ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000));; e aparece certinho a seguencia


quando voce inseri um novo regitro como voe esta atribuindo o retorno da função Matricula
ao campo ??? qual a instrução que voce esta utilizando

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2012

o problema é exatamente aquele relatado pelo Marco Salles: onde está sendo usado o retorno da função?

o correto seria algo assim, no OnNewRecord:
dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
GOSTEI 0
Frost

Frost

25/01/2012

Boa Tarde
Marco / Emerson

É bem assim mesmo que estou usando

dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2012

pelo que pude observar seu campo MATRICULA é do tipo string, mas você está tentando usá-lo para fazer uma adição:
nr := Qry.Fields[0].value+1; // aqui value retorna uma string e não um numérico

você não consegue perceber o erro porque usou um try..finnaly. se tivesse usado um try..except (ou nem usasse um try) poderia ter visto o erro mais facilmente.

altere sua função:

function matricula(Tabela, Campo: String; Connection: TZConnection;
Caracter: string): String;
var
Qry: TZQuery;
nr: integer;
begin
Qry := TZQuery.Create(nil);
try
Qry.Connection := Connection;
Qry.SQL.Add(SELECT MAX(+Campo+) FROM + Tabela);
Qry.Open;
nr := Qry.Fields[0].AsInteger + 1;
Result:= formatfloat(Caracter,nr);
Qry.Close;
finally
FreeAndNil(Qry);
end;
end;

veja se assim funciona.
GOSTEI 0
Frost

Frost

25/01/2012

Boa Tarde
Emerson / Marcos

Emerson realmente passei batido
nr := Qry.Fields[0].AsInteger+1;
aqui fiz a correção e funcionou redondinho.

Obrigado mesmo pela ajuda
GOSTEI 0
Marco Salles

Marco Salles

25/01/2012

trocar

nr := Qry.Fields[0].value+1;

por

nr := Qry.Fields[0].AsInteger+1;

claro que eu fico com a segunda , mas estranhamente se fosse este o
problema não teria nen que funcionar com o Showmessage

ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000));; e aparece certinho a seguencia

aparece certinho a sequencia ... Vai entender .. Não deveria tb fincionar

Mas fico com a assinatura do cabelo

Se não deu certo é porque ainda não chegou a hora

No seu caso chegou a hora por isto deu certo .. vai entender ???
GOSTEI 0
Frost

Frost

25/01/2012

Boa Tarde
Marcos

Vai entender, por incrível que pareça realmente com o comando
ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000)); aparece certo.
por isso até passei batido pelo cod. uma vez que pelo ShowMessage está apresentando certo os cod correto 0001.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2012

bom, no OnNewRecord está usando a função matricula() e no ShowMessage está usando a função incrementa().

acho que uma pode estar errada e a outra está certa... uai !!!
GOSTEI 0
Marco Salles

Marco Salles

25/01/2012

bom, no OnNewRecord está usando a função matricula() e no ShowMessage está usando a função incrementa().

acho que uma pode estar errada e a outra está certa... uai !!!


Eu ja tinha percebido esta diferença de nomes .. Achei que fosse engano

erro de digitação
GOSTEI 0
POSTAR