Código Matricula incremento
Bom Dia
Tenho a seguinte função para gerar cod automatico campo da tabela MATRICULA (INTEGER)
estou chamando essa função no OnNewRecord da query porem não grava no banco esta gravando 0
no que estou errando
Coloquei a ShowMessage (Incrementa(TB_CLIENTE,MATRICULA, DM.Connection,0000));; e aparece certinho a seguencia
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
Curtidas 0
Respostas
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
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);
o correto seria algo assim, no OnNewRecord:
dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
GOSTEI 0
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);
Marco / Emerson
É bem assim mesmo que estou usando
dataset.fieldbyname(matricula).asstring := matricula(TB_CLIENTE,MATRICULA,DM.Connection,0000);
GOSTEI 0
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.
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
25/01/2012
Boa Tarde
Emerson / Marcos
Emerson realmente passei batido aqui fiz a correção e funcionou redondinho.
Obrigado mesmo pela ajuda
Emerson / Marcos
Emerson realmente passei batido
nr := Qry.Fields[0].AsInteger+1;
Obrigado mesmo pela ajuda
GOSTEI 0
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 ???
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
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.
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
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 !!!
acho que uma pode estar errada e a outra está certa... uai !!!
GOSTEI 0
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 !!!
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