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

在使用数据访问对象 (DAO) 或 ActiveX 数据对象 (ADO) 时,可能需要在代码中构建 SQL 语句。 这有时称为让您的 SQL 代码“嵌入”代码行中。

例如,如果您要创建新的 QueryDef 对象,必须将它的 SQL 属性设为有效的 SQL 字符串。 但如果要使用 ADO Recordset 对象,则必须将它的 Source 属性设为有效的 SQL 字符串。

若要构造 SQL 语句,请在查询设计网格中创建查询,切换到 SQL 视图,并将相应的 SQL 语句复制并粘贴到代码中。

查询通常必须基于用户所提供的值,或者基于在不同情况下发生更改的值。 如果是这样,就需要在查询中包含变量或控件值。 Access 数据库引擎处理所有 SQL 语句,但不处理变量或控件。 因此,必须构造 SQL 语句,以便 Access 首先确定这些值,然后将其连接到传递给 Access 数据库引擎的 SQL 语句中。

使用 DAO 生成 SQL 语句

下面的示例显示如何使用简单的 SQL 语句创建 QueryDef 对象。 此查询返回 2006 年 3 月 31 日之后下达的 Orders 表中的所有订单。

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-2006#;" 
   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-2006# 
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 对象。 此查询返回 2006 年 3 月 31 日之后下达的 Orders 表中的所有订单。

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

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

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Dim dteStart As Date 
dteStart = #3-31-2006# 
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)

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。