在使用数据访问对象 (DAO) 或 ActiveX 数据对象 (ADO) 时,可能需要在代码中构建 SQL 语句。这有时称为让您的 SQL 代码“嵌入”代码行中。例如,如果正在创建新的 QueryDef 对象,必须将它的 SQL 属性设为有效的 SQL 字符串。但如果要使用一个 ADO Recordset 对象,就必须将它的 Source 属性设为有效的 SQL 字符串。
创建 SQL 语句最简单的方法是在查询设计网格中创建一个查询,然后切换到“SQL”视图,并将相应的 SQL 语句复制并粘贴到代码中。
查询通常必须基于用户所提供的值,或者可以说在各种情况下返回不同的结果。如果是这样,就需要在查询中包含变量或控件值。Microsoft Jet 数据库引擎可以处理所有的 SQL 语句,但不处理变量或控件。因此,必须构建相应的 SQL 语句,由 Microsoft Access 先确定这些值,然后再将它们连接到 SQL 语句,该 SQL 语句传递给 Jet 数据库引擎。
下面的示例显示如何使用简单的 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 语句创建 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)