auto-incremento pelo banco
Olá pessoal,
vi varias msg no forum sobre esse assunto, porem nehuma delas resolveu meu problema. então vamos lá ....
Uso o bando de dados informix, e criei uma tabela da seguinte forma :
O campo num_transac é um auto incremento, para criar um novo registro basta passar no insert o valor 0 (zero) para que o proprio banco gere o proximo numero.
via sql estou faço sem problemas, ou seja, enviando o comando direto para o banco, da seguinte forma:
insert into fbr_inv_audit
values ( 0, ´601´, ´anderon´, ´155.155.0.1´, ´10/11/2007´ , ´08:10:10´
, ´teste´);
porem quando tento mandar via Tquery --> TDataSetProvider --> TClientDataSet. Quando passo as informações para o Cds, via append, passo as informações para cada campo, sendo que no num_transac informo q será 0 (zero), e faço o post, não sei pq ele não atualiza no banco.
vale lembrar que tenho configurado o no Cds, nos eventos AfterPost e AfterDelete o comando applyupdates(0);
alguem pode me ajudar ?
Muito obrigado.
vi varias msg no forum sobre esse assunto, porem nehuma delas resolveu meu problema. então vamos lá ....
Uso o bando de dados informix, e criei uma tabela da seguinte forma :
Column name Type num_transac serial num_etiqueta integer cod_usuario char(25) ip_maq char(25) dat_alter date hor_alter char(8 ) log_alter char(300)
O campo num_transac é um auto incremento, para criar um novo registro basta passar no insert o valor 0 (zero) para que o proprio banco gere o proximo numero.
via sql estou faço sem problemas, ou seja, enviando o comando direto para o banco, da seguinte forma:
insert into fbr_inv_audit
values ( 0, ´601´, ´anderon´, ´155.155.0.1´, ´10/11/2007´ , ´08:10:10´
, ´teste´);
porem quando tento mandar via Tquery --> TDataSetProvider --> TClientDataSet. Quando passo as informações para o Cds, via append, passo as informações para cada campo, sendo que no num_transac informo q será 0 (zero), e faço o post, não sei pq ele não atualiza no banco.
vale lembrar que tenho configurado o no Cds, nos eventos AfterPost e AfterDelete o comando applyupdates(0);
alguem pode me ajudar ?
Muito obrigado.
Vieira
Curtidas 0
Respostas
Sistemald
06/12/2007
olhe o evento onreconcileerro (mais ou menos isso, to sem o delphi aqui), pois o clientDataset não gera excessão ao ocorrer um erro, através deste metodo você pega o erro que esta acontecendo no banco
GOSTEI 0
Paullsoftware
06/12/2007
Amigo, eu passei pro isso e espero que seiu problema seja igual ao que ocorreu comigo para que eu possa te ajudar!!
para disparar o gerador do banco eu uso a funcao abaixo:
para passar o valor ´0´ zero na aplicação cliente, adicione no evento OnAffterInsert do ClientDataSet...
espero ter ajudado amigo! qq coisa é só dar um grito ae blz! :wink:
para disparar o gerador do banco eu uso a funcao abaixo:
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:
no Evento BeforedUpdateRecord do DataSetProvider adicione o código abaixo
if SourceDS.Name = ´NomeDoSeuDataSet´ then DeltaDS.FieldByName(´NomeDoCampoAutoIncremento´).NewValue := NewGen(´NomeDoSeuGerador´,sqlCONN);
if cdsNomeTabelaNomeCampoAutoIncremento.IsNull then cdsNomeTabelaNomeCampoAutoIncremento.AsInteger := 0;
espero ter ajudado amigo! qq coisa é só dar um grito ae blz! :wink:
GOSTEI 0
Itepi
06/12/2007
ola verifique se tanto na query qto no clientdataset no campo num_transac a propriedade Required esta como false, se estiver como True o auto incremento pelo banco de dados não funciona!!
Espero que ajude, poste aqui depois se funcionou!!
Espero que ajude, poste aqui depois se funcionou!!
GOSTEI 0