Fórum Perda de dados interbase...ajudem #218500

05/03/2004

0

Olá Companheiros,

Tenho o seguinte problema...digo esta me tirando o sono...

Tenho um BD em Interbase e rodando em uma rede NT com varios clientes Win98 e win2000 o sistema apresentando algumas perdas de dados...tipo assim : faço a digitação de algumas turmas e entre 10 uma simplesmente desaparece...estou ficando puto com isso.

Estou usando TIBDatabase -> TIBTransaction -> TIBQuery para fazer os procedimentos e sim trabalho com Store Procedure no BD para os Inserts, Deletes e Updates.

No TIBTransaction esta setado para : read_commited , rec_version e nowait.

Eis uma chamda que estou usando :

procedure TF_Turmas.Chama_SP;
Begin
Try
If Not DM1.IBT1.InTransaction Then
DM1.IBT1.StartTransaction;
With DM1.SP1 Do
Begin
Close;
StoredProcName := ´SP_IAD_TURMA´; //Mudar o Nome da SP
ParamByName(´OPERACAO´).AsInteger := StrToInt(frOperacao.Caption);
ParamByName(´ID_ACAO´).AsString := Edit1.Text;
ParamByName(´ID_CONTRATO´).AsString := EditCodigoContrato.Text;
ParamByName(´CLIENTELA´).AsString := DelphiAllTrim(EditClientela.Text);
ParamByName(´ATIVIDADE´).AsString := DelphiAllTrim(EditAtividade.Text);
ParamByName(´OCUPACAO´).AsString := DelphiAllTrim(EditOcupacao.Text);
ParamByName(´DATA_INICIO´).AsDate := Strtodate(EditDataInicio.Text);
ParamByName(´DATA_FINAL´).Asdate := Strtodate(EditDataTermino.Text);
ParamByName(´LOCAL´).AsString := DelphiAllTrim(EditLocal.Text);
ParamByName(´ENTIDADE´).AsString := DelphiAllTrim(EditEntidade.Text);
ParamByName(´PERIODO´).AsString := DelphiAllTrim(EditPeriodoInicial.Text);
ParamByName(´ACAO´).AsString := DelphiAllTrim(EditAcao.Text);
ParamByName(´TREINANDO´).AsInteger := StrToInt(EditTreinandos.Text);
ParamByName(´CARGAHORARIA´).AsInteger:= StrToInt(EditCargaHoraria.Text);
ParamByName(´MUNICIPIO´).AsString := DelphiAllTrim(EditMunicipio.Text);
ParamByName(´PERIODO1´).AsString := DelphiAllTrim(EditPeriodoFinal.Text);
ExecProc;
End;
DM1.IBT1.CommitRetaining;
except
on E:Exception do
begin
DM1.IBT1.RollbackRetaining;
MessageDlg(´Tabela em uso exclusivo no momento...tente novamente´,Mterror,[MbOk],0);
end;
end;
End;

Vcs verão que estou realizando o CommitRetaining para confirmar a gravação.

Então o que esta de errado.....

[]´s

Fábio Cavalcanti


Cavalcanti.fabio

Cavalcanti.fabio

Responder

Posts

05/03/2004

Wtjunior

Olá Fábio.

Aparentemente está tudo certo...
Vc sabe se o registro que não está ´desaparecendo´ é sempre o mesmo, por exemplo==> vc cadastra 10 e sempre o 7o. desaparece

verifique isso e tenho certeza que aqui no fórum vamos juntos resolver..

um abraço
Wilson


Responder

Gostei + 0

05/03/2004

Wtjunior

Oi Fábio,

Sou eu de novo...
Faz algum tempo que não mexo com o Delphi (aliás preciso voltar, estou com saudades, atualmente estou trabalhando com Centura) e se não me engano existe um componente para ser usado com Storage Procedure... verifique isso

abraço
Wilson


Responder

Gostei + 0

05/03/2004

Weber

As informações estão ´sumindo´?
Quer dizer que ontem estava no banco e hoje não está mais?

Verifique isso, pois talvez não esteja nem inserindo no banco e eu não sei como a storeprocere vai se comportar quando der um erro de insert.


Responder

Gostei + 0

05/03/2004

Cavalcanti.fabio

valeu camaradas...quanto aos dados estarem no dia e no outro não acontece...deixa eu explicar melhor :

O sistemas e um controle de turmas de cursos onde tenho uma tela principal com os dados do curso e da entidade que realiza e em outro tela tenho os dados dos treinandos para esta turma...até ai tudo bem...abrao uma nova turma e digitado os dados da mesma e então começo a digitar os dados dos treinandos na outra tela e ao fechar a tela de treinandos retorno a tela da turma e em uma grid verifico que os treinandos digitados estão lá ((((todos)))) e então imprimi uma etiqueta com as informaçõe de nro de turma , contratos e total de treinandos...até aqui tudo bem...só que tenho que fechar a tela de turmas e ir ao menu de relatorios e puxar os relatorio com os dados da turma e treinandos para anexar a basta.

Ao pedir o codigo da turma para impressão .... CADEEEEEEE os treinandos que entes eu imprimi a etiqueta apos a digitação....SOCORROOOO...o pessoal fica me perguntando o que houve e eu fico tentando entender o motivo...

será que dar para entender...

[]´s

fabio cavalcanti


Responder

Gostei + 0

05/03/2004

Weber

Sei lá cara, sua rotina parace estar correta.

Tenta fazer um texte fazendo o Insert na mão, usando uma query e deixando a storeprocedure de lado.


Responder

Gostei + 0

05/03/2004

Catunda

Caro Fábio, acho que vc tem um problema de congestionamento de informações. Você esta utilizando o CommitRetaiming, que força a gravação fisica do registro mas não fecha a transação, mantendo o mesmo nivel de transação desde o momento em que abriu o dataset.
Assim a quantidade de informação armazenada em memoria pode ser enorme e causar esses efeitos indesejaveis.
Um outro problema, tambem, pode ser essa utilização de stored procedures na manutenção dos dados, pois se sua aplicação roda em rede e uma stored procedure ou trigger deleta um registro que seja corrente em outro usuario, vc pode corromper todo o banco de dados, simplismente inutilizar totalmente o banco de dados.
Todavia faça o teste de inclusão de varias turmas mas fazendo uma de cada vez, faz uma sai da tela, imprime tudo que precisa dela e depois parte pra outra e veja se some alguma.

Espero ter ajudado.


Responder

Gostei + 0

05/03/2004

Buosinet

Como está seu controle da chave primária da tabela? É preciso cuidado pra não remontar informação.

Em vez das procedures pra atualizar o banco, por que você não usa o TUpdateSQL, que já faz isso automaticamente?

Boa sorte
Buosi.


Responder

Gostei + 0

09/03/2004

Cavalcanti.fabio

Será que tem a ver com a versão do interbase hoje estou utilizando o 6.0.1.6
Algum tem uma outra forma de se trabalha com o interbase e o delphi para tratamento de insert,delete e update.

Valeu,

[]´s

Fábio Cavalcanti


Responder

Gostei + 0

09/03/2004

Gandalf.nho

Eu só uso o IBDataSet para manter meus registros, sem problemas e uso um IBQuery pras consultas.


Responder

Gostei + 0

09/03/2004

Khundalini

Meu, vc está usando CommitRetaining pq? Esse é o problema. Vc efetiva a transação, mas ela ainda fica aberta. Por isso que os registros estão se perdendo. Reveja o nível de isolamento de transação que vc está usando.

[]s
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

11/03/2004

Cavalcanti.fabio

Olá companheiros...

Vcs poderiam me enviar exemplos de como vc procedem ( procedimentos ) para fazer as transações...quais componentes e a forma de trabalha...

valeu.

[]´s

t+

fabio cavalcanti


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar