ClientDataSet e Generator
Bom o problema é simples tenho a seguinte tabela com o seguinte generator e abaixo a trigger
agora no delphi eu falo assim
ClientDataSet.Append; até ai blz
mas qdo eu dou um
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(-1);
ele fala q o campo ´Chave_1´ não foi preenchido..
ai q ta.. isso naum deveria ser automático pela trigger?
não entendo!
alguém poderia me ajudar
desde ja agradeço
Att. Renato
CREATE GENERATOR LCTO_LIVROS; CREATE TABLE LCTOEMPRE_DEVOL ( CHAVE_1 INTEGER NOT NULL, CLCLIENTE INTEGER NOT NULL, LIVCODIGO INTEGER NOT NULL, DATAEMPRESTIMO DATE, DATADEVOLUCAO DATE, DATAPREVISTA DATE, MULTA FLOAT, STATUS CHAR(1) ); CREATE TRIGGER LCTOEMPRE_DEVOL_AI0 FOR LCTOEMPRE_DEVOL ACTIVE BEFORE INSERT POSITION 0 AS begin if (new.chave_1 is null) then new.chave_1 = gen_id(lcto_livros,1); end
agora no delphi eu falo assim
ClientDataSet.Append; até ai blz
mas qdo eu dou um
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(-1);
ele fala q o campo ´Chave_1´ não foi preenchido..
ai q ta.. isso naum deveria ser automático pela trigger?
não entendo!
alguém poderia me ajudar
desde ja agradeço
Att. Renato
Rhosaka
Curtidas 0
Respostas
Beppe
17/07/2004
Acho que o Before Insert só ocorre após o ApplyUpdates. Inicialize o campo CHAVE_1 com um valor qualquer, e na trigger remova o teste is null.
GOSTEI 0
Bon Jovi
17/07/2004
Nao vejo pq usar trigger pra pegar ID, acho q só atrapalha, como foi nesse caso. Prefiro nao complicar:
function TDataModule2.GeraSequenceInterbase(Nome: string): integer; begin SQLDataSet.Close; SQLDataSet.CommandText := ´SELECT GEN_ID(´ + Nome + ´, 1) AS NOVO_ID FROM RDB$DATABASE´; SQLDataSet.Open; Result := SQLDataSet.FieldByName(´NOVO_ID´).AsInteger; SQLDataSet.Close; end; ClientDataSet.Append; ClientDataSet.FieldByName(´CHAVE_1´).AsInteger := GeraSequenceInterbase(´LCTO_LIVROS´); ClientDataSet.Post; ClientDataSet.ApplyUpdates(-1);
GOSTEI 0
Ltres
17/07/2004
concordo com Bon Jovi, faça uma rotina padrao q pode ser usada com qualquer generator. Algo do tipo
function RetornaGenerator(vGen: String; Conect: TSQLConnection): integer; var TMPsql: TSQLQuery; begin Result := -1; try TMPsql := TSQLQuery.Create(nil); TMPsql.SQLConnection := Conect; TMPsql.SQL.Text := ´SELECT GEN_ID(´ + vGen + ´, 1) AS VLR FROM RDB$DATABASE´; TMPsql.Active := True; Result := TMPsql.FieldByName(´VLR´).AsInteger; finally TMPsql.Free; end; end;
GOSTEI 0
Rhosaka
17/07/2004
Valeu pessoal,
consegui resolver meu problema...
Até mais..
consegui resolver meu problema...
Até mais..
GOSTEI 0