我正在尝试从 mysql 数据库获取一些信息到 access 中的报告中。但我不知道如何获取那里的信息,因为我在 vba 中使用 DAO 连接并且无法使用链接表。
我尝试将信息从我已经拥有信息的表单中存储到一个字符串中,通过 DAO 连接直接连接到 mysql 数据库,但没有成功。
Private Sub Command67_Click()
DoCmd.Save
DoCmd.GoToRecord , , acNewRec
Me.Label39.Visible = True
Dim strWhere As String
strWhere = "[ID] = " & Me.[Id]
DoCmd.OpenReport "MyReport", acViewPreview, , strWhere
End Sub
我在该代码中使用预览来查看一些结果,但我想做的是直接打印到打印机,因为这是客户转收据,我需要那些快速打印。
我再次无法使用链接表。
最佳答案
在调查了您之前的问题(有些问题应该与该问题相关)后,我发现了问题所在。您没有链接 MySQL 表,这会让事情变得更容易。
但是您仍然可以使用查询!只需将您的连接字符串(可能是前面问题中的 Globales.ConnString)放入查询设计->属性中的查询ODBC 连接字符串
中即可。这使得查询成为直接传递到 MySQL 服务器的直通查询,而不是使用 MDAC。
只需将报告RecordSource
设置为查询的名称即可。
您还可以在 VBA 中构建查询,但不能使用临时 QueryDef(""),因为您无法设置 Reports-Recordset,因此请使用非临时查询。
示例(假设有一个名为 QueryForReport 的 QueryDef):
Sub EditQueryDefPassthrough()
With CurrentDb.QueryDefs("QueryForReport")
.Connect = "ODBC;Driver={MySQL ODBC 5.3 ANSI Driver};" _
& "Server=YourServerName;" _
& "Database=YourDatabaseName;" _
& "User=YourMysqlUserName;" _
& "Password=MysqlPwdForUser;" _
& "Option=3;" ' adapt this to your MySQL ODBC Driver Version and server settings
.SQL = "SELECT `Field` FROM `TABLE` LIMIT 1,1;" 'put SQL here (MySQL SQL Dialect, not MS-Access!). You can't use Access functions here (like Replace(), ..., but those of MySQL like Concat().
End With
End Sub
QueryDef 需要在 Report_Load 事件之前设置,但在 Report_Open 中应该足够了(例如,如果您想使用 OpenArgs 来构建 SQL 字符串)
关于mysql - 来自 MYSQL 数据库的 MS Access 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453035/