Pasar SQL A VBA.doc
-
Upload
luis-g-iturra-ruiz -
Category
Documents
-
view
227 -
download
7
Transcript of Pasar SQL A VBA.doc
![Page 1: Pasar SQL A VBA.doc](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/8.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/10.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/12.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/13.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/14.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/15.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/17.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/18.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/19.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022082413/55cf8f4c550346703b9aea89/html5/thumbnails/20.jpg)
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"