Black november Você e seu amigo por apenas 49,90 por mês! Saiba mais

DbExpress X Interbase

03/02/2003

2

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?


Responder

Posts

04/02/2003

Robsonismael

Pessoal, alguem pode me responder?

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


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


Responder

04/02/2003

Anonymous

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.


Responder
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+

:)


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar