24
http://www.fontstuff.com/access/acctut15.htm Access y SQL Parte 2: Poner VBA y SQL Juntos En el primer tutorial de esta serie sobre Access y SQL expliqué en foto SQL instalado en el acceso general. Este segundo tutorial introduce algunos conceptos básicos de SQL, las reglas esenciales que usted realmente necesita saber cuando se trabaja con SQL en bases de datos de Access. Esta serie de tutoriales se centra en la combinación de SQL con VBA para ayudar a construir poderosa y flexible, fácil de usar bases de datos-más. Esto es lo que contiene este tutorial: 5 minutos de duración del curso en SQL Algunos términos técnicos SQL contiene una serie de palabras clave tales como SELECT, DELETE, UPDATE, OR, AND, DISTINCT, y FROM, y muchos otros palabras clave de SQL se suelen combinar con argumentos en forma de nombres de tablas, nombres de campo, etc criterios para formar una sentencia SQL. Una sentencia de SQL puede contener una o más cláusulas, como una cláusula WHERE (que contiene los criterios de una consulta) o una cláusula ORDER BY (que determina el orden en que se muestran los datos de una consulta). La estructura de una instrucción SQL Esta ilustración muestra las partes principales de una instrucción de consulta SQL típica:

Pasar SQL A VBA.doc

Embed Size (px)

Citation preview

Page 1: Pasar SQL A VBA.doc

http://www.fontstuff.com/access/acctut15.htm

Access y SQL

Parte 2: Poner VBA y SQL Juntos

En el primer tutorial de esta serie sobre Access y SQL expliqué en foto SQL

instalado en el acceso general. Este segundo tutorial introduce algunos

conceptos básicos de SQL, las reglas esenciales que usted realmente necesita

saber cuando se trabaja con SQL en bases de datos de Access. Esta serie de

tutoriales se centra en la combinación de SQL con VBA para ayudar a construir

poderosa y flexible, fácil de usar bases de datos-más. Esto es lo que contiene

este tutorial:

5 minutos de duración del curso en SQL

Algunos términos técnicos

SQL contiene una serie de palabras clave tales como SELECT, DELETE,

UPDATE, OR, AND, DISTINCT, y FROM, y muchos otros palabras clave de

SQL se suelen combinar con argumentos en forma de nombres de tablas,

nombres de campo, etc criterios para formar una sentencia SQL.

Una sentencia de SQL puede contener una o más cláusulas, como una

cláusula WHERE (que contiene los criterios de una consulta) o una cláusula

ORDER BY (que determina el orden en que se muestran los datos de una

consulta).

La estructura de una instrucción SQL

Esta ilustración muestra las partes principales de una instrucción de consulta

SQL típica:

Page 2: Pasar SQL A VBA.doc

Para mayor claridad, las distintas cláusulas se muestran en líneas separadas.

Esta es la forma en la vista SQL de la ventana de diseño de la consulta donde

Access muestra su SQL Server.

¿Qué pasa con los soportes?

Access utiliza paréntesis (paréntesis) para incluir las distintas partes de la

cláusula WHERE, pero éstas pueden quedar fuera si usted encuentra este

sencillo (yo!).

WHERE (((tblStaff.Office)="London”))

es la misma:

WHERE tblStaff.Office="London”

No escatime en la información

Cuando un campo se especifica que tiene la opción de añadir el nombre de la

tabla, que separa los dos con un punto.

SELECT Firstname, Lastname FROM tblStaff ORDER BY Lastname

es lo mismo:

SELECT tblStaff.Firstname, tblStaff.Lastname FROM tblStaff ORDER BY

tblStaff.Lastname

Siempre que los campos pertenecen a la fuente de datos especificados en la

cláusula FROM. Si la consulta se refiere a más de una tabla debe incluir el

nombre de la tabla junto con el nombre del campo.

Clasificación para el tipo de datos

Cuando el suministro de los valores en una instrucción SQL, por ejemplo, como

criterios de consulta, su tipo de datos deben ser correctamente definido por una

"clasificación". Esto se hace encerrando el valor entre un par de caracteres

apropiado.

El texto debe ir entre comillas simples (') o comillas ("), por ejemplo:

WHERE tblStaff.Department = "Marketing”

O

Page 3: Pasar SQL A VBA.doc

WHERE tblStaff.Department = 'Marketing’

La fecha debe estar entre las marcas de almohadilla (#) también llamada o el

número de signos de número, por ejemplo:

WHERE tblStaff.BirthDate = #09/27/1950#

Un número, de cualquier tipo, no necesita calificador y se puede entrar ya que

es, por ejemplo:

WHERE tblInvoices.InvoiceNumber > 1500

Obtener el formato de fecha correcto

Las fechas en SQL debe ser escrito en el formato de fecha EE.UU. (mes / día /

año). Esto es imprescindible, independientemente de la configuración de

formato por defecto la fecha en su equipo. La consulta en la ventana de diseño

de Access acepta fechas en el formato local por defecto, sino que convierte la

fecha se escribe en el formato correcto cuando se construye la sentencia SQL.

Recuerde el punto y coma

Una sentencia SQL debe finalizar con punto y coma (;). Si se omite el punto y

coma al escribir una sentencia SQL en la vista SQL de la ventana de diseño de

la consulta de Access la consulta seguirá funcionando porque Access corrige el

error para ti! Usted debe recordar que incluyen al escribir SQL en VBA y en

otros lugares.

Cómo usar VBA cuando habla de SQL

VBA y SQL son cosas diferentes. VBA es un lenguaje de programación en

toda regla que se puede utilizar para obtener acceso (y otros programas de

Microsoft Office) para hacer casi cualquier cosa que desee. SQL es un

lenguaje utilizado exclusivamente para manipular los datos y la estructura de

una base de datos.

VBA hace un llamamiento a una amplia gama de objetos, propiedades,

métodos, funciones y constantes para la construcción de las declaraciones a

veces complejas para controlar el programa. SQL utiliza una gama limitada de

"palabras clave" combinadas con la información que suministro, tales como

nombres de tablas, nombres de campo y criterios, para la construcción de

estados esencialmente simple (aunque a veces largo) detallando lo que desea

que el programa para hacer con sus datos.

Page 4: Pasar SQL A VBA.doc

SQL a menudo se puede usar solos, por ejemplo, al establecer la propiedad de

un formulario o informe en la vista de diseño, o cuando se trabaja en la vista

SQL de la consulta ventana de diseño de Acceso. Pero este tutorial es sobre

cómo combinar SQL con VBA. Su objetivo es explicar las normas de SQL y

para fomentar el uso de buenas prácticas de código escrito y de evitar las

dificultades y problemas que pueden ocurrir. La manera de escribir el código

es algo muy personal así que voy a mostrar cómo hago las cosas, utilizando

algunas técnicas que he aprendido de otros y algunos que he descubierto yo

mismo. Usted no tiene que hacerlo a mi manera, pero funciona para mí por lo

que es lo que enseñó.

VBA es un lenguaje muy flexible y con frecuencia hay muchas maneras

diferentes en los que VBA puede lograr la misma tarea. SQL en el otro lado es

un lenguaje muy preciso y flexible. Todo tiene que ser tan, pero tiene la ventaja

de ser también muy simple. Como expliqué en la Parte 1: Descripción de la

situación de SQL existen varios dialectos de SQL. Aquí voy a estar utilizando

el SQL de Jet que impulsa el motor de base de datos Access.

Cómo escribir SQL en VBA

Diferentes desarrolladores tienen sus propias maneras de hacer las cosas y

esto se refleja en su estilo de codificación. Lo que usted ve aquí es la manera

en la que me gusta escribir mi código.

Use una variable de cadena

Cada vez que usted escribe SQL en el código VBA es importante recordar que

el SQL está siempre en la forma de una cadena de texto. sentencias SQL

también puede ser bastante largo, y por esa razón por la que se suelen asignar

a las variables de texto para que sean más fáciles de manejar.

Cuando se trabaja con SQL en un procedimiento de VBA por lo general asignar

el SQL a una variable de texto y por lo general el nombre de mi variable es:

strSQL. Algo como esto ...

Dim strSQL As String

  strSQL = "... LA SENTENCIA SQL AQUÍ ...”

  DoCmd.RunSQL strSQL

Por supuesto que podría acabar con la variable y aplicar el SQL directamente,

de esta manera:

Page 5: Pasar SQL A VBA.doc

DoCmd.RunSQL "... La sentencia SQL Aquí ..."

Pero, como se verá en los tutoriales más tarde la construcción de una

sentencia SQL puede implicar varias etapas y muchas líneas de código, así

que por lo general la opción de guardarlo en una variable.

Select tblStaff.Firstname, tblStaff.Lastname from tblStaff where

tblStaff.Office="Paris”;

SELECT tblStaff.Firstname, tblStaff.Lastname FROM tblStaff WHERE

tblStaff.Office="Paris”;

Estoy utilizando ejemplos sencillos, pero imagina tratando de leer una

instrucción SQL que es diez veces mayor que esta (NOTA: la longitud máxima

de una instrucción SQL en VBA es 32.768 caracteres!).

Incluya nombres de campo entre corchetes

Bueno, yo estoy aquí exigente, porque siempre pongo entre corchetes los

nombres de campo. El access sólo exige que lo haga cuando los nombres de

campo contienen espacios. Por ejemplo, FirstName está bien, pero con First

Name debe ser escrito [First Name]. Los corchetes le indican a Access que

todas las palabras del nombre del campo van juntas. También le dice a

access que "se trata de un nombre de campo", y así le permite utilizar palabras

reservadas de otro modo los nombres de los campos (por ejemplo, [Fecha],

que es también el nombre de una función) sin causar conflictos.

Pero lo hago por otra razón también. Yo sé que si veo texto entre corchetes,

ya sé que es un nombre de campo, tenga espacios en él o no ...

SELECT tblStaff.[Firstname], tblStaff.[Lastname] FROM tblStaff WHERE

tblStaff.[Office]="Paris”;

Escribir cada cláusula en una línea separada

A menos que mi sentencia SQL es muy corto, por ejemplo:

SELECT tblStaff.* FROM tblStaff;

Me gusta escribir cada cláusula de la instrucción SQL en una línea

independiente. Esto hace que las declaraciones largas sean mucho más fácil

de leer y editar ...

Page 6: Pasar SQL A VBA.doc

SELECT tblStaff.[Firstname], tblStaff.[Lastname]

  FROM tblStaff

  WHERE tblStaff.[Office]="Paris”;

Al hacer esto en un procedimiento de VBA se debe recordar que se trata de

una sola cadena de texto, por lo que debe utilizar en cada línea los carácter de

salto de VBA (un espacio seguido por un guión bajo) y concatenar las líneas

con un signo (&). No olvide que cada línea debe tener la apertura y cierre de

las comillas.

Alternativa una o dos comillas

Es fácil confundirse con las comillas cuando se está construyendo una

sentencia SQL en VBA. La propia declaración debe ir entre comillas porque es

una cadena de texto de VBA. Pero también podría haber algún texto en el SQL

como criterios en la cláusula WHERE. Si utiliza el mismo tipo de comillas para

todos, access se confunde. Mira este ejemplo ...

Hay un problema con las comillas anidadas en la cláusula WHERE.

Comparemos los dos ejemplos a continuación. VBA comienza a leer de

derecha a izquierda, en el primer ejemplo ve dos cadenas de texto delimitada

por comillas dobles, y entre ellos una palabra que no entiende (París) por lo

que genera un error.

Pero cuando las comillas se alternan como se muestra en el segundo ejemplo,

el problema no se plantea. VBA ve una cadena de texto delimitada por

comillas dobles, dentro de la cual hay más texto entre comillas simples.

Page 7: Pasar SQL A VBA.doc

Yo trabajo con muchos conjuntos de comillas que se confunden, usted siempre

puede usar el código de caracteres ASCII para el signo de comillas dobles -

Chr (34) - en su lugar. Hay un ejemplo de esto en la siguiente sección.

Poniendo todo junto

Algunas de estas normas son esenciales, otros son simplemente mi forma de

hacer las cosas (y la de muchos otros desarrolladores de bases de datos).

Sígalas y escribirá buen código que sea fácil de leer y depurar. La siguiente

ilustración muestra una completa instrucción SQL escrita en la forma en que se

sugiere.

Trabajo con variables

En los ejemplos que he mostrado hasta ahora, los criterios establecidos en la

cláusula WHERE han sido "rígida", escrito directamente en la instrucción SQL.

Pero esto no suele ser el caso. Una de las razones principales para trabajar

con SQL en sus procedimientos de VBA es que usted puede hacer cambios a

las cosas.

Usted podría estar cambiando los criterios, los campos e incluso las fuentes de

datos especificados en las instrucciones SQL cada vez que se ejecuta el

código. La información que necesita la instrucción SQL se obtiene por parte

del usuario a través de sus opciones, en un cuadro de diálogo o de los valores

en los campos de un formulario. Tutoriales de próxima aparición en esta serie

mostrará cómo se puede hacer.

Considere este ejemplo sencillo, cuando el valor del criterio es "rígida" en la

cláusula WHERE de la instrucción SQL:

Page 8: Pasar SQL A VBA.doc

Si desea permitir al usuario elegir un valor para los criterios, cada vez que se

ejecuta la consulta, por lo que se construye un cuadro de diálogo en el que hay

un cuadro combinado que contiene una lista de las oficinas. El cuadro

combinado se llama cboOffice. Puede insertar una referencia al valor del

cuadro combinado directamente en la instrucción SQL:

Como alternativa, puede colocar el valor del cuadro combinado en una variable

y luego insertar la variable en la instrucción SQL:

El uso de una variable puede hacer que el código de instrucción SQL sea más

fácil de leer y entender, especialmente cuando hay varios criterios variables a

considerar. A veces es necesario utilizar este método cuando el valor tiene que

ser examinados o manipulados de alguna manera antes de que pase al SQL.

Cualquiera que sea el método que elija, recuerde que debe incluir el tipo de

calificador de datos en la cadena SQL En la siguiente ilustración, comillas

simples están incluidas en la cadena SQL a ambos lados de la variable de texto

(marcados con flechas rojas)

Como alternativa, puede usar el código de caracteres ASCII para la marca de

comillas dobles (Chr (34)) se puede insertar a uno y otro lado de la variable de

texto, pero fuera de la cadena SQL. Este método requiere más trabajo, pero

evita los conflictos y la confusión derivada de las comillas anidadas.

Page 9: Pasar SQL A VBA.doc

Recuerde que dentro de los criterios del código, la variables requieren de una

correcta clasificación para su tipo de datos: las comillas para el texto, las

marcas de # para las fechas, y nada para los números.

Depuración del código SQL

Al igual que con cualquier otro tipo de programación, el código SQL puede no

funcionar correctamente. Puede ser que sea porque ha cometido un error de

lógica, o tiene la sintaxis SQL mal, o quizás usted acaba de hacer un error

tipográfico. Si esto resulta viable en el código no puede producir el resultado

que esperábamos. Más a menudo si el resultado es un código que no funciona

y el access arroja un error. Su trabajo consiste en averiguar lo que salió mal y

ponerlo bien.

Si está ejecutando una sentencia SQL dentro de un procedimiento de VBA

podrás ver los regulares mensajes de error de la base. A veces estos son muy

difíciles de interpretar.

Un truco utilizado por los desarrolladores de access es poner a prueba su SQL

en la vista SQL de la ventana de diseño de la consulta de Access. Si hay un

problema Access mostrará un mensaje de error. Los mensajes de error que se

obtiene de la vista SQL de la herramienta de consulta de access son a menudo

mucho más útiles y descriptivos que los que obtiene de VBA.

Mensajes de error de SQL

Vale la pena familiarizarse con los diferentes tipos de mensaje de modo que

usted puede rastrear el origen de los errores de código. La mayoría de los

errores son errores de sintaxis SQL. El motor de base de datos Jet no puede

interpretar la sentencia SQL, ya que no tiene sentido. Estos a menudo surgen

de simples errores tipográficos u omisiones por lo que es importante, a tener

cuidado al escribir. Éstos son algunos ejemplos (NOTA: las flechas rojas son

mías - los mensajes no son de mucha ayuda!):

El tipo más común de error es la "falta operador". Normalmente se entiende el

término "operador" en el sentido de un símbolo matemático como =,> o <pero

cuando un mensaje de error de acceso SQL utiliza la expresión "falta un

operador", debe buscar algo al margen de la declaración. Podría ser un

Page 10: Pasar SQL A VBA.doc

operador matemático, pero también puede ser una palabra como AND y OR, o

tal vez una marca de comillas. Aquí la comilla simple antes de la palabra

Bruselas es lo que falta:

A veces los mensajes de error son más específicos y apuntan directamente a la

cláusula que está causando el error, la palabra " BY " ha sido omitido de la

cláusula ORDER BY de la instrucción SQL

Si escribes mal el nombre de una base de datos o de un objetos como una

tabla, o se refieren a que no existe, el motor de base de datos Jet no lo

reconocerá. Estos errores suelen ser bastante fácil de rastrear:

En realidad, no es un mensaje de error, sino una respuesta a un error en la

instrucción SQL. Si escribe el nombre de un campo de forma incorrecta, el

Page 11: Pasar SQL A VBA.doc

motor de base de datos Jet interpreta a veces el SQL como una consulta de

parámetros y muestra el cuadro de diálogo de parámetros conocidos. Aunque

esto puede parecer confuso al principio, por lo general es bastante fácil de

diagnosticar y corregir porque el nombre equivocado se muestra en el cuadro

de diálogo. Usted sólo tiene que encontrarlo en el código y corregirlo:

Mensajes de error en VBA

Cuando intenta ejecutar una instrucción SQL defectuosa en VBA por lo general

va a generar un error en tiempo de ejecución que resulta en un mensaje de

error de VBA como ésta:

Los mensajes de error se entregan en la forma habitual del uso de error de en

el cuadro de diálogo de mensaje de Visual Basic y no de forma explícita que el

problema se encuentra en la instrucción SQL, aunque esto suele ser evidente

en el propio mensaje. Al pulsar el botón de depuración le llevará a la línea de

código, pero esto puede no ser la instrucción SQL en sí. He aquí algunos

ejemplos:

Page 12: Pasar SQL A VBA.doc

En el ejemplo anterior el código falló cuando trató de aplicar la instrucción SQL

para una consulta almacenada. Acceso comprobar la instrucción SQL antes de

aplicar a la consulta y se encontró un error de sintaxis ("orden" debe ser

"ORDER BY") y destacó la línea de código que no se pudo ejecutar, en lugar

de la que contenía el error.

En el siguiente ejemplo, es evidente que hay un error ortográfico en alguna

parte, pero puede ser que tome un tiempo para buscar:

Aquí, el error reside en la falta de

ortografía de un nombre de tabla en la

cláusula SELECT de la instrucción

SQL pero el error no se plantea hasta

que el código trató de ejecutar la

consulta y la tabla especificada no se

pudo encontrar.

El siguiente ejemplo tiene que recibir el premio para el mensaje de error más

confuso que el acceso tiene que ofrecer!

Lo he visto en dos circunstancias diferentes. Se muestra si se produce un error

porque, en un procedimiento de VBA se ejecutar una consulta de parámetros -

o una consulta que pensaba que era una consulta de parámetros y así aparece

el cuadro de diálogo de parámetros (ver el ejemplo anterior, donde el nombre

del campo fue mal escrito) - y ha hecho clic en el parámetro de diálogo del

Page 13: Pasar SQL A VBA.doc

botón Cancelar. En circunstancias normales, que estaría bien, pero si como

resultado de su código falló, "Ha cancelado la operación anterior." se muestra

en el mensaje y, supongo, tiene sentido.

Pero este mensaje también aparece cuando existe un tipo diferente de error

cuando intenta utilizar una instrucción SQL de VBA en el que el tipo de datos

de un criterio de la cláusula Where no corresponde con el tipo de datos del

campo correspondiente. Por ejemplo, usted podría tener un campo de fecha y

el suministro de un tipo de datos de texto: WHERE

tblStaff.BirthDate='Tuesday’, en lugar de hacer coincidir los tipos de datos

correctamente: WHERE tblStaff.BirthDate=#09/27/1950#.

Incluir un control de errores de rutina

Por último, recuerde que una defectuosa instrucción SQL puede bloquear el

código VBA a fin de recordar y pruebe sus procedimientos a fondo y siempre

incluyen un control de errores de rutina.

Access y SQL

Parte 3: Algunos ejemplos prácticos

Éstos son algunos ejemplos de SQL llevando a cabo desde VBA. tutoriales

futuro de esta serie se ampliará en estas técnicas, y mostrarles más cosas que

puedes hacer con SQL en bases de datos de Access.

Usando DoCmd.RunSQL para ejecutar consultas de acción

El objeto DoCmd en VBA se puede utilizar para llevar a cabo una gran

cantidad de acciones diferentes, incluyendo uno llamado RunSQL. No se

puede ejecutar ningún tipo de instrucción SQL mediante el método RunSQL, es

específicamente para ejecutar el tipo de consultas que Access llamadas

"consultas de acción". Estas incluyen consultas de Eliminación (para eliminar

registros de una tabla), consultas de datos anexados (utilizado para agregar

registros a una tabla), consultas de actualización (para editar los registros en

una tabla) y consultas de Creación de tabla (utilizado para crear una nueva

tabla).

Trabajando desde la ventana de diseño de consulta de Access que se limitan a

los cuatro tipos de consulta descrito anteriormente, pero utilizando SQL en

relación con el VBA (o mediante la introducción de SQL directamente en la

vista SQL de la ventana de diseño de la consulta Access), puede lograr mucho

Page 14: Pasar SQL A VBA.doc

más, incluyendo el uso de "consultas de definición de datos", que se utilizan

para crear y modificar la estructura de la propia base de datos.

El método RunSQL le pide dos argumentos, la instrucción SQL en sí que debe

ser suministrado en forma de cadena (es decir, debe ir entre comillas) y el uso

de transacciones que es opcional:

El segundo argumento se refiere a procesamiento de transacciones y asume

cierto si lo omite. Cuando el procesamiento de transacciones se aplica a una

consulta, Access primero realiza un "simulacro" de la consulta durante el cual

se escribe todos los cambios en un archivo de registro temporal, pero no hacer

cambios permanentes en la base de datos. Si la consulta termina su tarea sin

ningún tipo de problemas, los cambios observados en el archivo de registro se

aplican y el trabajo (la operación) se completa. Sin embargo, si se encuentra

con problemas de acceso, mientras que la ejecución de la consulta, la

operación termina y el archivo de registro se descarta sin ningún tipo de

cambios realizados. Procesamiento de transacciones es muy útil para proteger

sus datos y se harán siempre, a menos que haya una razón especial para no

hacerlo.

Los ejercicios siguientes muestran algunas de las cosas que puede hacer.

Usted puede trabajar en una base de datos existente o crear uno nuevo.

Construir una nueva tabla

1. Abra una ventana de código VBA (Access 2000/2002: utilizar Alt + F11,

Access 97: ir a la pestaña Módulos y haga clic en Nuevo).

A los efectos de este ejercicio, se ejecutará el código directamente desde

la ventana Inmediato. Esta ventana le permite aplicar una instrucción de

código directamente escribiendo en la ventana (tiene que ser escrito

como una sola línea) y pulsa Intro.

2. Abra la ventana Inmediato presionando Ctrl + G. En 2000/2002 la

ventana de acceso inmediato aparecerá, generalmente acoplado al borde

inferior de la ventana Editor de Visual Basic. En Access 97 una nueva

Page 15: Pasar SQL A VBA.doc

ventana (la ventana de depuración) aparecerá, dividida horizontalmente

en dos secciones - el uso de la parte inferior de esta ventana.

3. Introduzca la siguiente línea de código en una sola línea, a continuación,

pulse Intro:

DoCmd.RunSQL "CREATE TABLE tblTest ([StaffID] COUNTER

CONSTRAINT ndxStaffID PRIMARY KEY, [FirstName] TEXT(25),

[LastName] TEXT(30), [BirthDate] DATETIME);"

 

4.-Cambie a la ventana de base de datos Access (pulsar F11) y pasar a la

ficha Tablas. (NOTA: si la ficha Tablas se mostraba ya, actualice la vista

por el cambio a una ficha diferente a continuación, volver a la ficha Tablas

de nuevo). Usted debe ver que una nueva tabla (tblTest) se ha creado.

Echa un vistazo a la tabla. Usted verá que contiene los cuatro campos

especificados en la instrucción SQL:

Póngala en vista de diseño y vea que los tipos de datos se especifican, con el

campo de texto de un tamaño especificado, y que el campo StaffID es un

campo Autonumérico y también el campo clave principal:

Si intenta ejecutar la misma línea de código de nuevo un error se produce

porque una tabla con el nombre especificado ya existe:

Page 16: Pasar SQL A VBA.doc

Un método para hacer frente a esta eventualidad se incluirá en un tutorial

posterior de esta serie.

Añadir registros a una tabla

Vamos a añadir algunos datos a la tabla. Cierre la tabla si está abierto, y

volver a la ventana Inmediato.

1. Introduzca la siguiente línea de código en una sola línea, a

continuación, pulse Intro (no dude en insertar su propio detalles!):

DoCmd.RunSQL "INSERT INTO tblTest ([FirstName], [LastName], [BirthDate])

VALUES ('Martin', 'Green', #09/27/1950#);"

1. Tenga en cuenta las comillas simples alrededor de los valores de texto

Martin y Green, y recordar que las comillas simples se utilizan aquí para

no entrar en conflicto con las comillas dobles que encierran la declaración

completa de SQL. Tenga en cuenta también que el valor de fecha está

rodeada por el signo (#) y que la fecha se presenta en formato EE.UU. (m

/ d / a).

2. Cambie a la ventana de base de datos Access y abra la tabla. Usted

podrá ver su nuevo disco. Debido a que el campo StaffID es un campo

Autonumérico su valor se asigna de forma automática. No es necesario

que se especifiquen en el código SQL.

Antes de que se ejecuta SQL, Access muestra un mensaje pidiendo permiso

para agregar un registro a la tabla. Esto es habitual cuando Access lleva a

cabo ninguna consulta de acción, y se puede suprimir con el código VBA si no

quiere que sus usuarios para verlo:

Page 17: Pasar SQL A VBA.doc

Si el usuario decide no agregar el registro se puede hacer clic en el botón No y

se cancela la acción sin mayores consecuencias, pero cuando esto ocurre

cuando la instrucción SQL se ejecuta desde VBA error se produce un:

Por lo tanto, si desea dar al usuario la opción de cancelar el registro, el código

tendrá que controlar el error cuando se presenta.

Agregar un campo a una tabla

SQL se puede utilizar para realizar cambios en la estructura de una tabla

existente. Los campos se pueden agregar, quitar o cambiar. Así es como

añadir un nuevo campo. Cierre la tabla si está abierto, y volver a la ventana

Inmediato.

1. Introduzca la siguiente línea de código en una sola línea, a

continuación, pulse Intro:

DoCmd.RunSQL "ALTER TABLE tblTest ADD COLUMN [Age] BYTE;"

1. Cambie a la ventana de base de datos Access y abra la tabla. Usted

verá un campo nuevo se ha agregado.

Si usted echa un vistazo a la vista de diseño de la tabla se verá que el SQL ha

asignado el tipo de datos byte a nuevo campo.

Page 18: Pasar SQL A VBA.doc

Modificar los registros existentes

Además de trabajar con la estructura de una tabla, SQL se puede utilizar para

modificar los datos existentes. Puede que haya utilizado un acceso Consulta

de actualización. En este ejemplo se utiliza el mismo método de VBA. Hemos

agregado un nuevo campo a la mesa, ahora podemos introducir algunos datos.

En primer lugar, un ejemplo de la actualización de los registros específicos

mediante la adición de una cláusula WHERE a la instrucción SQL:

1. Introduzca la siguiente línea de código en una sola línea en la ventana

Inmediato, a continuación, pulse Intro (sustitución de los criterios

apropiados para su Nombre y Apellido campos):

DoCmd.RunSQL "UPDATE tblTest SET [Age]=52 WHERE [FirstName]='Martin'

AND [LastName]='Green';"

En cuanto al agregar registros a la tabla, Access muestra un mensaje de

confirmación cuando los registros se va a actualizar. Recuerde que la

cancelación de la actualización se producirá un error en VBA.

Si usted no incluye una cláusula where de la instrucción SQL UPDATE

modificar todos los registros de la tabla. Esto puede ser apropiado si desea

aplicar el mismo valor a todos los registros, o si desea calcular un valor de

utilización de los datos existentes:

2. Introduzca la siguiente línea de código en una sola línea en la ventana

Inmediato, a continuación, pulse Intro:

DoCmd.RunSQL "UPDATE tblTest SET [Age]=Int((Date()-[BirthDate])/365.25);"

En lugar de aplicar un valor específico, esta sentencia SQL realiza un cálculo

en cada registro de la utilización del valor presente ya en el campo de fecha de

nacimiento y la fecha de acceso () para calcular la edad de cada persona:

Page 19: Pasar SQL A VBA.doc

NOTA: No es una práctica buena base de datos para almacenar los datos

calculados en una tabla que contiene los datos de los que se calculó. ¿Por

qué? Principalmente porque los desechos espaciales. Si usted sabe la fecha

de nacimiento de una persona puede calcular su edad en cualquier momento

mediante una consulta. Además, si almacena su edad como un número que no

se actualizará a medida que pasa el tiempo, por lo que finalmente se convertirá

incorrecta. Pero me he quedado atrapado por una idea así que me he

permitido una excepción a la regla!

Eliminar una tabla

Es tan fácil de borrar las cosas con SQL, ya que es crearlos. Los registros

pueden ser eliminados, al igual que los campos e incluso tablas enteras:

1. Introduzca la siguiente línea de código en una sola línea en la ventana

Inmediato, a continuación, pulse Intro:

DoCmd.RunSQL "DROP TABLE tblTest;"

Usted no verá ningún mensaje de advertencia, pero usted encontrará que la

tabla ha pasado (un poco demasiado fácil para la comodidad!). Puede que

tenga que actualizar la ventana de base de datos como se describió

anteriormente antes de la entrada de la tabla se quita.

Resumen

Estos ejemplos prácticos han demostrado cómo se puede manipular la

estructura de una base de datos y sus datos mediante la aplicación de

sentencias SQL con VBA, trabajando independientemente de la herramienta de

consulta de Access. Ellos muestran el potencial de trabajar directamente con

SQL de sus procedimientos de VBA para crear, modificar y rellenar las tablas

con facilidad.

He mostrado sólo algunos ejemplos de lo que se puede hacer. SQL Server es

capaz de mucho más. tutoriales futuro de esta serie explorarán usos prácticos

Page 20: Pasar SQL A VBA.doc

de estas técnicas, así como los usos más conocidos de SQL a los datos de

interrogar y el usuario disponga de la información.

¿Qué viene después?

El siguiente tutorial de esta serie muestra cómo puede crear y modificar

consultas "sobre la marcha", trabajando directamente con SQL de la consulta,

e incluye un proyecto práctico para construir una consulta de usos múltiples:

El acceso y la parte de SQL 4: Construyendo Consultas "On the Fly"