Firebird Dbexpress registros duplicados
:?: Olá a todos..
Uso Firebird 1.5, Dbexpress (SqlDataSet + DataSetProvider + ClientDataSet + DataSource) e Delphi 7.
Estou com problema de duplicação de registros (repete o código)
Uso uma tabela chamada sequencias onde nela guardo os últimos códigos das tabelas do sistema.
Nas inclusões, ao mandar gravar o registro busco na tabela o código do novo registro e já atualizo a tabela sequencias com o próximo código.
Rodei o sistema em meu computador.
Abri três cópias e fui incluindo registros usando todas as cópias abertas, e observo que quando incluo um novo registro usando uma cópia, depois incluo outro registro usando outra cópia, a tabela sequencias que a outra cópia encherga não está com o registro atualizado. Ai quando gravo o registro usando a outra cópia do sistema (em execução) acontece a duplicação de registros.
Quero dizer que se executo tres cópias do sistema ao mesmo tempo, e incluo um novo registro usando cada uma das cópias, fico com tres registros com o mesmo código.
Abaixo a rotina onde gerencio a gravação do próximo código da tabela.
A rotina abaixo foi usada baseada num exemplo aqui no próprio forum a dica foi do Vinicius2K.
=========
procedure ObterNovoCodigo(NomeCampo : String ; Conteudo : String ; Tam : Integer; M_Tipo:String);
var
M_Campo : String;
V_Campo : Integer;
TrV: Ttransactiondesc;
begin
Try
With DtmSys.CliDtStSequencias do
begin
V_Campo := StrToInt( Conteudo ) + 1;
M_Campo := ´00000´ + IntToStr(V_campo);
M_Campo := copy(M_Campo,(length(M_Campo)-Tam)+1,Tam);
edit;
FieldByName(NomeCampo).AsString := M_Campo;
// --- define a transacao chamada TrV
TrV.TransactionID := 1;
TrV.IsolationLevel := xilReadCommitted;
V_SqlCnctnSys.StartTransaction(TrV);
DtmSys.CliDtStSequencias.ApplyUpdates(0);
DtmSys.SQLCnctnSys.Commit(TrV);
end;
except
V_SqlCnctnSys.Rollback(TrV);
end;
end;
Muito obrigado a todos
Abraços
Neto
Uso Firebird 1.5, Dbexpress (SqlDataSet + DataSetProvider + ClientDataSet + DataSource) e Delphi 7.
Estou com problema de duplicação de registros (repete o código)
Uso uma tabela chamada sequencias onde nela guardo os últimos códigos das tabelas do sistema.
Nas inclusões, ao mandar gravar o registro busco na tabela o código do novo registro e já atualizo a tabela sequencias com o próximo código.
Rodei o sistema em meu computador.
Abri três cópias e fui incluindo registros usando todas as cópias abertas, e observo que quando incluo um novo registro usando uma cópia, depois incluo outro registro usando outra cópia, a tabela sequencias que a outra cópia encherga não está com o registro atualizado. Ai quando gravo o registro usando a outra cópia do sistema (em execução) acontece a duplicação de registros.
Quero dizer que se executo tres cópias do sistema ao mesmo tempo, e incluo um novo registro usando cada uma das cópias, fico com tres registros com o mesmo código.
Abaixo a rotina onde gerencio a gravação do próximo código da tabela.
A rotina abaixo foi usada baseada num exemplo aqui no próprio forum a dica foi do Vinicius2K.
=========
procedure ObterNovoCodigo(NomeCampo : String ; Conteudo : String ; Tam : Integer; M_Tipo:String);
var
M_Campo : String;
V_Campo : Integer;
TrV: Ttransactiondesc;
begin
Try
With DtmSys.CliDtStSequencias do
begin
V_Campo := StrToInt( Conteudo ) + 1;
M_Campo := ´00000´ + IntToStr(V_campo);
M_Campo := copy(M_Campo,(length(M_Campo)-Tam)+1,Tam);
edit;
FieldByName(NomeCampo).AsString := M_Campo;
// --- define a transacao chamada TrV
TrV.TransactionID := 1;
TrV.IsolationLevel := xilReadCommitted;
V_SqlCnctnSys.StartTransaction(TrV);
DtmSys.CliDtStSequencias.ApplyUpdates(0);
DtmSys.SQLCnctnSys.Commit(TrV);
end;
except
V_SqlCnctnSys.Rollback(TrV);
end;
end;
Muito obrigado a todos
Abraços
Neto
Neto
Curtidas 0
Respostas
Neto
04/04/2007
Eu estava mantendo a tabela aberta todo o tempo.
Bastou eu fechar e abrir quando precisava saber o próximo código.
CDS.Close;
CDS.Open;
Resolvida a questão
Abraços a todos
Bastou eu fechar e abrir quando precisava saber o próximo código.
CDS.Close;
CDS.Open;
Resolvida a questão
Abraços a todos
GOSTEI 0