[firebase-br] Trigger + ClientDataSet

Fausto fausto.s.a em uol.com.br
Ter Nov 30 14:14:14 -03 2004


Amigo utilize esta função....
function TForm1.GetNewGen(Gen_Name: string): integer;
var
  ResultSet: TCustomSQLDataSet;
  SQLstmt: string;
begin
  SQLStmt := 'SELECT gen_id(' + Gen_Name + ',1) as valor from 
RDB$DATABASE;';
  ResultSet := nil;
  try
    FBConnection.Execute(SQLstmt, nil, @ResultSet);
    if Assigned(ResultSet) then begin
      Result := ResultSet.FieldByName('valor').AsInteger;
    end;
  finally
    ResultSet.Free;
  end;
end;

E chame-a assim no evento AfterInsert do ClientDataSet.
procedure TForm1.CDSAfterInsert(DataSet: TDataSet);
begin
  SuaChavePrimaria.asInteger := GetNewGen('Seu_Generator')
end;

Fausto
Esta função foi retirada de um exemplo do Cantu para a revista ClubeDelphi

----- Original Message ----- 
From: "Leonardo" <leomarcsys em mcnet.inf.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, November 30, 2004 1:43 PM
Subject: [firebase-br] Trigger + ClientDataSet


Boa tarde amigos da lista,

Criei a dupla GENERATOR+TRIGGER em minha base de dados sendo que o
trigger é BEFORE INSERT, e no delphi utilizo o time
SQLDATASET+DATASETPROVIDER+CLIENTDATASET.

No formulário de manutenção da tabela  uso os DataControls nativos do
delphi 7.


O problema é que quando vou inserir um novo registro ao tentar gravá-lo
(POST + APPLYUPDATES(-1)) eu recebo um erro informando que o campo
chaveprimária não pode conter valor vázio!!!

Andei pesquisando e algumas prováveis soluções  que encontrei não
funcionaram!

Uma é a de inserir um valor simbólico na chave primária antes do post,
na dia diz que este valor seria substituído pelo GENERATOR na base de
dados, mas isto não ocorre, ao verificar a inserção o valor da chave
primária é o dito valor simbólico!!!

Como posso resolver tal situação?


Cordialmente,

Leonardo Marcelino Teixeira
Corpo de Bombeiros Militares - Divinópolis/MG

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br


-- 
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.289 / Virus Database: 265.4.3 - Release Date: 26/11/2004




-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.289 / Virus Database: 265.4.3 - Release Date: 26/11/2004





Mais detalhes sobre a lista de discussão lista