DbExpress X Interbase
03/02/2003
2
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
Posts
04/02/2003
Robsonismael
é obrigatorio dar um refresh em cada inclusão???????????????????????
04/02/2003
Fern4ndø ßlek4ute
verifique seu campo autoinclemento ... vc usa storeprocedure ou trigger para fazer a autonumeração??Ou manual??
04/02/2003
Anonymous
A MINHA PERGUNTA É SE É OBRIGADO DAR O REFRESH DEPOIS DE CADA INCLUSÃO.
05/02/2003
Luciano Pimenta®
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+
:)
Clique aqui para fazer login e interagir na Comunidade :)