VBA、Access 和 SQL 的新手。我如何编写一个 SQL 查询来搜索我的 AccessDB 中的一个表并在找到它时给我一个 True/False? [复制]
Posted
技术标签:
【中文标题】VBA、Access 和 SQL 的新手。我如何编写一个 SQL 查询来搜索我的 AccessDB 中的一个表并在找到它时给我一个 True/False? [复制]【英文标题】:New to VBA, Access, and SQL. How do i write an SQL query that will search a table in my AccessDB and give me back a True/False if it finds it? [duplicate] 【发布时间】:2019-06-20 20:42:45 【问题描述】:我以前没有过多地使用过 VBA、Access 或 SQL。但我有一点……我正在做一个项目。因此,这里的目标是输入一个名称,获取该名称并在链接表中搜索该名称。有人告诉我可以使用 SQL 查询来做到这一点?但是怎么做?我需要使用 SQL 查询吗?
我已经尝试了很多事情,但我从来没有更接近我的答案。这个我试过了……
'strTable1 = "FAC_List"
'Dim cellFind As Object
'cellFind = Workbooks("FAC List.xlsx").Sheets("Sheet1").Range("A2").Find(what:=txtLDcode)
'Dim rowNum As Integer
'Dim cellFind As Object
'rowNum = 0
'Do
' rowNum = rowNum + 1
' Set cellFind = Workbooks("FAC List.xlsx").Sheets("Sheet1").Range("A" & rowNum)
'
' If InStr(cellFind, txtLDcode) Then
' txtLDcode = True
'
' End If
'Loop Until cellFind = ""
'If Not cellFind Is Nothing Then
' Set txtLDcode = True
'End If
“设置 cellFind”部分总是返回工作簿错误...我也在下面尝试过...
'Dim objRecordset As ADODB.Recordset
'Set objRecordset = New ADODB.Recordset
'Dim i As Integer
'Dim value As Variant
'objRecordset.ActiveConnection = CurrentProject.Connection
'objRecordset.Open "FAC_List"
'While objRecordset.EOF = False
'check for match
' If objRecordset.Fields.Item(0).value = txtLDcode Then
' txtLDcode = True
' Else
'txtLDcode = False
' End If
' objRecordset.MoveNext
'Wend
但最后一部分的问题是它总是返回 False... 我的链接表名称是 FAC_List。一旦用户输入了一些信息,该信息就会在表格中进行搜索,并且基本上只返回 True/False。我怎样才能做到这一点,我是否朝着正确的方向前进?
【问题讨论】:
应该搜索哪个字段?一个简单的 DLookup 应该可以完成。或尝试:If objRecordset!fieldname = txtLDcode Then
。或者,不要使用循环记录集,而是使用 DAO 记录集和 FindFirst 方法。或者打开过滤到输入的记录集并检查 RecordCount。比循环更好的方法。
在 Access 中时为什么要弄乱工作簿。这不是 Excel,对吧?是的,SQL 查询是这里的方法。我什至不确定 VBA 是在这里使用的解决方案,因为这是您数据库的基本 SQL。喜欢SELECT nameField FROM yourLinkedTable WHERE nameField = 'somename';
txtLDcode 是需要搜索的变量。我必须查看 DLookUp 以了解如何使用它。我也遇到过有人推荐这个
我基本上是在尝试获取位于我的变量 txtLDcode 中的字符串,以便在链接表(即 excel 文件)中进行搜索。由于我之前没有过多地使用 SQL,因此我个人并不完全确定如何让查询运行,并且仅在找到 txtLDcode 时才返回 True/False。这应该是一个非常简单的搜索和返回,如果我在 C 或 c++ shell 中,那么我可以这样做。
谢谢你们。在研究了使用 DLookup 之后,我能够很容易地让它工作。
【参考方案1】:
文本框中的表达式可以执行域聚合函数(DCount、DSum、DLookup)——无需查询,也无需 VBA。用实际字段名称替换 fieldname
。假设字段为文本数据类型;如果不是,请删除撇号分隔符。
=IIf(DCount("*", "FAC_List", "fieldname='" & [txtLDcode] & "'") = 0, "False", "True"))
如果你必须使用VBA,那么它可以执行域聚合。
txtLDcode = IIf(DCount("*", "FAC_List", "fieldname='" & Me.txtLDcode & "'") = 0, "False", "True"))
其他 VBA 选项将涉及打开记录集。 1. 打开按输入过滤的记录集并检查 RecordCount 2.打开未过滤的DAO记录集并使用FindFirst方法
所有这些都避免了循环效率最低的记录集。
【讨论】:
谢谢。 DLookup 经过进一步研究,能够完成我需要做的工作。比我试图找到或做的任何事情都容易得多。只是需要一点指导。以上是关于VBA、Access 和 SQL 的新手。我如何编写一个 SQL 查询来搜索我的 AccessDB 中的一个表并在找到它时给我一个 True/False? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 VBA 中获取 SQL 字符串中的 Access 表单字段值
如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表