TrueConan 0 Denunciar post Postado Março 12, 2007 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
Hugo Slepicka 0 Denunciar post Postado Março 12, 2007 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
TrueConan 0 Denunciar post Postado Março 12, 2007 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
TrueConan 0 Denunciar post Postado Março 13, 2007 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