传递VBA记录集的参数

时间:2015-01-29 07:59:31

标签: vba ms-access access-vba parameter-passing recordset

我的查询的参数不属于结果列的一部分,如下所示 它通常在我执行查询时弹出。

PARAMETERS SelectedDate DateTime;
Select col1,col2, col3 from qry
where col4 = [SelectedDate]

我需要为col1& amp;创建一个VBA记录集。 COL2。
谁能告诉我如何通过这个参数?它甚至可能吗?

3 个答案:

答案 0 :(得分:2)

您可以使用SELECT语句作为DAO.Recordset的数据源,然后在打开参数值之前提供参数值。

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim strSelect As String

strSelect = "PARAMETERS SelectedDate DateTime;" & vbCrLf & _
    "Select col1,col2, col3 from qry" & vbCrLf & _
    "where col4 = [SelectedDate];"
Debug.Print strSelect '<-- inspect this in Immediate window; Ctrl+g to go there

Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSelect)
qdf.Parameters("SelectedDate").Value = Date '<-- whatever Date/Time value you want here
Set rs = qdf.OpenRecordset

答案 1 :(得分:1)

据我所知,你想将参数从VBA传递给Access Query?

如果是这样,则需要在VBA中创建模块。

可能是这样的:

Public Str As String

Public Function str_move() As String
str_move = Str
End Function

So Str是你在VBA中的变量。 在您的查询中,您现在可以编写str_move(),从而获得此Str值。

注意:模块名称不能与功能名称相同。将模块命名为m_MoveVariables

没关系 - 查询中不使用模块名称。

我希望这适合你。

答案 2 :(得分:1)

你甚至可以简单地使用Recordset,而不使用QueryDef对象,

Dim rsObj As DAO.Recordset

Set rsObj = CurrentDB.OpenRecordset("SELECT col1, col2 FROM qry WHERE col4 = " & _
                                    Format(Date(), "\#mm\/dd\/yyyy\#"))

'Date() can be replace with any Date or Date Variable.