Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TrueConan

Criar um contador automatico DBExpress

Recommended Posts

Como faço para criar um contador automatico no campo Codigo que é minha chave primaria usando Interbase com DBExpress. Posso definir que gere um novo codigo seguencial para cada novo registro no Interbase? Estou começado a programar então talvez não esteja sendo muito claro. Mas o que eu quero é para cada novo registro o campo codigo adicione um novo valor baseado na leitura do codigo anterior do campo codigo do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem vários meios de se fazer...com Trigger... com Query... ai vai do gosto do freguês...No caso... vou dar o exemplo da trigger...

Var Codigo : Integer;Query1.Active := False;Query1.Sql.Clear;Query1.Sql.Add('Select Max(Codigo) as Ultimo');Query1.Sql.Add('From Tabela');Query1.Active := True; Codigo := Query1.FieldByName('Ultimo').Value + 1;Showmessage('O Próximo Código é: '+IntToStr(Codigo));

PS.:To sem o Delphi aqui... no caso pode ter algum comando meio escrito errado... mas ai você acerta ai!Testa aew e veja se da certo... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe a ignorancia mas como eu gero este trigger usando o dbExpress? Os eventos do SQLQuery não tem campos AfterInsert. Tem apenas After AfterClose, AfterOpen, Afterrefresh e Afferscroll.Estou começando a usar BD e desejo muito apreender porem não encontrei tutoriais que mostrem isso :(O codigo que eu gerei para mostrar o valor dentro da minha DBEdit1.text para quando eu fizer um proximo insert no meu DBNavigator adicione mais 1 não funcionou pq nao sei como gerar o Trigger. Muito obrigado pela ajuda.Var Codigo : Integer;beginSQLQuery1.Close; SQLQuery1.Sql.Clear; SQLQuery1.Sql.Add('Select Max(Codigo) as Ultimo');SQLQuery1.Sql.Add('From ANIMES'); SQLQuery1.Open;Codigo := SQLQuery.FieldByName('Ultimo').Value + 1;DBEdit1.text:= Inttostr(codigo);end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou feliz http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Consegui encontrar o trigger (event) AfterInsert usando um ClientDataSet Modifiquei um pouco o codigo mas a ideia é a mesma... estou muito feliz rs rs rs.... uma duvida pq não é possivel criar um link entre o DataSetProvider dentro de um Data Module para um ClientDataSet dentro de um Form??? Eu registrei a Unit do Data Module no meu Form porem as Properties ProviderName do ClientDataSet não localiza o servidor do DM, tive que trazer o dsProvider para o Form so assim conseguir fazer o link com o Client. Vlw agora vou brincar um pouco com o Delphi e ler os posts da galera para aprender mais.

 

procedure TForm1.SetAutoInc(DataSet:TDataSet);

var

valor:Integer;

begin

SQLQuery.Close;

SQLQuery.SQL.Text:='Select codigo from <tabela>';

SQLQuery.Open;

if (SQLQuery.RecordCount = 0) then

begin

DataSet.FieldByName('codigo').AsString:='1';

end

else

begin

valor:=0;

SQLQuery.First;

while not SQLQuery.Eof do

begin

if (SQLQuery.FieldByName('codigo').AsInteger > valor) then

begin

valor:= SQLQuery.FieldByName('codigo').AsInteger;

end;

SQLQuery.Next;

DataSet.FieldByName('codigo').AsInteger:=valor + 1;

end;

end;

end;

 

criei a procedure no event AfterInsert do clientdataset

 

procedure TForm1.ClientDataSetAfterInsert(DataSet: TDataSet);

begin

Self.SetAutoInc(dataset);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.