Fórum auto-incremento pelo banco #350169

06/12/2007

0

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 :
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

Vieira

Responder

Posts

10/12/2007

Sistemald

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


Responder

Gostei + 0

10/12/2007

Paullsoftware

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:
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);
para passar o valor ´0´ zero na aplicação cliente, adicione no evento OnAffterInsert do ClientDataSet...
 if cdsNomeTabelaNomeCampoAutoIncremento.IsNull then
  cdsNomeTabelaNomeCampoAutoIncremento.AsInteger := 0;

espero ter ajudado amigo! qq coisa é só dar um grito ae blz! :wink:


Responder

Gostei + 0

10/12/2007

Itepi

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!!


Responder

Gostei + 0

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

Aceitar