access 数据库 查询语句

选择一个采购单号,点击查找记录按钮,在查询栏进行这样的查询:

查询语句如下:
SELECT DISTINCT请购表.品名,请购表.合同号,请购表.采购单号,订货到货表.到货数量,
FROM请购表 LEFT JOIN 订货到货表 ON (请购表.合同号 =订货到货表.合同编号)
WHERE (((请购表.采购单号)=[forms]![查询窗口]![采购单号]));

问题是:
如果我不在下拉框中选择任何采购单号,而是直接点击查找记录,我想显示所有采购单号的信息,请问SQL语句该怎么写?
高手来帮忙解决啊,查询语句最好写全一点,我怕自己写的会出错~

第1个回答  2013-09-30
在逻辑部分判断 [forms]![查询窗口]![采购单号])); 是不是为空
如果为空 sql里就不拼where部分
如果不为空 就拼上where部分
这样就可以了
第2个回答  2013-09-30
语句先写成

SQL = “SELECT DISTINCT请购表.品名,请购表.合同号,请购表.采购单号,订货到货表.到货数量,
FROM请购表 LEFT JOIN 订货到货表 ON (请购表.合同号 =订货到货表.合同编号)
WHERE 1=1”

在后面加个判断,如果下拉框非空,再加上

SQL = SQL + “ AND (((请购表.采购单号)=[forms]![查询窗口]![采购单号]))”追问

where 1 = 1

if ([forms]![查询窗口]![采购单号] !="")

SQL = SQL + “ AND (((请购表.采购单号)=[forms]![查询窗口]![采购单号]))”

请问是这个意思吗?

追答

如果没有对下拉框进行选择,那么下拉框的内容就空的,这时候的条件是1=1,这是恒成立的,所以就会查出所有结果。加上1=1是为了防止判断条件为空的情况,就是没有选择下拉列表中的内容。

追问

我明白你的意思,但是按照这个写法,保存时候提示有错误,是我If 语句写的不对吗?

追答

sql就是查询的语句,if的判定是在你的代码中写的,不是在sql语句里写的

追问

我已经有点晕了,你能帮我写出来代码么?这样说来说去我也写不好, 干脆帮我写好算了,我追加分

追答

你是用什么语言写的啊。。。。我不确定你用的语言我一定知道,我也许可以试试

追问

我就是在ACCESS里面写的啊。

 

 

追答

把语句改成"
SELECT DISTINCT请购表.品名,请购表.合同号,请购表.采购单号,订货到货表.到货数量,
FROM请购表 LEFT JOIN 订货到货表 ON (请购表.合同号 =订货到货表.合同编号)
WHERE ((请购表.采购单号)='%[forms]![查询窗口]![采购单号]%')"
这样试一下
这样右边不选的话是空的,'%%'会匹配所有的结果

追问

Private Sub Command5_Click()
If ( [forms]![查询窗口]![采购单号] = " ")
Then SQL = “SELECT * FROM 请购表 LEFT JOIN 订货到货表 ON 请购表.合同号 =订货到货表.合同编号";
DoCmd.OpenQuery(“SQL”);
Else DoCmd.OpenQuery ("采购单号") End Sub

追答

判断的时候等于不是用“==”的么,“=”是赋值吧,虽然我不清楚你的语言的语法,不过这个应该都是一样的吧?还有我不知道你的Then是不是管理到Else才结束,如果是只管理下一句语句的话,那你可以把"SQL = ..."放到if之前执行,这样就是如果为空执行SQL,不为空,执行采购单号

本回答被网友采纳
第3个回答  2015-07-14
SELECT 查询字段,多个字段用逗号分隔,全部字段用* FROM 表名,多个表名用逗号分隔, WHERE 条件
第4个回答  2013-09-30
SELECT *,FROM 请购表 LEFT JOIN 订货到货表 ON 请购表.合同号 =订货到货表.合同编号
第5个回答  推荐于2016-01-03
select 值1,值2 from table where 条件=
查询 值 来自 表格名字 where 后面跟条件
相似回答