首页 > 解决方案 > VBA、Access 和 SQL 的新手。我如何编写一个 SQL 查询来搜索我的 AccessDB 中的一个表并在找到它时给我一个 True/False?

问题描述

我之前没有过多地使用 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

“Set 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。我怎样才能做到这一点,我是否朝着正确的方向前进?

标签: sqlvbams-accesssearch

解决方案


文本框中的表达式可以执行域聚合函数(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 方法

所有这些都避免了循环效率最低的记录集。


推荐阅读