首页 > 解决方案 > 使用 1 个 MySQL 表进行访问,要求提供凭据

问题描述

我有一个使用本地 sql 服务器后端的访问数据库,用于除 1 个基于 Web 的 MySQL 表之外的所有表。MySQL表有50行左右,3个字段,一点都不大。我有一个 odbc 连接设置,并且该表与保存的密码链接。这张表每天最多更新30次...有时连接中断,会出现MySQL连接弹窗...点击test会成功,点击ok会让代码继续。它正在执行 1 行更新 (SET LastUpdatedDate = #" & now() & "# WHERE ItemID = 'xyz')。

我想捕获一个错误,或者如果它不可用,让它在没有连接的情况下继续......但似乎没有产生错误。发生这种情况时,我宁愿不更新表,然后必须物理选择 ok 以使其再次运行。此问题存在于美国各地的多台 PC 上的多个位置。我认为这是托管 MySQL 数据库的服务器有问题 - 我只是想知道如何忽略它们并继续使用其他代码......再次,没有产生错误(所以 On Error ......不会'不工作)。有任何想法吗?使用 Access 2016。

更新:我当前的设置是 ping 服务器...如果 ping 得到响应,我认为它已启动...然后我运行 'CurrentDb.Execute "UPDATE XYZ SET ABC = 'DEF' WHERE GHI = 'JKL '”。就这么简单。如果我尝试查询表 XYZ 并且它不可用,我会得到相同的连接弹出窗口。我应该如何刷新桌子?删除链接并重新创建?

新更新终于开始尝试下面 Andre 提出的无 DSN 直通查询。当我进入“执行”步骤时,我收到一条错误消息,提示我无法执行选择查询......但它是一个更新查询。这是SQL字符串....SQL = "UPDATE [Status] SET ItemDate = NOW() WHERE PlantID = '" & PlantID & "' AND ItemID = '" & ItemID & "'"

标签: mysqlvbams-access

解决方案


我建议不要在链接表上运行 Access 查询,而是使用动态创建的无 DSN传递查询

这应该始终有效,或者引发可捕获的错误。

Const ConnectString = "ODBC;DRIVER={MySQL ODBC 5.1 Driver};SERVER=your.server.com;PORT=3306;DATABASE=mydatabase;UID=myuserid;PWD=mypassword"

Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.CreateQueryDef("")
With qdf
    ' Setting .Connect turns it into a Pass-Through query
    .Connect = ConnectString
    ' Need to set this for non-SELECT queries
    .ReturnsRecords = False
    ' Note: you need to use MySql syntax here, not Access SQL, especially the correct date format
    .SQL = "UPDATE XYZ SET ABC = 'DEF' WHERE GHI = 'JKL'"
    ' or since MySql has a NOW() function too, just this:
    .SQL = "UPDATE foo SET LastUpdatedDate = NOW() WHERE ItemID = 'xyz'"
    .Execute
End With

您也可以尝试保存的 Pass-Through 查询,它也可以正常工作。然后你只需要提供 current .Sql,而不是连接字符串。


推荐阅读