Falha catastrófica

Delphi

12/05/2005

Pessoal,

Estou utilizando Delphi7, DBExpress, Firebird 1.5, COM+.
No meu servidor de aplicativos está tudo configurado belezinha (SQLDataSet para Produtos, outro para ProdutoMarca - relação n x n de Produto com Marca). Criei um nested table.
O problema é quando eu vou dar o ApplyUpdates no meu ClientDataSetMaster, dá um erro ´Falha Catastrófica´ - o nome chega até a assustar :) . Debuguei, MAS... NADA. Já fiz todos os tipos de teste possíveis e então resolvi recorrer à ajuda de vocês... Alguém se candidata?
Só a efeito de informação, no meu ClientDataSetProdutoMarca eu tenho dois campos calculados, já verifiquei os valores e estão OK!
E o mais estranho de tudo é que este erro aparece na primeira vez que eu insiro um registro Marca no Grid de Marcas e dou o Apply. Aí da o erro, eu apenas edito, dou um post e dou outro Apply e... tchanran! Funciona! Estou enrolado... :cry:


Michaell

Michaell

Curtidas 0

Respostas

Kotho

Kotho

12/05/2005

:lol: O pior desse erro é quando acontece no cliente...

É o seguinte... essa mensagem acontece quando o erro está acontecendo no lado servidor, e ele não consegue identificar para passar para o client...

Uma vez aconteceu esse erro comigo, e o erro estava dando no banco de dados (no caso oracle), pois eu estava usando um sub-select que retornava mais de uma linha...

:?: Por acaso, você debugou o servidor???


GOSTEI 0
Michaell

Michaell

12/05/2005

Não debuguei, Kotho... Pra te falar falar a verdade eu não sei como debugar um Servidor COM :oops: ... Seria possível me dar umas dicas?! Provavelmente o erro está nele mesmo, porque é disparado quando eu dou o ApplyUpdates no ClientDataSet...


GOSTEI 0
Michaell

Michaell

12/05/2005

Acabei de colocar um ´ShowMessage(´BeforeUpdateRecord´);´ no evento OnBeforeUpdateRecord do Provider, mas não funcionou... Já estou começando a achar que o erro está no cliente mesmo... Não tem lógica...


GOSTEI 0
Michaell

Michaell

12/05/2005

up!


GOSTEI 0
Kotho

Kotho

12/05/2005

Blz... Vamos lá...

1) Abra o programa servidor

2) no Delphi, em Run->Parameters->Host Application -> coloque c:\Windows\System32\dllhost.exe (que é o programa que roda nossa dll).

3) salve e compile o programa (esse procedimento, eu não sei porque, deve ser repetido, mesmo que não tenha feito nenhuma alteração no programa... senão quando formos rodar o programa ele irá dizer que o programa foi alterado durante a debugação, e pergutará se desejamos reiniciar ou continuar... se continuamos, não funciona)

4) rode o programa cliente, até o ponto que ele faz a conexão com o servidor.

5) no Delphi, em Run->Attach to Process -> selecione o dllhost.exe (ou dllhst3g.dll, dependendo de algumas configurações)...

Neste ponto irá aparecer uma tela com caption CPU, e várias instruções em Assembler (se não me engano é Assembler)... é só clicar em F9, e pronto... continue a execução no cliente... se quizer marcar pontos de parada, esse é o momento...


GOSTEI 0
Kotho

Kotho

12/05/2005

Blz... Vamos lá...

1) Abra o programa servidor

2) no Delphi, em Run->Parameters->Host Application -> coloque c:\Windows\System32\dllhost.exe (que é o programa que roda nossa dll).

3) salve e compile o programa (esse procedimento, eu não sei porque, deve ser repetido, mesmo que não tenha feito nenhuma alteração no programa... senão quando formos rodar o programa ele irá dizer que o programa foi alterado durante a debugação, e pergutará se desejamos reconstruir (recompilar)... se continuamos, não funciona, se recompilamos também não)

4) rode o programa cliente, até o ponto que ele faz a conexão com o servidor.

5) no Delphi, em Run->Attach to Process -> selecione o dllhost.exe (ou dllhst3g.dll, dependendo de algumas configurações)...

Neste ponto irá aparecer uma tela com caption CPU, e várias instruções em Assembler (se não me engano é Assembler)... é só clicar em F9, e pronto... continue a execução no cliente... se quizer marcar pontos de parada, esse é o momento...


GOSTEI 0
POSTAR