Fórum Erro tentando eliminar registro no SQL SERVER com DBExpress #329835

21/09/2006

0

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,


Andreaskaquino

Andreaskaquino

Responder

Posts

21/09/2006

Marco Salles

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


Responder

Gostei + 0

21/09/2006

Marco Salles

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


Responder

Gostei + 0

22/09/2006

Andreaskaquino

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,


Responder

Gostei + 0

19/01/2014

Luis Lambranho

Desculpem ressuscitar o tópico... mas alguém conhece uma solução para esse problema?
Responder

Gostei + 0

19/01/2014

Andreas Aquino

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.
Responder

Gostei + 0

19/01/2014

Luis Lambranho

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.


Responder

Gostei + 0

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

Aceitar