网络驱动器上的文件夹中有三个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个数据库的使用规则,现在可以预先确定要搜索的数据库。再次感谢您的意见。
答案 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