Problemas de inserção em DbGrid e Firebird
Estou utilizando Firebird 2.0, delphi 7, criei uma tela com uma dbgrid, onde será inserida itens do pedido diretamente nela, criei um generator e uma trigger para criação de num. sequencial para não dar problema como quando há repetição de itens, utilizo também componentes dbexpress como SQLDataSet, DataSetProvider, ClientDataSet, enfim, o problema é o seguinte, informo o código, qtde e valor e pulo a linha, o dbgrid faz o salvamento automatico, coloquei o ApllyUpdates no after post, mas quando insiro o segundo item ele me retorna Key Violation, mas antes mesmo do segundo aplyupdates, ou seja, desconfio que ele não salva o campo incrementado, mas olho dentro da base, e eles está lá. Então, onde estou errando, alguém pode me dar uma dica, por favor!!!
Bareja
Curtidas 0
Respostas
Paullsoftware
26/04/2007
eu faço assim:
dispara o meu gerador...
Modo de usar:
além disso eu tb altero as opções do DSP que são:
AutoRefresh = True;
AllowCommandText = True; [i:5e65ed853c]mais nesse caso só útil quando usamos comandos SQL no ClienteDataSet...[/i:5e65ed853c]
PropogateChanges = True;
CascadeUpdates = True;
CascadeDeletes = True;
mais algumas dessas propriedades são necessárias apenas em alguns casos...
espero ter ajudado! :wink:
dispara o meu gerador...
function NewGen(GenName: String; aConexao:TSQLConnection): integer; var ResultSet: TCustomSQLDataSet; SQLstmt: string; begin SQLStmt := ´SELECT CAST(gen_id(´ + GenName + ´,1)as integer) as NewValor from RDB$DATABASE;´; ResultSet := nil; try aConexao.Execute(SQLstmt, nil, @ResultSet); if Assigned(ResultSet) then begin Result := ResultSet.FieldByName(´NewValor´).AsInteger; end; finally ResultSet.Free; end; end; (* NewGen *)
Modo de usar:
NewGen(´Nome_do_Gerador´,SqlConnection1);
no evento [b:5e65ed853c]BeforeUpdateRecord[/b:5e65ed853c] do seu DataSetProvider principal faça mais ou menos como o código abaixo...if SourceDS.Name = ´dstFILIAIS´ then DeltaDS.FieldByName(´CODIGO´).NewValue := NewGen(´GEN_FILIAIS_ID´,sqlCONN); if SourceDS.Name = ´dstTEXTOS_CONFIG´ then DeltaDS.FieldByName(´ID´).NewValue := NewGen(´GEN_TEXTOS_ID´,sqlCONN); if SourceDS.Name = ´dstACERVO´ then DeltaDS.FieldByName(´CODIGO´).NewValue := NewGen(´GEN_ACERVO_ID´,sqlCONN); if SourceDS.Name = ´dstATORES´ then DeltaDS.FieldByName(´CODIGO´).NewValue := NewGen(´GEN_ATOR_ID´,sqlCONN); if SourceDS.Name = ´dstCATEGORIAS´ then DeltaDS.FieldByName(´CODIGO´).NewValue := NewGen(´GEN_CATEG_ID´,sqlCONN);
além disso eu tb altero as opções do DSP que são:
AutoRefresh = True;
AllowCommandText = True; [i:5e65ed853c]mais nesse caso só útil quando usamos comandos SQL no ClienteDataSet...[/i:5e65ed853c]
PropogateChanges = True;
CascadeUpdates = True;
CascadeDeletes = True;
mais algumas dessas propriedades são necessárias apenas em alguns casos...
espero ter ajudado! :wink:
GOSTEI 0