我有几个具有相同数据结构的表(它们填充了一堆东西,在单独的.accdb文件中以计算2GB限制(,需要从一个文件中检索信息它们基于形式的字段。
研究后,我提出了以下内容,但似乎行不通。
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM Switch([Forms]![View_Info]![Contract] = "Contract1", "tblContract1", [Forms]![View_Info]![Contract] = "Contract2", "tblContract2")
WHERE (MyNumber = [Forms]![View_Info]![MyNumber])
从子句中的语法错误。在此示例中,我只使用了4个字段和2个表,但实际上,我希望检索的每个表和20个字段大约有20个字段。
有人可以阐明这一点吗?我在SQL上非常困难,所以如果这是基本的,我深表歉意。
提前感谢,拉斐尔。
您无法从子句中的sql中的函数返回表名。如果您的表是动态确定的,则必须动态构建SQL命令字符串。
Dim tableName As String, sql As String
tableName = Switch(...)
sql = "SELECT ... FROM [" & tableName & "] WHERE ..."
正如@forpas在他的回答中所解释的那样,您可以使用联合查询,但这总是会查询所有表。由于过滤器不是基于表列,因此过滤将在客户端(即在您的应用程序中(。
尝试此联合:
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract1
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract1"
UNION
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract2
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract2"
联合的每个查询都包含在条件中的where子句中:
[Forms]![View_Info]![Contract] = "Contract?"