全部显示

创建包含变量和控件的 SQL 语句

   

在使用数据访问对象 (DAO)ActiveX 数据对象 (ADO) 时,可能需要在代码中构建 SQL 语句。这有时称为让您的 SQL 代码“嵌入”代码行中。例如,如果正在创建新的 QueryDef 对象,必须将它的 SQL 属性设为有效的 SQL 字符串。但如果要使用一个 ADO Recordset 对象,就必须将它的 Source 属性设为有效的 SQL 字符串。

创建 SQL 语句最简单的方法是在查询设计网格中创建一个查询,然后切换到“SQL”视图,并将相应的 SQL 语句复制并粘贴到代码中。

查询通常必须基于用户所提供的值,或者可以说在各种情况下返回不同的结果。如果是这样,就需要在查询中包含变量或控件值。Microsoft Jet 数据库引擎可以处理所有的 SQL 语句,但不处理变量或控件。因此,必须构建相应的 SQL 语句,由 Microsoft Access 先确定这些值,然后再将它们连接到 SQL 语句,该 SQL 语句传递给 Jet 数据库引擎。

用 DAO 创建 SQL 语句

下面的示例显示如何使用简单的 SQL 语句创建 QueryDef 对象。该查询从“Orders”表返回所有发生在 96 年 3 月 31 日之后的订单:

Public Sub GetOrders()

   Dim dbs As DAO.Database
   Dim qdf As DAO.QueryDef
   Dim strSQL As String

   Set dbs = CurrentDb
   strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-96#;"
   Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

End Sub

下面的示例使用存储在变量中的值创建同样的 QueryDef 对象。请注意,表示日期值的数字符号 (#) 必须包含在字符串中,这样它们才能与日期值连接。

Dim dbs As Database, qdf As QueryDef, strSQL As String
Dim dteStart As Date
dteStart = #3-31-96#
Set dbs = CurrentDb
strSQL = "SELECT * FROM Orders WHERE OrderDate" _
    & "> #" & dteStart & "#;"
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

下面的示例使用“Orders”窗体上名为“OrderDate”的控件值创建一个 QueryDef 对象。请注意要提供对控件的完整引用,并在字符串中包含表示日期的符号。

Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM Orders WHERE OrderDate" _
    & "> #" & Forms!Orders!OrderDate & "#;"
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

用 ADO 创建 SQL 语句

在这一节,我们将创建与前一节同样的语句,但这次使用 ADO 作为数据访问方法。

下面的示例显示如何使用简单的 SQL 语句创建 QueryDef 对象。该查询从“Orders”表返回所有发生在 96 年 3 月 31 日之后的订单:

Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-96#;"
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

下面的示例使用存储在变量中的值创建同样的 QueryDef 对象。请注意,表示日期值的数字符号 (#) 必须包含在字符串中,这样它们才能与日期值连接。

Dim dbs As Database, qdf As QueryDef, strSQL As String
Dim dteStart As Date
dteStart = #3-31-96#
Set dbs = CurrentDb
strSQL = "SELECT * FROM Orders WHERE OrderDate" _
    & "> #" & dteStart & "#;"
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

下面的示例使用“Orders”窗体上名为“OrderDate”的控件值创建一个 QueryDef 对象。请注意要提供对控件的完整引用,并在字符串中包含表示日期的符号。

Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM Orders WHERE OrderDate" _
    & "> #" & Forms!Orders!OrderDate & "#;"
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)