Fórum Código Matricula incremento #411923
25/01/2012
0
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);
Coloquei a ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000));; e aparece certinho a seguencia
Frost
Curtir tópico
+ 0Posts
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
Gostei + 0
25/01/2012
Emerson Nascimento
o correto seria algo assim, no OnNewRecord:
dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
Gostei + 0
25/01/2012
Frost
Marco / Emerson
É bem assim mesmo que estou usando
dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
Gostei + 0
25/01/2012
Emerson Nascimento
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
25/01/2012
Frost
Emerson / Marcos
Emerson realmente passei batido
nr := Qry.Fields[0].AsInteger+1;
Obrigado mesmo pela ajuda
Gostei + 0
25/01/2012
Marco Salles
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
25/01/2012
Frost
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
26/01/2012
Emerson Nascimento
acho que uma pode estar errada e a outra está certa... uai !!!
Gostei + 0
26/01/2012
Marco Salles
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
Clique aqui para fazer login e interagir na Comunidade :)