Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Access SQL开关函数_Sql_Ms Access - Fatal编程技术网

MS Access SQL开关函数

MS Access SQL开关函数,sql,ms-access,Sql,Ms Access,我有几个数据结构相同的表,它们在单独的.accdb文件中填充了大量内容,以解释2GB的限制,并且需要根据表单中的字段从其中一个表中检索信息 经过研究,我得出了以下结论,但似乎行不通 SELECT MyNumber, MyName, MyPage, MyDrawing FROM Switch([Forms]![View_Info]![Contract] = "Contract1", "tblContract1", [Forms]![View_Info]![Contract] = "Contract

我有几个数据结构相同的表,它们在单独的.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])
FROM子句中的语法错误。 在本例中,我只使用了4个字段和2个表,但事实上,我希望检索的每个表中大约有9个表和20个字段

有人能解释一下吗?我很难使用SQL,所以如果这是非常基本的,我很抱歉


提前感谢您,Rafael。

您不能从SQL from子句中的函数返回表名。如果表是动态确定的,则必须动态生成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"
UNION的每个查询在WHERE子句中都包含以下条件:

[Forms]![View_Info]![Contract] = "Contract?"

SWITCH是一个返回标量值的函数,通常在SELECT子句中使用。这并不是真正的问题。在MS Access中,不允许在引用表中加入和加入函数。顺便说一下,考虑数据库重新设计。即使有MS Access的单个文件限制,也应该执行规范化。有编号的表格,如TBLContract 1、TBLContract 2。。。这不是最佳设置。将所有合同保存在一个数据库中,其他项目保存在其他数据库中,并根据需要进行链接。您会惊讶地发现,很少有业务逻辑无法用它来解决。如果你找到一个例子,请分享!另外,存储效率更高,避免了冗余和复杂的查询,并且您可以更好地一对一、一对多关系地执行引用完整性!从今天开始重新设计。祝你好运@冻糕最终做了重新设计,花了我一段时间,但事情更顺利。谢谢你的提示,我很快就会跪下来:对不起,我有一段时间没有刷新页面了。已删除此部分。现在为驻留在多个数据库中的9个合同表完成此操作!哎哟OP通过重新设计会做得更好。但是这个答案显示了需要单独命名表的复杂查询?我应该把这个问题读得更清楚。我不是那个写完整代码的人。我希望OP知道如何写剩下的。