MS Access SQL开关功能



我有几个具有相同数据结构的表(它们填充了一堆东西,在单独的.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?"

最新更新