首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数化查询访问

参数化查询访问
EN

Stack Overflow用户
提问于 2016-02-27 16:01:31
回答 1查看 703关注 0票数 0

初学者在access,如果这是一个问题,如果这是以前已经问过(我已经搜索了很长时间,所以也许我寻找错误的东西?)无论如何,在我的数据库中,我有一个用于提交记录的表单,还有一个检查双重预订的查询(它显示了与输入日期重叠的所有记录)。我已经在表单上创建了一个“submit record”按钮,我所要做的就是通过运行双重预订查询和检查是否没有记录来验证是否存在双重预订。

为此,我尝试使用Dcount函数,但是我似乎找不到如何运行查询,因为它有参数(我需要将表单的输入传递给查询)。我不确定这是否是检查双重预订的最有效的方法,但我只需要一种解决方案,目前起作用的是:P.这是我的当前代码,它显然不能工作,因为sql查询需要参数:

代码语言:javascript
复制
If DCount("*","Double Booked")=0 Then ...

(数据库中的查询名为“Double Booked”)

对不起,如果我不清楚的话,谢谢。

编辑:这是双重预订的查询代码:

代码语言:javascript
复制
SELECT *
FROM Booking
WHERE (

([Your VanID] = [Booking].[VanID])

AND (

( ([Your Collection Date] >= [Booking].[Collection date]) AND ([Your Collection Date] <= [Booking].[Return date]))

OR ([Your Return Date] >= [Booking].[Collection date]) AND ([Your Return Date] <= [Booking].[Return date])

OR (([Your Collection Date] <= [Booking].[Collection date]) AND ([Your Return Date] >= [Booking].[Return date]))

)

);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-27 16:26:09

如果您只想知道(如果有双重预订(而不是多少),那么DCount是不必要的。打开记录集就足够了。

使用表单字段作为参数的查询在直接打开时或作为RecordSource时运行良好,但在VBA中打开时不运行。

为了能够做到这一点,我在一个公共模块中具有以下功能:

代码语言:javascript
复制
Public Sub EVal_Params(QD As DAO.QueryDef)

On Error GoTo EVal_Params_Err

    Dim i As Integer
    Dim par As DAO.Parameter

    For i = 0 To QD.Parameters.Count - 1
        Set par = QD.Parameters(i)
        ' This is the key line: Eval "evaluates" the form field and gets the value
        par.Value = Eval(par.Name)
    Next i

EVal_Params_Exit:
    On Error Resume Next
    Exit Sub

EVal_Params_Err:
    MsgBox Err.Description, vbExclamation, "Runtime-Error " & Err.Number & " in EVal_Params"
    Resume EVal_Params_Exit

End Sub

这样,您就可以在查询上打开记录集,并且它的.EOF属性将告诉您是否存在双重预订:

代码语言:javascript
复制
Dim DB As DAO.Database
Dim QD As DAO.QueryDef
Dim RS As DAO.Recordset

Set DB = CurrentDb

Set QD = DB.QueryDefs("Double Booked")
' Get form field values into query parameters
Call EVal_Params(QD)
Set RS = QD.OpenRecordset(dbOpenSnapshot)
If RS.EOF Then
    ' no doubles
Else
    ' there are double bookings
End If
RS.Close

编辑

如果查询参数不是对窗体控件的引用,而是“正常”命名参数,则应该这样做:

代码语言:javascript
复制
Set QD = DB.QueryDefs("Double Booked")
QD.Parameters("Your VanID") = someValue
QD.Parameters("Your Collection Date") = someOtherValue
Set RS = QD.OpenRecordset(dbOpenSnapshot)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35671921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档