Access 2010 - 确定三个远程mdb文件之一中是否存在记录以供后续选择

时间:2017-09-27 20:41:40

标签: vba ms-access

网络驱动器上的文件夹中有三个mdb文件可能包含所需的记录。如何确定哪个数据库保存记录,理想情况下没有数据传输/链接/等等?然后,单个SQL或DAO选择可以从正确的数据库中获取数据。注意:我正在尝试使用Access作为SQL的前端,使用遍布网络驱动器的现有Access数据。

我目前解决方案配置3个DAO对象并且在找到之前连续检查没有结果,似乎将远程表加载到本地记录集并且花费的时间太长。

在这种情况下,有没有办法使用IF EXISTS?

此代码抛出“无效的SQL语句;预期的DELETE,INSERT,PROCEDURE,SELECT或UPDATE”错误,但通常是我想要做的:

Dim strSQL As String
Dim strSku As String
Dim intDbToSearch As Integer
strSku = DLookup("SKUNo", "tblCurrentItem")   'Note: this returns valid SKU#
strSQL = "IF EXISTS(SELECT xxTable.SKUNo "
strSQL = strSQL & "FROM [S:\Our Inventory\Cust Sleeves.mdb].[xxTable] "
strSQL = strSQL & "Where xxTable.SKUNo = " & "'" & strSku & "') Then intDbToSearch = 1"  

DoCmd.RunSQL strSQL

如果在db 1或2中找不到SKUNo,这将是三个IF存在之一。

最终intDbToSearch应指向db 1,2或3,如果发现SKUNo则为0,否则为0。

由于

最后,我推送了上游3个数据库的使用规则,现在可以预先确定要搜索的数据库。再次感谢您的意见。

2 个答案:

答案 0 :(得分:1)

SKU所寻求的只会出现在其中一张表中吗?

如果您不想设置表链接或使用VBA记录集,只有我能看到的其他方法是带有动态参数的查询对象,该参数引用SKU输入的表单控件。不知道这是否会更快,并且需要查询每个远程表 SELECT SKUNo FROM xxTable IN "S:\Our Inventory\Cust Sleeves.mdb" WHERE SKUNo = Forms!formname!cbxSKU

然后就查询执行DCount。

Dim intDbToSearch As Integer
If DCount("*", "xxQuery") > 0 Then
    intDbToSearch = 1
End If

UNION可以使用SELECT语句,因此只能使用1个查询对象。

SELECT "x1" AS Source, SKUNo FROM xxTable IN "S:\Our Inventory 1\Cust Sleeves.mdb" WHERE SKUNo = Forms!formname!cbxSKU
UNION SELECT "x2", SKUNo FROM xxTable IN "S:\Our Inventory 2\Cust Sleeves.mdb" WHERE SKUNo = Forms!formname!cbxSKU
UNION SELECT "x3", SKUNo FROM xxTable IN "S:\Our Inventory 3\Cust Sleeves.mdb" WHERE SKUNo = Forms!formname!cbxSKU;

答案 1 :(得分:0)

通过传递表名和值来检查是否存在的简单函数怎么样?

这样的事情:

Public Function ExistInTable(Byval TableName As String, ByVal Value As String) As Boolean
    ExistInTable = (DCount("*", TableName, "[SKUNo]='" & Value & "'" > 0)
End Function

要打电话:

Sub Test()
    If ExistInTable("T1", "Whatever") Then 'Exists in T1
    If ExistInTable("T2", "Whatever") Then 'Exists in T2
    '....
End Sub