Ajuda: TDBXError with message

Delphi

Firebird

03/12/2014

Olá pessoal.
Estou desenvolvendo uma aplicação usando o Delphi 2010 e Firebird 2.0 IBExpert 2012.
O método que eu uso para inserir o código automático é o seguinte:

create trigger cursopai_bi for cursopai
active before insert position 0
as
begin
if (new.cursopaiid is null) then
new.cursopaiid = gen_id(gen_cursopai_id,1);
end

No meu DataModule eu tenho este código:

private
function genID(tablename: string): Integer;
procedure getID(DataSet: TDataSet);
{ Private declarations }
public
{ Public declarations }
end;

var
DM: TDM;

implementation

{$R *.dfm}

{ TDM }

function TDM.genID(tablename: string): Integer;
var
qry: TSQLQuery;
begin
qry:= TSQLQuery.Create(Self);
qry.SQLConnection:= DBTeste;
qry.SQL.Add('SELECT GEN_ID(GEN_'+tablename+'_ID,1) FROM RDB$DATABASE');
qry.Open;
Result:= qry.Fields[0].AsInteger;
end;

procedure TDM.DataModuleCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Pred(ComponentCount) do
if Components[I] is TClientDataSet then
begin
TClientDataSet(Components[I]).OnNewRecord:= getID;
end;
end;

procedure TDM.getID(DataSet: TDataSet);
begin
DataSet.Fields[0].AsInteger:= genID(Copy(DataSet.Name,3));
end;
end.

Eu tenho 7 tabela no banco de dados e apenas uma estar dando o seguinte erro ao incluir um registro:

Project CFC.exe raised exception class TDBXError with message 'invalid request BLR at offset 52
generator GEN_SCURSOPAI_ID in not defined.

Alguêm poderia me ajudar ???
Jean Carlos

Jean Carlos

Curtidas 0

Respostas

Jean Carlos

Jean Carlos

03/12/2014

Programação é de doer a cabeça, há 4 dias que eu venho tentando resolver este erro, e o erro estava na minha frente o tempo todo
Só que eu nunca ia imaginar que fosse um erro.
O meu componente ClienDataSet que recebe a tabela cursopai estava renomeada da seguinte forma: cdscursopai, os outros componentes das tabelas que não deram erro estavam apenas como ds então eu apenas tirei o c do cdscursopai apenas para ficar como os outros, sem saber que isso iria resolver meu problema, pois ao rodar o programa e tentar inserir novamente não apresentou mais erro.
Ai eu pensei não pode ser só isso, fui La e coloquei o c de novo rodei o programa e apresentou o mesmo erro rsrsrsrs.
Moral da historia era apenas o meu componente ClientDataSet que não quis ser chamado de cds apenas ds.

Problema resolvido.
GOSTEI 0
Douglas

Douglas

03/12/2014

Por favor, encerrem o tópico!
GOSTEI 0
Jean Carlos

Jean Carlos

03/12/2014

Como posso encerrar o Topico ??
GOSTEI 0
Douglas

Douglas

03/12/2014

Jean, não se preocupe! A equipe DevMedia é que encerra.
GOSTEI 0
POSTAR