Erro em Transaçoes
[b:3a2f565a04]Tenho dois formulários que aparentemente sao identicos .. Neles eu uso uma mesma estrutura de Transaçoes..[/b:3a2f565a04]
a estrututura e essa
:arrow: so que nesta linha de comando
:cry: :cry: :cry: :cry:
[b:3a2f565a04][color=red:3a2f565a04]eu obtenho um erro , que segue abaixo:[/color:3a2f565a04][/b:3a2f565a04]
[URL=http://imageshack.us][img:3a2f565a04]http://img187.imageshack.us/img187/1238/imagemtabelaparadoxerro6wz.jpg[/img:3a2f565a04][/URL]
Agora tres coisas a acrescentar:
:?: :?: :?: :?: :?:
:arrow: eu não sei[b:3a2f565a04] se a causa do relacionamento [/b:3a2f565a04]pode ser responsavel por este erro...
:arrow: No fundo estou sem saber o porque e a principio não gostaria de mexer na estrutura do formulário e sim tentar entender o conceito envolvido e o porque do erro...
Muito obrigado... :P :P :P
a estrututura e essa
procedure TFormAtualizarFatorContribuicaoInss.FormShow(Sender: TObject); begin //bla bla bla ... modulo.Dbcad.StartTransaction; //aqui eu inicio uma transação end;
:arrow: so que nesta linha de comando
procedure CarregarNovosValoresParaTabelaEncargos; var i:integer; texto:String; begin Modulo.TbEncFun.close; Modulo.TbEncFun.EmptyTable; //*********Nesta linha de comando Modulo.tbencfun.open; bla bla bla... end; end;
:cry: :cry: :cry: :cry:
[b:3a2f565a04][color=red:3a2f565a04]eu obtenho um erro , que segue abaixo:[/color:3a2f565a04][/b:3a2f565a04]
[URL=http://imageshack.us][img:3a2f565a04]http://img187.imageshack.us/img187/1238/imagemtabelaparadoxerro6wz.jpg[/img:3a2f565a04][/URL]
Agora tres coisas a acrescentar:
1) se eu tirar a inicialização da transação do show do form e colocar apos a linha que esta dando erro , o programa funfa normalmente.
2)o problema é que eu tenho um outro formulário identico , com esta mesma estrutura e logiga e não da este erro nenhum
3)a unica diferença entre esses dois formulários , é que no formulário que esta dando problema a tabela é detalhe , e no outro formulário a tabela não tem nenhum relacionamento
:?: :?: :?: :?: :?:
:arrow: eu não sei[b:3a2f565a04] se a causa do relacionamento [/b:3a2f565a04]pode ser responsavel por este erro...
:arrow: No fundo estou sem saber o porque e a principio não gostaria de mexer na estrutura do formulário e sim tentar entender o conceito envolvido e o porque do erro...
Muito obrigado... :P :P :P
Marco Salles
Curtidas 0
Respostas
Thomaz_prg
01/12/2005
Tenta encerrar a transação antes da linha que tá dando erro.
GOSTEI 0
Marco Salles
01/12/2005
Tenta encerrar a transação antes da linha que tá dando erro.
mas a questão esta ai ... Eu preciso da transação antes desta linha
Porque o que eu faço na verdade é apagar todos os dados desta tabela e inserir novos dados. Eu preciso do inicio da transação antes da linha.. Porque se algo der errado eu consigo recuperar os dados iniciais.
Tres coisas no meu ponto de vista são importantes como eu disse anteriormente
1) se eu tirar a inicialização da transação do show do form e colocar apos a linha que esta dando erro , o programa funfa normalmente.
2)o problema é que eu tenho um outro formulário identico , com esta mesma estrutura e logiga e não da este erro nenhum
3)a unica diferença entre esses dois formulários , é que no formulário que esta dando problema a tabela é detalhe , e no outro formulário a tabela não tem nenhum relacionamento
GOSTEI 0
Marco Salles
01/12/2005
Olha so , depois desta ultima conversa com o amigo thomaz_prg , resolvi fazer um teste simples , com tres botoes e um novo formulario
Este formulario , não faz nada , alem de abrir uma transação e excluir uns registros e depois cancelar estas alteraçoes
Neste formulario tem tres botoes e um codigo bem simplificado
no evento onshow abro as duas tabela s e inicio uma transação
Limpo a tabela EncargosFuncionarios
procedure TForm2.Button1Click(Sender: TObject);
begin
Modulo.TbEncFun.close;
Modulo.TbEncFun.EmptyTable;
Modulo.tbencfun.open;
end;
Limpo a tabela Auxilio Familia******
Cancelo a transação
encerro o formulario
Qual a diferença entre clicar o button2 e o button3.. Aparentemente nenhuma diferença
So que no botão 2 temos um erro... Verifiquei mais a fundo e percebi uma diferença nas definiçoes dos dois componentes table
[b:e47599dd81]o componente table1 que aponta para tabela encargos tem na sua definição de DabaseName no objecto inspector um objeto DataBase que aponta para o Aliase
o componente table2 que aponta para tabela SalarioFamilia tem na sua definição de DabaseName no objecto inspector o proprio Aliase [/b:e47599dd81]
Alterei então a definição do DataBase do Table2 -->>> Isto é , apontei tb para o componenente DataBase
Feito isto pude verificar o mesmo tipo de erro
[b:e47599dd81]Conclui então que o método EmptyTable não pode ser aplicado quando a propriedade DataBaseName estiver apontando para um componente DataBase.. A Razão disso eu não sei , talves os mais teoricos possam explicar explicar ou tentar explicar esta conclusão..[/b:e47599dd81]
Este formulario , não faz nada , alem de abrir uma transação e excluir uns registros e depois cancelar estas alteraçoes
Neste formulario tem tres botoes e um codigo bem simplificado
uses UModulo, UForMenu; {$R *.DFM}
no evento onshow abro as duas tabela s e inicio uma transação
procedure TForm2.FormShow(Sender: TObject); begin Modulo.TbEncFun.open; modulo.tbauxfam.open; modulo.Dbcad.StartTransaction; end;
Limpo a tabela EncargosFuncionarios
procedure TForm2.Button1Click(Sender: TObject);
begin
Modulo.TbEncFun.close;
Modulo.TbEncFun.EmptyTable;
Modulo.tbencfun.open;
end;
Limpo a tabela Auxilio Familia******
procedure TForm2.Button3Click(Sender: TObject); begin Modulo.TbAuxFam.close; Modulo.TbAuxFam.EmptyTable; Modulo.tbAuxFam.open; end;
Cancelo a transação
procedure TForm2.Button2Click(Sender: TObject); begin modulo.Dbcad.Rollback; end;
encerro o formulario
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin modulo.tbencfun.Close; modulo.tbauxfam.close; end;
Qual a diferença entre clicar o button2 e o button3.. Aparentemente nenhuma diferença
So que no botão 2 temos um erro... Verifiquei mais a fundo e percebi uma diferença nas definiçoes dos dois componentes table
[b:e47599dd81]o componente table1 que aponta para tabela encargos tem na sua definição de DabaseName no objecto inspector um objeto DataBase que aponta para o Aliase
o componente table2 que aponta para tabela SalarioFamilia tem na sua definição de DabaseName no objecto inspector o proprio Aliase [/b:e47599dd81]
Alterei então a definição do DataBase do Table2 -->>> Isto é , apontei tb para o componenente DataBase
Feito isto pude verificar o mesmo tipo de erro
[b:e47599dd81]Conclui então que o método EmptyTable não pode ser aplicado quando a propriedade DataBaseName estiver apontando para um componente DataBase.. A Razão disso eu não sei , talves os mais teoricos possam explicar explicar ou tentar explicar esta conclusão..[/b:e47599dd81]
GOSTEI 0