需要更详细的 MySQL ODBC 错误消息

问题描述 投票:0回答:1

我正在使用 MS Access 表单通过 ODBC 更新 MySQL 数据库。该表单具有三个可能导致外键约束违规的字段。当这样做时,我毫不奇怪地收到一条“[MySQL][ODBC 8.2(a) Driver]无法添加或更新子行:外键约束失败”错误消息。

但是错误消息并没有说明哪个列导致了违规!因此,我只能告诉我的用户,字段 1、字段 2 或字段 3 存在外键约束违规。不理想!

有没有办法让 ODBC 给我一条更详细的错误消息,告诉我哪一列导致了错误。 (使用 ADODB.Errors 或 DBEngine.Errors 集合没有帮助。)或者其他一些机制可以为我提供所需的具体信息?

谢谢。

mysql vba ms-access odbc
1个回答
0
投票

在这种情况下,我建议您在服务器启动之前测试/查找/处理错误。

换句话说,在您的表单中更新事件之前,每当记录要更新时都会触发?

此时进行测试,并就问题所在向用户提供一条友好的消息。我的意思是,用户不了解数据库技术和引用完整性等术语。

因此,在更新之前的事件中,检查该条件。

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    
        Dim strWhere        As String ' standard SQL where clause
        
        strWhere = "Hotel_id = " & 123 & " AND Tour_BusID = " & 34343
        
        If DCount("*", "dbo_Tours", strWhere) > 0 Then
        
            MsgBox "Can't update - duplicate tour bus and hotel", vbCritical, "Not allowed"
            
            Cancel = True
            
        End If
        
    
    End Sub

现在上面是“空中代码”,但简单地设置正确的查询条件,并检查是否违规,并给出友好的用户消息。

如果设置cancel = true,则不会发生表单关闭或记录导航。

我的意思是,您不太可能有那么多可以添加此类代码的表单。尝试捕获 ODBC 错误的代码不会比上面的更混乱,但上面的代码可以工作,并允许您在失去对用户界面的控制之前处理“错误”。

因此,编写一段漂亮的代码,在更新事件之前检查表单,从而给出一条漂亮的消息,并设置 cancel = true,因此 ODBC 服务器端错误永远不会有机会在第一名。

换句话说,作为开发人员,您希望将良好 UI 的概念与数据库系统执行其工作的概念分开。我想在某些情况下,尝试捕获错误可能会起作用,但通常为时已晚,并且损害已经造成。因此,控制这个问题 - 编写/添加一些代码来检查可能出现的错误,并向用户提供一条友好的消息,例如关于重复选择或其他内容的消息。

© www.soinside.com 2019 - 2024. All rights reserved.