Autoincremento sem generator

Firebird

23/06/2004

create trigger ´InsereCidade´ for ´cidade´
active before insert position 0
as
declare variable autoinc integer;
begin
select max(´codigo´) from ´cidade´ into autoinc;
if (autoinc is null) then
autoinc = 0;
autoinc = autoinc + 1;
new.´codigo´ = autoinc;
end

Essa trigger deu certo, mas a duvida é:

como faço para inserir um registro, selecionando o maximo de um campo nessa funcao, pela loja e documento, caso esteja trabalhando com outra tabela ??

Brigaduuuuu ...


[b:87cd693d03]Título editado. Não postar em caixa alta, pois equivale a gritar. Por favor, leia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url].[/b:87cd693d03]
Sandra/Moderação


Wiltefran

Wiltefran

Curtidas 0

Respostas

Bon Jovi

Bon Jovi

23/06/2004

Funciona legal sim, mas pq ser trigger?

´selecionando o maximo de um campo nessa funcao, pela loja e documento, caso esteja trabalhando com outra tabela ´

Nao sei se entendi bem, pois nao deixou claro qual a estrutura da tabela. Supondo ser tabela DOCUMENTO(ID_DOCUMENTO(pk), ID_LOJA(pk)), via programa, Delphi por exemplo:

Novo_Id_Documento_Teste := ObtemNovoId(´DOCUMENTO´, ´ID_DOCUMENTO´, ´ID_LOJA = ´ + IntToStr(Id_Loja_Teste)); 
    function ObtemNovoId(ATabela, ACampo, AWhere: string): integer; overload;
    function ObtemNovoId(ATabela, ACampo: string): integer; overload;

implementation

function TDataModule2.ObtemNovoId(ATabela, ACampo, AWhere: string): integer;
var
  SQLDataSet: TSQLDataSet;
begin
  SQLDataSet := TSQLDataSet.Create(nil);
  try
    SQLDataSet.SQLConnection := SQLConnection1;
    SQLDataSet.CommandText :=
      ´SELECT MAX(´ + ACampo + ´) AS MAXIMO ´ +
      ´FROM ´ + ATabela;

    if AWhere <> ´´ then
      SQLDataSet.CommandText := SQLDataSet.CommandText + ´ WHERE ´ + AWhere;

    SQLDataSet.Open;

    if SQLDataSet.FieldByName(´MAXIMO´).IsNull then
      Result := 1
    else
      Result := SQLDataSet.FieldByName(´MAXIMO´).AsInteger + 1;

    SQLDataSet.Close;
  finally
    FreeAndNil(SQLDataSet);
  end;
end;

function TDataModule2.ObtemNovoId(ATabela, ACampo: string): integer;
begin
  Result := ObtemNovoId(ATabela, ACampo, ´´);
end;




GOSTEI 0
POSTAR