Crear instrucciones SQL que incluyan variables y controles

Cuando se trabaja con Data Access Objects (DAO) o ActiveX Data Objects (ADO), puede que necesite construir una instrucción SQL en el código. A veces, esto se conoce como tomar el código SQL "en línea".

Por ejemplo, si va a crear un nuevo objeto QueryDef , debe establecer su propiedad SQL en una cadena SQL válida. Pero si usa un objeto Recordset de ADO, debe establecer su propiedad Source en una cadena SQL válida.

Para construir una instrucción SQL, cree una consulta en la cuadrícula de diseño de la consulta, cambie a la vista SQL y copie y pegue la instrucción SQL correspondiente en el código.

A menudo una consulta debe estar basada en valores que suministra el usuario o que cambian en situaciones diferentes. Si es el caso, necesitará incluir variables o valores de control en la consulta. El motor de base de datos de Access procesa todas las instrucciones SQL, pero no las variables ni los controles. Por tanto, debe construir su instrucción SQL de forma que Access determine primero estos valores y luego los concatene en la instrucción SQL que se pasa al motor de base de datos de Access.

Compilación de instrucciones SQL con DAO

En el siguiente ejemplo se muestra cómo se crea un objeto QueryDef con una simple instrucción SQL. Esta consulta devuelve todos los pedidos de una tabla Orders que se hicieron después del 31 de marzo de 2006.

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

El siguiente ejemplo crea el mismo objeto QueryDef usando un valor almacenado en una variable. Observe el signo de número (#) que denota que los valores de la fecha deben incluirse en la cadena de forma que sean concatenados con el valor de la fecha.

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)

El siguiente ejemplo crea un objeto QueryDef usando un valor en un control denominado OrderDate en un formulario Orders. Observe que se suministra la referencia completa al control y que se incluye el signo de número (#) que denota la fecha dentro de la cadena.

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)

Compilación de instrucciones SQL con ADO

En esta sección, creará las mismas instrucciones que en la sección anterior, pero esta vez con ADO como método de acceso a datos.

En el siguiente ejemplo de código se muestra cómo se crea un objeto QueryDef con una simple instrucción SQL. Esta consulta devuelve todos los pedidos d. una tabla Orders que se hicieron después del 31 de marzo de 2006:

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)

El siguiente ejemplo crea el mismo objeto QueryDef usando un valor almacenado en una variable. Observe el signo de número (#) que denota que los valores de la fecha deben incluirse en la cadena de forma que sean concatenados con el valor de la fecha.

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)

En el siguiente ejemplo de código se crea un objeto QueryDef con un valor en un control denominado OrderDate en un formulario Pedidos. Observe que se proporciona la referencia completa al control y que se incluyen los signos de número (#) que denotan la fecha dentro de la cadena.

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)

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.