【问题标题】:How do I suppress the ODBC dialog box on a DSN-Less connection?如何抑制 DSN-Less 连接上的 ODBC 对话框?
【发布时间】:2011-08-12 12:08:15
【问题描述】:

我正在尝试通过 Microsoft Access 的 DSNless ODBC 连接访问 MySQL 表。我没有问题实际上连接是一个有效的用户名和密码。但是,如果其中任何一个都无效,则会出现 ODBC 对话框屏幕,询问连接详细信息。有什么方法可以阻止 ODBC 对话框屏幕出现并让连接出错?

我的 ODBC 连接字符串是

"ODBC;Driver=MySQL ODBC 3.51 驱动程序;SERVER=XXXX;DATABASE=XXXX;UID=XXXX;PWD=XXXX;Option=3"

【问题讨论】:

    标签: ms-access connection odbc


    【解决方案1】:

    这个 FLAG_NO_PROMPT 想法确实有效。在连接字符串中,您通常有类似 "ODBC;DRIVER=.......; OPTION=3"

    FLAG_NO_PROMPT 加 16,即使用 OPTION=19,会抑制系统提示。

    【讨论】:

      【解决方案2】:

      看看-19.1.4.2. Connector/ODBC Connection Parameters

      具体来说,“options”参数及其标志“FLAG_NO_PROMPT”...

      【讨论】:

      • 我尝试设置 OPTION=FLAG_NO_PROMPT 但没有任何区别。在检查 MySQL 网站时,我发现它们是一个已知错误,表明此参数不起作用。然而,经过进一步调查,我发现 FLAG_NO_PROMPT = 16。因此我尝试了 OPTION=16 并且它起作用了。 非常感谢您的帮助
      【解决方案3】:

      您可以使用“DoCmd.SetWarnings False”来停止它。

      另一种选择是在程序开始时尝试“On Error Resume Next”。您可以检查“ODBC 调用失败”错误的代码(我认为 err.number = 3151)。在你尝试连接到 ODBC 后,只需输入一个 if,如果它失败,则将其发送到出口。

      On Error Resume Next
      Dim db As DAO.Database 'Will also work with ADO
      Dim ODBCstr As String
      
      Set db = 'Connect with ODBC here
      
      If Err.Number = 3151 Then 'Could also try If Err.Number <> 0 Then
         GoTo Exit_ThisCode
      End If
      

      这可能有效,只要在连接失败时实际抛出错误即可。如果您选择检查特定的错误代码,请确保您知道正确的错误代码。

      【讨论】:

      • Public Function MySQLLinkSingle(stTableName As String) On Error GoTo SingleLinkTable_Err Dim td As TableDef Dim stConnect As String '如果表已经链接,则首先取消链接对于 CurrentDb.TableDefs 中的每个 td If td.Name = stTableName Then CurrentDb.TableDefs.Delete stTableName End If Next '连接外部数据源
      • stConnect = "ODBC;Driver=" & cODBCdriver & ";SERVER=" & pServer & ";DATABASE=" & cDatabase & ";UID=" & pUsername & ";PWD=" & pPassword & ";Option=3" '链接到指定表 Set td = CurrentDb.CreateTableDef(stTableName, dbAttachSavePWD, stTableName, stConnect) CurrentDb.TableDefs.Append td '成功返回true MySQLLinkSingle = True Exit Function SingleLinkTable_Err: '失败返回false并显示错误消息 MySQLLinkSingle = False End Function
      • 问题是如果其中一个参数无效,是对产生 ODBC 对话框连接框的 ODBC 驱动程序的调用。这是在它返回任何错误的代码之前。
      • 好吧,我过去解决类似问题的方法只是在我们的管理员为我的应用程序设置的身份验证信息中进行硬编码。我使用了表格驱动的安全性,只有具有适当访问级别的人才能真正访问需要特定连接的屏幕。
      • 我认为这些建议中的任何一个都不会真正奏效,但无论如何我都会反对它们。依赖其中任何一个(DoCmd.SetWarnings FalseOn Error Resume Next)来绕过真正的错误消息只是一种糟糕的编码习惯。
      【解决方案4】:

      我不知道它是否会对您有所帮助,但用于停止显示对话框的 ODBC API SQLDriverConnect 的实际参数是 SQL_DRIVER_NOPROMPT。但是,应该警告您,并非所有驱动程序都完全遵循规范。我不知道您如何让 MS Access 使用 SQL_DRIVER_NOPROMPT 调用 SQLDriverConnect - 抱歉。

      【讨论】:

      • 谢谢,我会调查的。
      【解决方案5】:

      如果有人使用 DSN 路由,则在详细信息下有一个复选框可以设置相同的选项: "连接时不提示"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多