Fórum Como parar o generator do IB? #172055

29/07/2003

0

Criei generator. Eu chamo no OnPost da Query. Porem há um problema:
Mesmo q eu não chamo o método post, ele dispara assim mesmo, ou seja, digamos que o meu registro é o de nº 49. Aí eu insiro um novo registro, mas durante a digitação eu aperto o botão cancel, onde eu dou um cancel na tabela e um rollbackretaining no IBTransAction. E dou um insert e digito novamente. Qdo vou gravar, o campo relacionado ao generator q deveria receber o valor 50, recebe 51. Como desfazer um generator, qdo eu cancelar a operação? Não é ´Set generator to 0´, assim eu zero tudo, mas evitar que ele seja disparado. Obs: Eu uso a propriedade da tabela GeneratorField.


Paulo

Paulo

Responder

Posts

22/09/2003

Ipsgyn

Paulo, vou dizer como eu fiz. :lol:

Crieu uma Função chamada AutoInc.

function AutoInc(vCampo: string; vIncremento: string): integer;

[color=blue:89d4299f29]function AutoInc(vCampo: string; vIncremento: string): integer;
var
DS: TDataSource;
Q: TIBQuery;
begin
Q := TIBQuery.Create(DM);
Q.Database := DM.dtbSamWin;
DS := TDataSource.Create(DM);
DS.DataSet := Q;
with Q do begin
Close;
SQL.Clear;
SQL.Add(´SELECT GEN_ID(´ + vCampo +´,´+ vIncremento +´) FROM RDB$DATABASE´);
Open;
Result := DS.DataSet.Fields[0].AsInteger;
If vIncremento = ´0´ then
Result := Result + 1;
DS.Free;
Q.Close;
Q.Free;
end;
end;[/color:89d4299f29]

Como utiliza-la:
1º no botão incluir:
dtsPadrao.DataSet.FieldByName(´CODCLIENTE´).AsInteger := AutoInc(´SEQ_CONTRIBUINTE´,´0´);
* o que ele faz: ele vai no banco de dados e pega a codigo e não soma nada no banco de dados.

2º no botão Gravar:
dtsPadrao.DataSet.FieldByName(´CODCONTRIB´).AsInteger := AutoInc(´SEQ_CONTRIBUINTE´,´1´);

obs: sou iniciante na programação Delphi, mas fiz e funcionou, se vc tiver algum problema e executa-la me passe e-mail. até +
[color=red:89d4299f29]ipsgyn em 22/09/2003[/color:89d4299f29]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar