Você está na página 1de 2

Todo mundo sabe como é dificil criar um auto-incremento no Firebird/Interbase, como no Paradox (que é

simples, mas cheio de problemas).

A solução é a seguinte:

Depois de ter criado o banco de dados (usando o IBExpert ou outro da sua escolha);

Clique no campo Codigo (possível auto incremento), edite o campo e clique na aba AUTOINCREMENT,entre
outras opções aparece o checkbox create generator, marque esse checkbox.

Depois, depois clique na aba Trigger selecionando o checkbox


create trigger e em seqguida, clique em OK e depois pressione o botão commit, para gravar as alterações.

Faça isso para todas as tabelas que usarão auto incremento.

Abra o DELPHI e coloque nele os seguintes componentes:

Se for usar DBExpress:


SQLConnection1 e SQLDataSet1

Se for usar Interbase


IBClientDataSet, IBTransaction e IBDatabase e depois IBTable (para ligar as tabelas)

Depois vá para a paleta DATA ACCESS e coloque no form os seguintes componentes.


DataSetProvider, ClientDataSet e um DataSource agora vamos configurar suas propriedades

Configure o SQLConnection da seguinte forma (o padrão, mas apenas para seguir uma ordem, vou relatar)

SQLConnection1
propriedade Login Prompt =FALSE
propriedade Connected = TRUE
propriedade SQLDIALECT = DIALECT 3
propriedade DATABASE = C:\TESTE\EXEMPLO.FDB //troque pelo endereço do seu banco de dados
Firebird/Interbase

SQLDataSet1
coloque a propriedade SQLConnection = SQLConnection1
propriedade ACTIVE = FALSE
propriedade COMMAND TEXT= Select * from suatabela //troque por sua linha de SQL
Propriedades do DataSetProvider1 coloque a propriedade DataSet=SQLDataSet1

ClientDataSet1 ou IBClientDataSet1
coloque a propriedade Providername =DataSetProvider1
Active = false
Propriedades do DataSource1 coloque a propriedade DataSet=ClientDataSet1
Active=false

Agora vem a parte mais importante:


Depois das propriedades todas configuradas da um duplo clique no SQLDataSet1 para adicionar todos os
campos em seguida selecione o campo CODIGO e no objeto inspector clique na propriedade PROVIDER FLAGS
sub-opção pflnUPDATE e mude para = FALSE. Faça o mesmo para a propriedade REQUERID coloque = FALSE.
Repita esse processo no ClientDataSet ou nos IBTables

Ative o SQLDataSet1 e ClientDataSet1

No form, no botao NOVO coloque a seguinte rotina


ClientDataSet1.Append;
DBEdit2.SetFocus;

no botao SALVAR
ClientDataSet1.ApplyUpdates(0);
ClientDataSet1.Refresh;

no botao EDITAR coloque a seguinte rotina


ClientDataSet1.Edit;
Coloque um grid e faça o teste.
A soulção é a seguinte:

No Ibexpert
Quando criar as suas tabelas defina o campo chave como autoincremento e na janelinha do
ibexpert marque as opções create generator e create procedure. Deixe os nomes padrões que
ele gera tipo GEN_IDTabela

No Delphi
Configure o campo chave na janela TFields do ClientDataset com a propriedades Require como
False

Ainda no Delphi no evento AfterUpdateRecord do DataSetProvider teste


if UpdateKind=ukInsert then
begin DeltaDS.FieldByName('Campo').NewValue:=GenID('Tabela');
end;

function TDM.GenID(tablename: String): Integer;


var
Qry: TSQLQuery;
begin
Qry := TSQLQuery.Create(Self);
Qry.SQLConnection := DBAcesso;
Qry.SQL.Add('SELECT GEN_ID(GEN_'+tablename+'_ID,1) FROM RDB$DATABASE');
Qry.Open;
Result := Qry.Fields[0].AsInteger;
end;

espero que tenha ajudado !

Você também pode gostar