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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Access 新手如何运行没有 Sub 的 VBA 代码?

在 VBA 中获取 SQL 字符串中的 Access 表单字段值

如何在 VBA 中获取 Select SQL 语句的结果

如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表

如何使用sql语句和vba将数据从MS-Access导入excel power查询?

在access中用vba如何把SQL语句查询到的一个值赋给变量?