DbExpress X Interbase
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?
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
Curtidas 0
Respostas
Robsonismael
03/02/2003
Pessoal, alguem pode me responder?
é obrigatorio dar um refresh em cada inclusão???????????????????????
é obrigatorio dar um refresh em cada inclusão???????????????????????
GOSTEI 0
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??
verifique seu campo autoinclemento ... vc usa storeprocedure ou trigger para fazer a autonumeração??Ou manual??
GOSTEI 0
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.
A MINHA PERGUNTA É SE É OBRIGADO DAR O REFRESH DEPOIS DE CADA INCLUSÃO.
GOSTEI 0
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+
:)
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