Fórum Código Matricula incremento #411923

25/01/2012

0

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

Responder

Posts

25/01/2012

Marco Salles


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

Responder

Gostei + 0

25/01/2012

Emerson Nascimento

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);
Responder

Gostei + 0

25/01/2012

Frost

Boa Tarde
Marco / Emerson

É bem assim mesmo que estou usando

dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
Responder

Gostei + 0

25/01/2012

Emerson Nascimento

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.
Responder

Gostei + 0

25/01/2012

Frost

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
Responder

Gostei + 0

25/01/2012

Marco Salles

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 ???
Responder

Gostei + 0

25/01/2012

Frost

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.
Responder

Gostei + 0

26/01/2012

Emerson Nascimento

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 !!!
Responder

Gostei + 0

26/01/2012

Marco Salles

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
Responder

Gostei + 0

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

Aceitar