GARANTIR DESCONTO

Fórum Problemas com campo autoincrement(Firebird) #325462

17/07/2006

0

Prezados Colegas,

Tenho um banco com 2 tabelas e em cada uma delas criei um campo autoincrement, mas estou tendo problemas, pois quando tento salvar um registro recebo a seguinte mensagem de erro: Field value required.
Já fui no ClientDataSet e na Query e desliguei a propriedade Required dos campos, as opções pfInKey da propriedade ProviderFlags também estão desligadas, mas o erro persiste. Alguma outra dica??
Desde já agradeço.
Abçs.


Fabiano_aprendiz

Fabiano_aprendiz

Responder

Posts

17/07/2006

Aersoftware

Fabiano, pro campo auto-incremento funcionar, tem que criar na base de dados um gerador e uma trigger para cada tabela.

Eu uso isso, e como eu gosto de ter o código gerado logo que insiro um nome registro, ainda coloco um código no evento OnNewRecord do ClientDataSet. Posso te passar ele quando chegar em casa.


Responder

Gostei + 0

17/07/2006

Fabiano_aprendiz

Olá AerSoftware,

Os generators e as triggers foram criados, e o problema ocorre mesmo assim. Ficarei grato se puder me passar o código.
abçs


Responder

Gostei + 0

17/07/2006

Jlimajr

Uso um generator assim:

Usando um generator assim:

procedure
TForm1.Button1Click(Sender: TObject);
begin
with dm.qrygeracodigo do
  begin
    close;
    sql.clear;
    sql.add(´SELECT CAST(GEN_ID(gen_empresas_id,1) AS INTEGER) AS COD FROM
RDB$DATABASE´);
    open;

dm.ibtb1.append;
dm.ibtb1.FieldByName(´CODEMPR´).AsInteger:=
DM.qrygeracodigo.fieldbyname(´COD´).asinteger;
end;


Mais tambem naum sei se está correto.

Gostaria de tambem sanar esta duvida.

Gradecido.


Responder

Gostei + 0

17/07/2006

Fabiano_aprendiz

Fiz um macete seguindo uma dica q achei na rede e segundo depoimentos essa dica funciona, agora na hora q estou tentando gravar, está ocorrendo outro erro, e o erro é o seguinte: violation of Foreign Key constraint ´Integ_20´ on table ´Visita´.
Alguém já passou por isso?


Responder

Gostei + 0

17/07/2006

Aersoftware

Olá,

O código que uso no evento OnNewRecord do ClientDataSet é o seguinte:

var
  ResultSet : TCustomSQLDataSet;
  SQLstmt : string;

begin
  SQLstmt := ´select gen_id(GEN_TABELA_ID, 1) ´+
             ´as VALOR from RDB$DATABASE;´;
  ResultSet := nil;
  try
    ConexaoFb.Execute(SQLstmt, nil, @ResultSet);
    if Assigned(ResultSet) then
      ClientDataSetCAMPO_CODIGO.AsInteger :=
        ResultSet.FieldByName(´VALOR´).AsInteger;
    finally
      ResultSet.Free;
    end;


Onde em GEN_TABELA_ID vai o nome do gerador criado e em
ClientDataSetCAMPO_CODIGO vai o nome dado ao TClientDataSet seguido do nome dado ao campo de chave primária.


Responder

Gostei + 0

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

Aceitar