如何从同一数据库的 VBA 代码中的 MS ACCESS 中提取字段
Posted
技术标签:
【中文标题】如何从同一数据库的 VBA 代码中的 MS ACCESS 中提取字段【英文标题】:How to pull a field from MS ACCESS in the VBA Code in the same DB 【发布时间】:2013-02-12 08:38:04 【问题描述】:我在 MS ACCESS 中有一个数据库,其中我有一个包含一些计数的 ECount 字段 有什么办法可以在 VBA 代码中调用该调用,我正在生成一封新邮件,该邮件应该在邮件中提取计数。
Private Sub Command_Click()
Dim objOutlook As Outlook.Application
Dim objEmail As Outlook.MailItem
Dim ThisDay As Date
ThisDay = Format(Now, "mm/dd/yy")
Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)
With objEmail
.To = ""
.CC = ""
.Subject = "Daily Email Processed " *(Thisday)
.Body = "Hi," + vbNewLine + vbNewLine + vbNewLine + "Please find below the number of Emails processed for the " + vbNewLine + vbNewLine + "Email Count = " (**ECOUNT**) + vbNewLine + "O Count = " (**OCount**)
.Attachments.Add ""
.Attachments.Add ""
.Display
'.ReadReceiptRequested
End With
【问题讨论】:
ECount 字段在哪里?在表/查询中? 很抱歉它在查询中... 【参考方案1】:Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim sCount As String
Set db = CurrentDb()
Set rs1 = db.OpenRecordset("SELECT TOP 1 ECounter FROM [Email Query]")
If rs1.RecordCount > 0 Then
rs1.MoveFirst
sCount = rs1.Fields("ECount")
End If
rs1.Close
set rs1 = Nothing
set db = Nothing
sCount
将保存该值
【讨论】:
出现错误,例如 Set rs1 = db.OpenRecordset("SELECT TOP 1 ECount FROM YourQuery") @ Andrey Gordeev 的参数太少 @user1897472 好了,把ECount
换成你想得到的字段名
我第一次这样做了,查询名称也是如此,得到了错误 Set rs1 = db.OpenRecordset("SELECT TOP 1 ECounter FROM Email Query") is what I Have
@user1897472 Email Query
是您的查询名称吗?
@user1897472 你有一个很好的例子,为什么你不应该在字段/表/查询/报告名称中使用空格。试试这个:Set rs1 = db.OpenRecordset("SELECT TOP 1 ECounter FROM [Email Query]")
【参考方案2】:
从表/查询中检索单个字段的最简单方法是使用 Access 的DLOOKUP
函数。
所以你可以写:
.Body = "嗨" + vbNewLine + vbNewLine + vbNewLine + _ "请在下面找到为 " + vbNewLine + vbNewLine + _ 处理的电子邮件数量 "Email Count = " + DLookup("ECount", "SourceTableOrQuery", "Criteria1 = 5 and Criteria2 = ""Test""") + vbNewLine + _ "O 计数 = " + DLookup("OCount", "SourceTableOrQuery")或者,如果您还没有计数,但想计算项目的数量,您可以使用 'DCount` 函数。
【讨论】:
我在这里遇到错误 --- .Body = "Hi," + vbNewLine + vbNewLine + vbNewLine + "为 " & ThisDay + vbNewLine + vbNewLine + "Email Count = " + DLookup("Ecounter", "Email Query") + vbNewLine + "Outbound Count = " + DLookup("Ecounter", "Email Query") 在即时窗口中执行? DLookup("Ecounter", "Email Query")
会发生什么? Email Query 真的是您的查询名称,而 Ecounter 真的是该字段的名称吗?查询是否只返回一行?
运行时错误 13 类型不匹配,是的,这是查询的名称,Ecounter 是由查询存储在查询中的表达式..
很难从远程调试,但 DLookup 非常简单 - 稍微尝试一下,你会希望得到正确的语法。在此处查看一些示例:access.mvps.org/access/general/gen0018.htm【参考方案3】:
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim sCount As String
Set db = CurrentDb()
Set rs1 = db.OpenRecordset("SELECT TOP 1 ECounter FROM [Email Query]")
If rs1.RecordCount > 0 Then
rs1.MoveFirst
sCount = rs1.Fields("ECount")
End If
rs1.Close
set rs1 = Nothing
set db = Nothing
【讨论】:
以上是关于如何从同一数据库的 VBA 代码中的 MS ACCESS 中提取字段的主要内容,如果未能解决你的问题,请参考以下文章
如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表
我希望从 ms-access 2013 数据库中的所有表单、报告和模块中导出 vba 源代码