执行参数查询

RDO

下面的过程举例说明了一种执行参数化的 Select 查询的方法:即,一条需要一个或多个参数的 SELECT 语句。该过程分两步进行:

  1. 建立一个需要参数的查询,将第一个参数传递到其中,然后执行查询。

  2. 用新参数再次进行查询。

第一次调用查询时,RDO 试图创建一个新的 RDO 查询对象。因为该对象是追加到 rdoConnection 对象的 rdoQueries 集合中的,所以您可以在每次调用过程的时候引用它。以后每次调用该过程时,Refresh 方法重新执行查询。这种技术在 Requery 方法引用的后台建立一个临时存储过程 (SP)。当关闭连接时,临时 SP 就被放下。

Private Sub ParmQueryButton_Click()
   Dim Qy As New rdoQuery
   Dim rs As rdoResultset
   Static FirstTime As Boolean
   If cn.rdoQueries.Count = 0 Then
      FirstTime = True
      sql = "select * from authors where year_born = ?"
      Set Qy = cn.CreateQuery("Pq", sql)
   End If
   Qy(0) = QueryParam.Text
   If FirstTime Then
      Set rs = Qy.OpenResultset()
      FirstTime = False
   Else
      rs.Requery
   End If
   rdoGrid1.ShowData rs
   rs.Close
End Sub

ADO

该过程的目的是执行一个接受参数的访问表查询。您可以用 "?" 字符(如同前面的 RDO 示例中那样)指明参数放置的位置。尽管在这种情况下,您没有创建一个保持在 rdoConnection 对象之外集合中的 rdoQuery 对象,而是使用了一个先前创建(并划定了范围)的独立 ADO Command 对象。在您第一次使用时,要对 Command 属性进行设置,以后每次只要简单地执行已修改参数的命令即可。

此处 ADO 赋予您很多灵活性,某些情况下甚至比 RDO 的灵活性更多。如果您将查询时所需要的每件事情告知 ADO,那么它将不必对数据库执行信息查询,以免得到错误信息,这样就提高了查询速度。

注意 您不需要在代码中建立 ADO Parameters 集合,因为它是自动为您创建的,就象您使用 RDO 时一样。不过,您也可以建立一个,而且如果这样做的话,可以提高性能,at the cost of a little code complexity。如果您选择了这样做,要确保 Command 是和某个打开的连接相关联的,这样 ADO 就可以为参数描述查询服务提供程序(以及服务器)了。

要运行查询并创建结果集,可以用 Command 对象上的 Execute 方法。

Private Sub ParmQueryButton_Click()
   If Cmd.CommandText = "" Then
      Cmd.ActiveConnection = cn
       With Cmd
         .CommandText = "select * from authors where year_born = ?"
         .CommandType = adCmdText
         .CommandTimeout = 15
      End With
'
'   下面的代码部分是不需要的,
'    但可以使执行速度加快。它消除了 ADO'   要从服务器取参数计量的需要。
'
      With Parm
         .Type = adInteger
         .Size = 4
         .Direction = adParamInput
         .Value = QueryParam.Text
         Cmd.Parameters.Append Parm
      End With
   End If

   Cmd.Parameters(0).Value = QueryParam.Text
   Set rs = Cmd.Execute()
   ADOGrid1.ShowData rs
   rs.Close
End Sub