Problemas com campo autoincrement(Firebird)
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.
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
Curtidas 0
Respostas
Aersoftware
17/07/2006
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.
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.
GOSTEI 0
Fabiano_aprendiz
17/07/2006
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
Os generators e as triggers foram criados, e o problema ocorre mesmo assim. Ficarei grato se puder me passar o código.
abçs
GOSTEI 0
Jlimajr
17/07/2006
Uso um generator assim:
Usando um generator assim:
Mais tambem naum sei se está correto.
Gostaria de tambem sanar esta duvida.
Gradecido.
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.
GOSTEI 0
Fabiano_aprendiz
17/07/2006
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?
Alguém já passou por isso?
GOSTEI 0
Aersoftware
17/07/2006
Olá,
O código que uso no evento OnNewRecord do ClientDataSet é o seguinte:
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.
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.
GOSTEI 0