Auto incremento num insert pelo delphi
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!
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
Curtidas 0
Respostas
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