DbExpress X Interbase

Delphi

03/02/2003

Prezados Amigos,

estou com uma duvida. estou trabalhando com delphi 7 e interbase sever - WI-V6.5.0.28, e para fazer uma inclusão eu fiz um exemplo basico.
1 datamodulo com SQLConnection, SQLDataSet, DataSetProvider, ClientDataSet e um DataSource.
1 form com DBGrid, um button p/incluir(clientdataset.insert), um button para salvar(clientdataset.applyupdate(-1).

só que estava dando o seguinte erro ao tentar incluir um segundo registro ´Key Violation´. pergunto.
sou obrigado dar um refresh no clientdataset a cada inclusão?


Anonymous

Anonymous

Curtidas 0

Respostas

Robsonismael

Robsonismael

03/02/2003

Pessoal, alguem pode me responder?

é obrigatorio dar um refresh em cada inclusão???????????????????????


GOSTEI 0
Fern4ndø ßlek4ute

Fern4ndø ßlek4ute

03/02/2003

cara tá dando erro na chave primária !
verifique seu campo autoinclemento ... vc usa storeprocedure ou trigger para fazer a autonumeração??Ou manual??


GOSTEI 0
Anonymous

Anonymous

03/02/2003

EU USO UMA TRIGGER, COM GENERATOR, SENDO QUE SÓ FUNCIONOU DEPOIS QUE EU DEI UM REFRESH DEPOIS DO APPLYUPDATES(-1).
A MINHA PERGUNTA É SE É OBRIGADO DAR O REFRESH DEPOIS DE CADA INCLUSÃO.


GOSTEI 0
Luciano Pimenta®

Luciano Pimenta®

03/02/2003

Eu uso uma procedure, eu acho melhor, lá vai:
procedure Incrementa(Nome_Tabela: String; Chave_Primaria: TField);

procedure TDM.Incrementa(Nome_Tabela: String; Chave_Primaria: TField);
var Qry:TSQLQuery;
begin
//termina a execução cso não esteja em modo de inserção
if Chave_Primaria.DataSet.State <> dsInsert then exit;
Qry:=TSQLQuery.Create(nil); //cria uma instância do objeto
try
Qry.SQLConnection:=SQLConnection1; //componente de conexão
Qry.SQL.Add(´SELECT MAX(´+Chave_Primaria.FieldName+´)FROM ´+ Nome_Tabela);
Qry.Open;
if Qry.Fields[0].IsNull then //se atabela está vazia, retornará nulo
Chave_Primaria.AsInteger:=1 //então este será o 1º registro
else Chave_Primaria.AsInteger:=Qry.Fields[0].AsInteger+1;
finally
FreeAndNil(Qry); //libera o objeto da memória
end;
end;

Com trigger, tive vários problemas, com esse código, acabou-se os problemas.
Chama a procedure no evento BeforePost do ClientDataSet:
Incrementa(´NOMEDATABELA´,ClienteDataSetCODIGO);

T+

:)


GOSTEI 0
POSTAR