使用 1 个 MySQL 表进行访问,要求提供凭据
Posted
技术标签:
【中文标题】使用 1 个 MySQL 表进行访问,要求提供凭据【英文标题】:Access with 1 MySQL Table asking for credentials 【发布时间】:2019-05-12 17:16:06 【问题描述】:我有一个使用本地 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 & "'"
【问题讨论】:
老实说,我会更改代码以在每次执行时刷新链接。这将强制它刷新,然后你不会看到错误。 发布您当前的代码。有几种方法可以解决此问题,但您需要向我们展示您目前所拥有的。 您是否尝试过 Pass-Through 查询? 【参考方案1】:我建议您不要在链接表上运行 Access 查询,而是使用动态创建的无 DSN Pass-Through 查询。
这应该始终有效,或者引发可捕获的错误。
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 查询,它也可以正常工作。那么你只需要提供当前的.Sql
,而不是连接字符串。
【讨论】:
抱歉耽搁了——终于有时间试试这个了。当我进入“执行”步骤时,我收到一条错误消息,提示我无法执行选择查询......但它是一个更新查询。.SQL = "UPDATE [Status] SET ItemDate = NOW() WHERE PlantID = '" & PlantID & "' AND ItemID = '" & ItemID & "'"
需要添加一行,见编辑。 docs.microsoft.com/en-us/office/client-developer/access/…
太棒了!那是我需要的线。我现在已经为这个操作添加了一个错误处理程序,并且应该能够捕获任何弹出的错误。我真的很感激!【参考方案2】:
如果您使用选项 dbFailOnError 执行 SQL 命令,也许您会得到一个有用的错误?像 CurrentDB.Execute("Your SQL", dbFailOnError)
【讨论】:
我还没有尝试过...我会添加它并看看会发生什么...无法预测何时会发生中断,因此可能需要一段时间才能判断它是否有效。 不 - 没有任何帮助 - 将它添加到两台不同的电脑上,并且都锁定在连接字符串上。还有其他想法吗? 您是否查看了 MySql 连接的连接器/ODBC 设置?有一个选项“启用自动重新连接” - 此处显示dev.mysql.com/doc/connector-odbc/en/… 一夜之间试了试(也选择了“重新连接时不提示”,但(或组合)都不起作用。谢谢! 正确 - 启用自动重新连接后仍然弹出连接。【参考方案3】:在尝试UPDATE
之前,先做一个简单的SELECT
。如果它没有返回合理的结果,则假定连接已断开。
【讨论】:
以上是关于使用 1 个 MySQL 表进行访问,要求提供凭据的主要内容,如果未能解决你的问题,请参考以下文章