Auto incremento num insert pelo delphi

Delphi

22/11/2008

Tenho um form de vendas no delphi 7, e estou tendo problemas com o codigo de gerar um ID nova p/cada registro.

O codigo esta abaixo:

[b:5cd5a46080]Entra no evento BeforePost da tabela Vendas:[/b:5cd5a46080]
if DataSourceVenda.State = dsInsert
then
begin
DataModule.QueryVenda.Active := False;
DataModule.QueryVenda.Active := True;
with DataModule.QueryVenda.Fields[0] do
if IsNull then
DataModule.TabelaVendasID_VENDA.Value := 1
else
DataModule.TabelaVendasID_VENDA.Value := AsInteger + 1;
end;

[b:5cd5a46080]*[/b:5cd5a46080]Na query possui uma instrucao com a funcao MAX() p/pegar o valor maximo dos codigos de venda.

[b:5cd5a46080]Verificacao do event AfterPost tbm da tabela:[/b:5cd5a46080]
if DataModule.IBODatabase1.IsSQLBased then
begin
DataModule.IBODatabase1.Commit;
DataModule.IBODatabase1.StartTransaction;
end;

Uso esta maneira nas outras tabelas de cadastros normais e vem funcionando normalmente,
neste desta vez de vendas com mestre detalhe que tem dado erro.

O problema eh q na tabela dos Itens de venda para salvar os itens eu preciso da id da venda,
e esta soh eh gerada qd a salvo!
E queria saber como obte-la antes, qd eh criada um novo registor na tabela!

Jah tentei colocar no evento Insert e deu pau!

Me falaram sobre criar o autoincremento no proprio banco, mais nao tenho este conhecimento xD

ps: estou usando o firebird 2.1

Grato!


Id00111001

Id00111001

Curtidas 0

Respostas

Paulo

Paulo

22/11/2008

O problema eh q na tabela dos Itens de venda para salvar os itens eu preciso da id da venda, e esta soh eh gerada qd a salvo!


Faz sentido isso, certo? Pois eu não posso ter algo ainda se não gravei. O que se pode fazer é criar uma tabela Auxiliar para ir guardando os códigos. Essa tabela só recebe Update e não Insert, para que ela tenha apenas uma única linha e aí sim, trabalhar com esse código gerado, tanto para itens como para a própria venda. Auto incremento pode até ser bom, mas cada exclusão feita ou um cancel, aquele codigo gerado será perdido e nunca mais poderá ser recuperado. Da forma como passei não, poderá criar rotinas de estorno de ID e etc... para voltar ao código anterior(Tipo UNDO).


GOSTEI 0
POSTAR