Enfrentei um problema que me parece comum para iniciantes como eu no Firebird, tendo migrado há pouco tempo de bases de dados Paradox.
O PROBLEMA: Criei uma tabela, cujo DDL segue abaixo, contendo um campo incremental criado com Generator e usando um Trigger. Quando inseria um novo valor a partir de um DBgrid, usando um DataModule com acesso DBExpress na forma convencional (SqlConnection, SQLDataSet, DatasetProvider e um ClientDataset), o valor do campo ID_PERGUNTA, minha chave primária incremental, aparecia em branco, gerando erro na tentativa de Post. Gostaria que o mesmo fosse exibido com seu respectivo valor incrementado, como fazia anteriormente no Paradox. SOLUÇÃO: Criei uma Procedure no próprio DataModule, realizando um Select e incrementando o Generator: //Procedure que incrementa um Generator previamente criado em uma unidade, retornando seu valor procedure Tdmod1.Incrementa(Generator: String; PrimaryKey: TField); var Qry:TSQLQuery; begin if PrimaryKey.DataSet.State <> dsInsert then Exit; Qry := TSQLQuery.Create(nil); {: cria uma instância do objeto} try Qry.SQLConnection := SQLConnection1; {: componente de conexão} Qry.SQL.Add('SELECT GEN_ID('+Generator+',1)FROM RDB$DATABASE '); Qry.Open; PrimaryKey.AsInteger := Qry.Fields[0].AsInteger; finally FreeAndNil(Qry); {: libera o objeto da memória} end; end; ///Chamando a Procedure acima a partir do evento AfterInsert do ClientDataset (Acrescente os Campos ao projeto primeiramente) procedure Tdmod1.ClientDataSetPERGUNTAAfterInsert(DataSet: TDataSet); begin Incrementa('G_ID_PERGUNTA',ClientDataSetPERGUNTAID_PERGUNTA); end; A DDL DA TABELA PERGUNTA: SET SQL DIALECT 3; SET NAMES ISO8859_1; CREATE GENERATOR G_ID_PERGUNTA; CREATE TABLE PERGUNTA ( ASSUNTO VARCHAR(30) NOT NULL COLLATE PT_BR, ID_PERGUNTA INTEGER NOT NULL, CATEGORIA VARCHAR(30) NOT NULL COLLATE PT_BR, PERGUNTA VARCHAR(100) COLLATE PT_BR, TEXTO BLOB SUB_TYPE 1 SEGMENT SIZE 80, IMAGEM BLOB SUB_TYPE 0 SEGMENT SIZE 80 ); ALTER TABLE PERGUNTA ADD PRIMARY KEY (ID_PERGUNTA); ALTER TABLE PERGUNTA ADD FOREIGN KEY (ASSUNTO) REFERENCES ASSUNTO (ASSUNTO) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE PERGUNTA ADD FOREIGN KEY (CATEGORIA) REFERENCES CATEGORIA (CATEGORIA) ON DELETE NO ACTION ON UPDATE NO ACTION; SET TERM ^ ; Espero com isso ajudar outro iniciante como eu no uso de Generators e Triggers. Paulo Jorge