使用1个MySQL表进行访问以要求提供凭据

时间:2019-05-12 17:16:07

标签: mysql vba ms-access access-vba ms-access-2016

除了一个基于Web的MySQL表之外,我所有表都具有使用本地sql服务器后端的访问数据库。 MySQL表有大约50行,3个字段,一点也不大。我有一个odbc连接设置,该表与保存的密码链接。该表每天最多更新30次...有时连接断开,并且将显示MySQL连接弹出窗口...单击test将导致成功,单击ok将允许代码继续。它正在执行1行更新(SET LastUpdatedDate =#”&now()&“#WHERE ItemID ='xyz')。

我想捕获一个错误,或者如果它不可用,请让它继续而不连接。。。但是似乎没有错误生成。发生这种情况时,我宁愿不更新表,而必须实际选择确定以使其再次运行。在美国各地的多台PC上,存在多个位置的此问题。我假设这是MySQL数据库托管的服务器,但出现了问题-我只想知道如何忽略它们并继续使用其他代码...再次,没有错误生成(因此出现错误...不会工作)。有任何想法吗?使用Access 2016。

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

3 个答案:

答案 0 :(得分:4)

我建议您不要在链接表上运行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
    ' 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

您还可以尝试保存的直通查询,它也可能会起作用。然后,您只需要提供当前的.Sql,而不是连接字符串即可。

答案 1 :(得分:1)

如果使用选项dbFailOnError执行SQL命令,也许会得到有用的错误?像CurrentDB.Execute(“ Your SQL”,dbFailOnError)

答案 2 :(得分:1)

在尝试UPDATE之前,请做一个简单的SELECT。如果未返回合理的结果,则假定连接已断开。