Generator não gera ID

Delphi

20/08/2013

Ola pessoal......mais uma vez aqui para pedir ajuda a vocês...

Estou montando um sistema em Delphi com BD Firebird. Usando o IBExpert para montar as tabelas, criei a tabela, o generator, a trigger e o procedure, tudo listado pelo IBExpert. No formulário fiz a conexão e deu tudo ok. Fiz os teste de ler os registros da tabela e deu tudo ok. Mas na hora de inserir um novo registro, ele não gera o ID e nem mostra no campo referente ao ID do formulário e com isso na hora de postar da erro porque o valor está nulo.

Alguém pode me ajudar por favor com uma luz para resolver isso?

Agradeço a ajuda que aparecer.
Carlos Magno

Carlos Magno

Curtidas 0

Respostas

Rafael Brendolan

Rafael Brendolan

20/08/2013

Está usando Client Data Set?
Lembre de colocar o campo ID como AutoInc e Required = False.
GOSTEI 0
Carlos Magno

Carlos Magno

20/08/2013

Opa, Rafael......

Estou usando um IBDataSet.....e sim, coloquei o campo ID como AutoInc.....agora, como coloco o Required como False?
GOSTEI 0
Rafael Brendolan

Rafael Brendolan

20/08/2013

Abre o componente, seleciona o campo ID e lá em baixo vai ter Required. Coloque como False. Ai antes de dar o ApplyUpdate você tem que passar o ID.
GOSTEI 0
Carlos Magno

Carlos Magno

20/08/2013

Rafael, desculpe pela demora em responder.....a sua dica deu certíssimo....agora só um detalhe....

Como eu faria então para que, quando eu clicasse no botão insert para iniciar um novo registro, o novo ID aparecesse no campo ID do formulário?
GOSTEI 0
Deivison Melo

Deivison Melo

20/08/2013

Porquê não usa uma função para retornar esse valor?

No final das contas irá ser praticamente a mesma coisa....


function GeneratorID (aName: string; Connection: TSQLConnection; Incrementa: Boolean): integer;

function GeneratorID (aName: string; Connection: TSQLConnection;
Incrementa: Boolean): integer;
var
Qry: TSQLQuery;
begin
Qry := TSQLQuery.Create(nil);
try
Qry.SQLConnection := Connection;
if Incrementa then
Qry.SQL.Add(
'SELECT GEN_ID('+aName+', 1) FROM RDB$DATABASE')
else
Qry.SQL.Add(
'SELECT GEN_ID('+aName+', 0) FROM RDB$DATABASE');
Qry.Open;
Result := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry);
end;
end;


O retorno vc salva em um campo (Edit ou dbedit) e até mesmo em um label...

GOSTEI 0
POSTAR