Erro tentando eliminar registro no SQL SERVER com DBExpress
Pessoal, estou desenvolvendo utilizando o BDS 2006 com DBExpress e driver para SQL SERVER (SQLDataSet + DataSetProvider + ClientDataSet). Ocorre que notei um certo problema a uns dias atrás.
Imaginem a seguinte situação:
Tabela de Clientes
Tabela de Pedidos
A tabela de clientes se relaciona com a tabela de pedidos de forma que não poderá haver pedido sem um cliente registrado, sendo assim não é possível eliminar o cliente se este possuir pedidos.
O usuário tenta eliminar um cliente que possua pedido(s) e gera uma mensagem do tipo ´Access violation ... in module ´dbxmss30.dll´´, o normal seria o delphi me mostrar e mensagem completa retornada pelo banco na qual constaria qual FK iria ser violada se determinado registro fosse excluído, assim eu poderei retornar uma mensagem personalizada para o usuário explicando o porque da não exclusão do registro, porem gera o access violation nestes casos. Caso a tentativa de exclusão seja num registro que não tenha lançamentos na outra tabela então exclui normalmente.
Desde já agradeço a atenção,
Imaginem a seguinte situação:
Tabela de Clientes
Tabela de Pedidos
A tabela de clientes se relaciona com a tabela de pedidos de forma que não poderá haver pedido sem um cliente registrado, sendo assim não é possível eliminar o cliente se este possuir pedidos.
O usuário tenta eliminar um cliente que possua pedido(s) e gera uma mensagem do tipo ´Access violation ... in module ´dbxmss30.dll´´, o normal seria o delphi me mostrar e mensagem completa retornada pelo banco na qual constaria qual FK iria ser violada se determinado registro fosse excluído, assim eu poderei retornar uma mensagem personalizada para o usuário explicando o porque da não exclusão do registro, porem gera o access violation nestes casos. Caso a tentativa de exclusão seja num registro que não tenha lançamentos na outra tabela então exclui normalmente.
Desde já agradeço a atenção,
Andreaskaquino
Curtidas 0
Respostas
Marco Salles
21/09/2006
O usuário tenta eliminar um cliente que possua pedido(s) e gera uma mensagem do tipo ´Access violation ... in module ´dbxmss30.dll´´,
voce que personalizar esta mensagem ?????
o normal seria o delphi me mostrar e mensagem completa retornada pelo banco na qual constaria qual FK iria ser violada se determinado registro fosse excluído, assim eu poderei retornar uma mensagem personalizada para o usuário explicando o porque da não exclusão do registro,
Use o ReconcileError do ClientDataset e trate o E.message para personalizar a mensagem
GOSTEI 0
Marco Salles
21/09/2006
O usuário tenta eliminar um cliente que possua pedido(s) e gera uma mensagem do tipo ´Access violation ... in module ´dbxmss30.dll´´,
voce que personalizar esta mensagem ?????
o normal seria o delphi me mostrar e mensagem completa retornada pelo banco na qual constaria qual FK iria ser violada se determinado registro fosse excluído, assim eu poderei retornar uma mensagem personalizada para o usuário explicando o porque da não exclusão do registro,
Use o ReconcileError do ClientDataset e trate o E.message para personalizar a mensagem
GOSTEI 0
Andreaskaquino
21/09/2006
Caro Marco, eu já estou usando uma função no evento OnReconcileError para personalizar as mensagens exibidas ao usuário no caso de eventuais erros como por exemplo o erro de violação da chave estrangeira informando ao mesmo o pq não é possível fazer uma exclusão de registro. Porem o programa não chega a passar na função, ao invez disso acaba gerando um ´Access Violation...´ na ´dbxmss30.dll´.
Grato,
Grato,
GOSTEI 0
Luis Lambranho
21/09/2006
Desculpem ressuscitar o tópico... mas alguém conhece uma solução para esse problema?
GOSTEI 0
Andreas Aquino
21/09/2006
Na ocasião só consegui resolver o problema controlando a violação de chave estrangeira antes da exclusão. Creio que tenha sito problema com o driver DBX para SQLSERVER. Controlando a violação de chaves antes de excluir não tive nenhum outro problema.
GOSTEI 0
Luis Lambranho
21/09/2006
Na ocasião só consegui resolver o problema controlando a violação de chave estrangeira antes da exclusão. Creio que tenha sito problema com o driver DBX para SQLSERVER. Controlando a violação de chaves antes de excluir não tive nenhum outro problema.
Obrigado pela atenção, ANDREAS.
Consegui resolver a pouco.
Eu tinha duas versões do firebird instalado na minha máquina e estava dando algum conflito. Foi só desinstalar a versão do FB que não estava usada e colocar a FBCLIENT correta que tudo funcionou belezinha.
GOSTEI 0