Office中国论坛/Access中国论坛

标题: 如何用ADO打开条件查询 [打印本页]

作者: ycxchen    时间: 2013-3-3 16:58
标题: 如何用ADO打开条件查询
本帖最后由 ycxchen 于 2013-3-3 17:11 编辑

大家知道,如果是DAO,会用QueryDef定义一个查询对象,后用SQL语句设定条件查询,但用ADO如何打开条件查询呢?看过一些ADO资料,还是没头绪,请教高手。
       我的意思:选择姓名后,用ADO语句打开查询,以查看该人的合同期满是否已经超过了400天。例子中是在查询设定条件的(date()-[结束日期]>400),我现要求用语句来设定,不要在查询中设,防止修改。请帮忙,谢谢!
[attach]51352[/attach]

作者: todaynew    时间: 2013-3-3 17:40
与ADO没什么关系。

写一个名曰“到期查询”的查询:

SELECT *, DateDiff("d",Date(),[结束日期])<0 AS 到期
FROM 合同表;

用Dlookup查找某个合同是否到期即可:
if Dlookup("到期","到期查询","客户ID=" & me.客户ID.value & " and 项目='" & me.项目.value & "'")=True then
    msgbox "合同到期了!"
end if
作者: roych    时间: 2013-3-4 00:55
1、建议不要让用户直接接触到表或者查询,而是通过窗体来处理。
     用查询,在子窗体或者弹出窗体中设置记录集类型为“快照”,那么用户就只能查看不可以修改了。
    【当然锁定控件也可以,不过如果全部字段都禁止修改的话,还是快照方便】

2、如果非要用记录集来执行的话,就用Connection.Execute来执行。set rst =cnn.Execute("select * from 表")。但这只是打开记录集而已,看不到查询对象的。
     如果非要看到查询对象,除了用DAO的QueryDef对象之外,大概只能用Docmd的OpenQuery方法了。

作为学术上研究的话,这问题无可厚非。不过,作为实际应用的话,建议还是采取第一条的办法:在窗体上设置。

作者: ycxchen    时间: 2013-3-4 17:28
roych 发表于 2013-3-4 00:55
1、建议不要让用户直接接触到表或者查询,而是通过窗体来处理。
     用查询,在子窗体或者弹出窗体中设置 ...

我的想法也一样,我先写一写代码。
作者: ycxchen    时间: 2013-3-4 18:12
Private Sub Command3_Click()
Dim sql As String
   sql = "SELECT 客户表.姓名, 合同表.项目, 合同表.起始日期, 合同表.结束日期 FROM 客户表 RIGHT JOIN 合同表 ON 客户表.ID = 合同表.客户 WHERE (((Date()-[结束日期])>=400));"
DoCmd.RunSQL sql
End Sub
我认为上面代码不会错,但运行提示出错,请问,如何修改?

作者: todaynew    时间: 2013-3-4 21:23
DoCmd.RunSQL sql?{:soso_e120:}
作者: ycxchen    时间: 2013-3-5 10:25
本帖最后由 todaynew 于 2013-3-5 12:25 编辑
todaynew 发表于 2013-3-4 21:23
DoCmd.RunSQL sql?

看过SQL动作查询的一些资料,明白了为什么执行不了SQL语句。请教版主:运行“SELECT *, DateDiff("d",Date(),[结束日期])<0 AS 到期 FROM 合同表;”查询,为什么“到期”字段显示的值是“-1”的,按我理解, DateDiff函数取得的值应该是日期的差额量的呀。

True=-1
False=0
如此而已
作者: ycxchen    时间: 2013-3-5 16:25
SELECT DateDiff("d",Date(),[结束日期]) AS a, 合同表.ID, 合同表.客户, 合同表.项目, 合同表.起始日期, 合同表.结束日期
FROM 合同表;
[attach]51375[/attach]

我建了个类似的查询,为何字段不显示-1的?
作者: ycxchen    时间: 2013-3-5 17:03
明白,<0




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3