Generator não gera ID
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.
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
Curtidas 0
Respostas
Rafael Brendolan
20/08/2013
Está usando Client Data Set?
Lembre de colocar o campo ID como AutoInc e Required = False.
Lembre de colocar o campo ID como AutoInc e Required = False.
GOSTEI 0
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?
Estou usando um IBDataSet.....e sim, coloquei o campo ID como AutoInc.....agora, como coloco o Required como False?
GOSTEI 0
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
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?
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
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...
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