Beruflich Dokumente
Kultur Dokumente
CAPTULO 101
ndice de contenido
OBJETOS DE ACCESO A DATOS (I)................................................................................................2
OBJETOS DE ACCESO A DATOS: DAO Y ADO........................................................................2
DAO............................................................................................................................................2
Un poco de teora...................................................................................................................2
Registro de la librera DAO....................................................................................................4
Un poco de prctica................................................................................................................5
Base de datos actual...........................................................................................................5
Referencia al espacio de trabajo: Workspace....................................................................5
Referencia a las tablas.......................................................................................................7
Referencia a las consultas..................................................................................................9
Referencia a los campos..................................................................................................10
Otros objetos que existen y que no vamos a ver aqu......................................................12
ALGUNOS CDIGOS INTERESANTES SOBRE LO QUE HEMOS VISTO.................12
Creacin de una tabla.......................................................................................................13
Variacin sobre el tema...............................................................................................18
Creacin de una tabla: sistema rpido.............................................................................20
Creacin de una consulta.................................................................................................22
PARA FINALIZAR ESTE CAPTULO........................................................................................24
1
Vistame en http://siliconproject.com.ar/neckkito/
OBJETOS DE ACCESO A DATOS (I)
Vamos a ver en este captulo lo que se denominan objetos
de acceso a datos, que son DAO y ADO.
Para empezar este captulo vamos a realizar una cosa inicial muy simple:
1.- Vamos, en una nueva base de datos, a crear una tabla, que llamaremos TTrabajadores.
Incluiremos dos campos, de la siguiente manera:
Tenemos dos modelos de objetos de acceso a datos: DAO y ADO. Vamos a ver en qu
consisten:
DAO
Un poco de teora
Vamos con un poco de teora, para aquellos a los que les guste esto de fardar de siglas en
conversaciones sobre Access (pronto entenderis por qu digo esto de las siglas... ji, ji...) La
biblioteca de objetos DAO (Data Access Objects) se enmarca en lo que podramos denominar
dos bloques, a los que se les suele llamar espacios de trabajo.
Pensad en todo momento que la idea es acceder a datos, ya sea en una base de datos local o
una base de datos remota. Y claro, cuando empezamos a hablar de estas cosas aparece no
2
Vistame en http://siliconproject.com.ar/neckkito/
slo la figura de Access, sino que tambin se suman a la fiesta diferentes sistemas gestores de
bases de datos.
<<Puede utilizar la Conectividad abierta de base de datos de orgenes de datos (ODBC) para
tener acceso a datos desde una gran variedad de sistemas de administracin de bases de datos. Por
ejemplo, si tiene un programa que obtiene acceso a los datos de una base de datos de SQL,
Orgenes de datos (ODBC) le permitir usar el mismo programa para tener acceso a los datos de
una base de datos de Visual FoxPro. Para ello, debe agregar componentes de software al sistema,
llamados controladores. Orgenes de datos (ODBC) le ayuda a agregar y a configurar estos
controladores.>>
En definitiva, este espacio de trabajo estara recomendado para ejecutar consultas, ejecutar
procedimientos (Sub) o funciones (Function) almacenados o funciones especficas de ODBC en
un servidor remoto.
Existe lo que se denomina una Jerarqua de los objetos DAO, donde se puede apreciar la
estructura de este modelo DAO. No entraremos en sus detalles (porque eso s que sera teora
pura y dura). Slo nos vamos a quedar con un par de ideas:
Existe un padre del que penden el resto de elementos. Es el objeto DBEngine. Este
objeto es nico (no puede haber varios).
Bajo DBEngine encontramos dos objetos: Error y Workspace)
Bajo DBEngine podemos encontrar toda una serie de colecciones, que a su vez incluyen
todos los objetos de la coleccin
Existe una coleccin que se denomina Properties (menos los objetos Error). Estas
colecciones Properties se refieren a todos los objetos DAO.
Podemos encontrar propiedades y mtodos en los objetos DAO
Como veis, la cosa es un poco confusa porque estos trminos se entrecruzan, y resulta un
poco difcil explicarlo (y que conste que intento hacerlo lo mejor posible!).
Vamos a ver un ejemplo: vamos a manipular un mtodo de un objeto DAO. El objeto ser
DBEngine, y el mtodo ser CompactDatabase (no hace falta que os diga qu significa eso).
Una vez tenemos claro qu es cada cosa podemos escribir:
Private Sub...
DBEngine.CompactDatabase c:\MisBDs\miSuperBD.accdb
3
Vistame en http://siliconproject.com.ar/neckkito/
End Sub
.
Private Sub...
MsgBox Mi versin del motor Microsoft Jet es &
DBEngine.Version
End Sub
La manita con la tarjeta (por llamarlo de una manera) indica que nos estamos refiriendo a
una propiedad; la goma de borrar que corre (tambin por llamarlo de alguna manera) nos
indica que estamos ante un mtodo2.
Para ello, en el editor de VB, debemos irnos a Men Herramientas Referencias... y buscar la
referencia Microsoft DAO 3.6 Object Library. Marcamos el check y aceptamos. Ya tenemos as
la biblioteca registrada.
Si en el peor de los casos no nos apareciera esta referencia deberamos buscarla en nuestro PC
(o bajrnosla de Internet y aadirla a nuestro sistema). El archivo se llama DAO360.dll.
Usualmente suele estar en <C:\Archivos de programa\ Archivos comunes\Microsoft
Shared\DAO>
Si tenemos ganas de leer podemos acudir al archivo DAO360.chm, que es el archivo de ayuda
de esta librera. Su ubicacin depende de nuestra versin de Office, pero en mi caso est en la
direccin <C:\Archivos de programa\Archivos comunes\Microsoft Shared\OFFICE12\3082>
2 No es objetivo de este curso explicar todas las propiedades y todos los mtodos de todas las colecciones. Si estis
interesados en algn elemento en particular os recomiendo que en el editor de VB escribis, con esta ayuda
contextual, el que os interese y, una vez escrito, os situis sobre lo escrito (o lo seleccionis todo). Tras eso pulsad
F1 y la ayuda de Access os dar una explicacin de lo que es, lo que puede hacer y, con suerte, os mostrar un
ejemplo. Yo slo os explicar los que, a mi criterio, pienso que os podran ser ms tiles.
4
Vistame en http://siliconproject.com.ar/neckkito/
Un poco de prctica
o tambin
Al acabar nuestro cdigo es buena idea cerrar la conexin y liberar memoria. Esto se hace de
la siguiente manera:
dbs.Close
Set dbs = Nothing
Si ejecutamos el cdigo veremos como dbs nos devuelve, a travs de un MsgBox, la ruta,
nombre y extensin de la base de datos.
Vamos a ver cmo saber cmo se llama nuestro Workspace (no os ilusionis, puesto que la
respuesta puede ser un poco decepcionante).
5
Vistame en http://siliconproject.com.ar/neckkito/
Dim miWrk As String
Set wrk = DBEngine.Workspaces(0)
miWrk = wrk.Name
MsgBox "Mi espacio de trabajo se llama: " & miWrk,
vbInformation, "WORKSPACE"
End Sub
Lo que vamos a hacer es abrir la BD Workspace en un nuevo espacio de trabajo activo, al que
llamaremos SuperYo, situando dicha base en modo de apertura exclusivo (con lo que
bloquearemos su acceso a otros hipotticos usuarios). Tened en cuenta que cuando digo
abrir no estoy diciendo que se nos va a abrir la BD Workspace en pantalla, sino que se va a
abrir inmaterialmente (por llamarlo algo). De esta manera podemos acceder en silencio a la
nueva BD, operar sobre ella para lo que necesitemos y cerrarla.
Pondremos un pequeo MsgBox para que nos informe sobre qu Workspace y sobre qu BD
estamos operando en ese momento.
El cdigo sera:
An no tenemos suficientes conocimientos para poder operar sobre esa BD a distancia, pero
ms adelante vamos a reutilizar este cdigo para poder manipular la BD Workspace.mdb
Tened en cuenta que el anterior cdigo lo que hace son dos cosas:
Podramos decir, hablando muy en general, que los Workspaces nos permiten administrar la
BD. Es un tema un tanto complejo y quizs, a nuestro nivel, poco til. El cdigo anterior utiliza
un Workspace de manera puntual, sin aadirlo a la coleccin de Workspaces de la BD en la que
6
Vistame en http://siliconproject.com.ar/neckkito/
estamos operando. Si alguien est interesado en profundizar sobre este elemento debe hacer
lo siguiente:
Aprovecho para comentaros que podemos abrir una BD a distancia utilizando el Workspace
actual, sin usar uno adicional. De hecho, ni siquiera tenemos que hacer referencia al
Workspace. Para hacer lo anterior simplemente nuestro cdigo podra ser:
Por ejemplo, para saber cuntas tablas tengo en mi base de datos podramos utilizar este
cdigo:
Cuando creamos una BD nueva automticamentese nos crean lo que se denominan Objetos
del sistema. Es decir, que se nos crean, usualmente, 9 tablas que contienen informacin sobre
el sistema. Estas tablas son manipulables a travs de cdigo. Si, nos situamos sobre el panel
de exploracin (Access 2007) y hacemos click con el botn derecho del ratn Opciones de
exploracin, y marcamos el check Mostrar objetos del sistema, veremos como nos aparecen
nuestras tablas de sistema.
7
Vistame en http://siliconproject.com.ar/neckkito/
Se caracterizan porque su nombre empieza por MSys.
Fijaos que hemos hecho: For i = 0 Por qu cero? Porque los miembros de una coleccin
empiezan siempre su numeracin por cero, y por ello debemos empezar por dicho nmero.
Como consecuencia, en el conteo total debemos restar una unidad, de ah lo de
For i = 0 To dbs.TableDefs.Count - 1
Ahora os pido que abris vuestra mente y recordis lo que hemos visto en captulos
anteriores. En realidad, si os sirve de gua, el fondo del asunto es que disponemos de un
conjunto de piezas de un mecano y debemos organizarlas a nuestra manera. Por qu digo
esto? Porque el cdigo anterior nos muestra todas las tablas de nuestra BD (las nuestras y las
del sistema), lo cual es un autntico rollo.
Mi pregunta es: a alguien se le ocurre cmo podemos arreglar esto? Os aseguro que ya
sabis hacerlo...
8
Vistame en http://siliconproject.com.ar/neckkito/
Pero, antes de que alguien me diga: Y despus referencia a los formularios, a los informes...
os dir que, si repasamos la definicin del modelo, veremos que estamos hablando de acceso
a objetos que contienen datos, como son las tablas y consultas. Los formularios y los informes
son una interface para mostrarlos, y, por tanto, no entran. Hay otros sistemas para acceder a
este tipo de objetos (que ya veremos en captulos posteriores).
Siguiendo con nuestro hilo explicativo, para acceder a consultas utilizamos la coleccin
Querydefs
Vamos a crear, en nuestra BD, una consulta, que llamaremos CTrabajadores. Creamos pues
una simple consulta de seleccin sobre los datos de TTrabajadores.
Pues la otra est en el formulario FTrabajadores. Recordamos que creamos este formulario
basado en la tabla TTrabajadores? En realidad es como si el formulario consultara los datos
de TTrabajadores a travs de una consulta, y la coleccin Querydefs entiende que eso es
tambin una consulta.
9
Vistame en http://siliconproject.com.ar/neckkito/
i = dbs.QueryDefs.Count
For j = 0 To dbs.QueryDefs.Count - 1
If Left(dbs.QueryDefs(j).Name, 1) = "~" Then
i=i-1
End If
Next j
MsgBox "Tenemos " & i & " consultas en la BD",
vbInformation, "CONSULTAS"
dbs.Close
Set dbs = Nothing
End Sub
Un par de comentarios:
Como hablamos de una coleccin recordad que la numeracin debe empezar por cero
hasta el recuento de elementos de la coleccin menos uno:
(For j = 0 To dbs.QueryDefs.Count 1)
Hemos echado mano a una variable auxiliar, j, para el bucle For...Next, ya que la
variable i estaba cumpliendo otra misin.
Hemos utilizado el mismo sistema de descarte que en el epgrafe anterior, solo que
filtrando por la primera letra de la consulta.
Si hubiramos creado un informe tambin nos lo hubiera contado, porque, como sabemos, un
informe basado en una tabla o consulta tiene su origen, desde este punto de vista, en una
consulta sobre dicha tabla o consulta. En este caso el nombre que le hubiera asignado,
suponiendo que hubiramos creado el informe RTrabajadores, sera: ~sq_rRTrabajadores
Finalmente, el cdigo para saber los nombres de las consultas (eliminando las consultas de
formularios e informes) sera el siguiente:
10
Vistame en http://siliconproject.com.ar/neckkito/
Una relacin
Una consulta
Una relacin de registros
Un ndice
Por ejemplo, vamos a escribir un cdigo que nos diga los nombres
de los campos de nuestra tabla TTrabajadores. El cdigo sera:
Private Sub...
Voy a trabajar con una base de datos
Voy a trabajar con las tablas
Voy a trabajar con los campos
La base de datos es la que tengo abierta actualmente
La tabla es TTrabajadores
Para cada campo de los campos de la tabla TTrabajadores...
etc.
End sub
Cuando vamos a operar con las propiedades de los campos es como si abriramos la tabla en
vista diseo y, al situarnos sobre uno de los campos, manipulramos manualmente las
propiedades (algunas ms otras extras).
Voy a comentar unas pocas (no todas) para que podamos ver las equivalencias:
11
Vistame en http://siliconproject.com.ar/neckkito/
Regla de validacin ValidationRule
Sin embargo creo necesario, como mnimo, comentarlos. De esta manera sabremos que
existen y, gracias a nuestro fantstico F1, podremos buscar ms informacin sobre ellos.
Parameter
Index
Relation
Container
Document
User
Group
Property
Los cdigos los voy a comentar para que sepis en todo momento qu es lo que estn
haciendo. No tomis estos ejemplos como bloques inamovibles de cdigo, sino que vedlos
como pequeos cdigos que unimos para conseguir un efecto mayor. Es decir, que una
12
Vistame en http://siliconproject.com.ar/neckkito/
parte del cdigo, si le vemos su utilidad, podra ser aplicada en otra situacin para sacarnos de
un aprieto (sin necesidad de tener que coger todas las lneas de cdigo). Evidentemente lo
anterior es un consejo de estudio.
Creo la tabla
Importo el Excel
Trabajo con la tabla
Borro la tabla
Ante todo, debemos tener una tabla de caractersticas similares al Excel que vamos a importar.
Supongamos que tenemos un Excel llamado ExcelTrabajos.xls con los siguientes datos:
Fijaos que la columna <Trabajador> nos est proporcionando el DNI del trabajador.
Pues manos a la obra. La primera fase del cdigo sera as (ojo, que no est acabado an):
13
Vistame en http://siliconproject.com.ar/neckkito/
Dim tbl As DAO.TableDef
Dim fld As DAO.Field
'Definimos la variable dbs
Set dbs = CurrentDb
'-----FASE 1: ELIMINACION DE LA TABLA
'Primero debemos examinar si la tabla existe. Si
intentamos crearla
'y la tabla existe nos dar error de cdigo. En teora la
habremos
'eliminado, pero por si acaso...
For i = 0 To dbs.TableDefs.Count - 1
If dbs.TableDefs(i).Name = nomTbl Then
dbs.TableDefs.Delete nomTbl
Exit For
End If
Next i
'-----FASE 2: CREAMOS LA TABLA
'La creamos como un nuevo objeto y despus le asignamos el nombre
Set tbl = New DAO.TableDef
tbl.Name = nomTbl
'La tabla est creada ahora, pero no se muestra an en la BD. Antes
'debemos crear los campos.
'-----FASE 3: CREAMOS LOS CAMPOS
'Creamos los campos como nuevos elementos de la tabla, a la vez que
'definimos las propiedades que nos interesan
Set fld = New DAO.Field
With fld
.Name = "Num"
.Type = dbLong 'Entero largo
End With
'Incluimos el campo creado en la tabla
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Trabajador"
.Type = dbLong
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Trabajo"
.Type = dbText 'Texto
.Size = 50
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Fecha"
.Type = dbDate
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Coste"
.Type = dbCurrency 'Moneda
End With
14
Vistame en http://siliconproject.com.ar/neckkito/
tbl.Fields.Append fld
'-----FASE 4: AADIMOS LA TABLA A LA BD ACTUAL
dbs.TableDefs.Append tbl
'-----FASE 5: IMPORTAMOS LOS DATOS DEL EXCEL
'Definimos la ruta donde est el Excel. En este caso lo
tenemos
'situado en el mismo directorio de la BD
miExcel = Application.CurrentProject.Path 'Nos da la ruta
del directorio
miExcel = miExcel & "\ExcelTrabajos.xls" 'Nos da la
ruta+archivo+extensin
'Importamos el Excel a la tabla recin creada
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, nomTbl, miExcel, True
'Cerramos conexiones y liberamos memoria
dbs.Close
Set fld = Nothing
Set tbl = Nothing
Set dbs = Nothing
End Sub
Fase 1: con lo visto, no deberamos tener ningn problema para entender esta fase. Debemos
quedarnos con la idea de que si el objeto tabla ya existe nos dar un error de cdigo. Para ello
se hace imprescindible verificar que no existe y, si existe, borrarlo.
La sentencia que borra la tabla es, evidentemente: dbs.TableDefs.Delete nomTbl
Si ya ha encontrado la tabla no tiene sentido seguir ejecutando el bucle. Por eso le
indicamos que salga de l a travs de: Exit For
FASE 2: Con esta fase creamos la tabla de manera inmaterial, por decirlo de alguna manera.
Si no lo hiciramos as, dnde crearamos los campos?
FASE 3: Creamos los campos. En el cdigo hemos creado los campos con los atributos
indispensables. Os recuerdo que podemos establecer ms propiedades a travs de las
propiedades que os mostraba en la tabla de equivalencias unas pginas antes.
Muy bien... Ya tenemos nuestra BD creada. Sigamos con el supuesto. Imaginemos que el jefe
quiere hacer un seguimiento de un trabajador en concreto. Qu hacemos? Pues como
tenemos nuestra tabla TTrabajos creada (porque habremos ejecutado el proceso al menos una
vez) lo que vamos a hacer es una consulta parametrizada sobre esa tabla, que llamaremos
CParaElJefe. La consulta ser simplemente la siguiente:
15
Vistame en http://siliconproject.com.ar/neckkito/
Ojo! La relacin entre los campos [DNI] y [Trabajador] la deberemos realizar manualmente.
Y como la informacin es para el jefe vamos a realizar un informe sobre dicha consulta, que
llamaremos RParaElJefe.
Mi informe me ha quedado as. Destacar (si hay algo que destacar) el campo calculado en el
pie del informe.
OK. Ahora ya podemos continuar con nuestro cdigo. Para que os ubiquis contino a partir de
la FASE 5
16
Vistame en http://siliconproject.com.ar/neckkito/
DoCmd.OpenReport "RParaElJefe"
'-----FASE 7: BORRAMOS LA TABLA CON LOS DATOS
dbs.TableDefs.Delete nomTbl
'Cerramos conexiones y liberamos memoria
dbs.Close
Set fld = Nothing
Set tbl = Nothing
Set dbs = Nothing
End Sub
Si ejecutamos el proceso una vez (como lo sera en un uso normal de la BD) veremos que el
informe se enva correctamente a la impresora. Pero, qu hemos conseguido?
Pues que si por casualidad algn trabajador listillo se salta los bloqueos de la BD (o,
simplemente, no hemos asegurado nuestra BD) y ve que hay un informe para el jefe, si
intenta abrirlo pues... su gozo en un pozo. Intentad abrir ese informe (o la consulta de
origen) a ver qu obtenis (dando por supuesto que habis ejecutado el cdigo y que la tabla
TTrabajos se ha borrado, claro)... je, je...
17
Vistame en http://siliconproject.com.ar/neckkito/
.Type = dbLong 'Entero largo
End With
'Incluimos el campo creado en la tabla
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Trabajador"
.Type = dbLong
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Trabajo"
.Type = dbText 'Texto
.Size = 50
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Fecha"
.Type = dbDate
End With
tbl.Fields.Append fld
Set fld = New DAO.Field
With fld
.Name = "Coste"
.Type = dbCurrency 'Moneda
End With
tbl.Fields.Append fld
'-----FASE 4: AADIMOS LA TABLA A LA BD ACTUAL
dbs.TableDefs.Append tbl
'-----FASE 5: IMPORTAMOS LOS DATOS DEL EXCEL
'Definimos la ruta donde est el Excel. En este caso lo tenemos
'situado en el mismo directorio de la BD
miExcel = Application.CurrentProject.Path 'Nos da la ruta del directorio
miExcel = miExcel & "\ExcelTrabajos.xls" 'Nos da la ruta+archivo+extensin
'Importamos el Excel a la tabla recin creada
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, nomTbl, miExcel, True
'-----FASE 6: LANZAMOS EL INFORME DIRECTAMENTE A LA IMPRESORA
DoCmd.OpenReport "RParaElJefe"
'-----FASE 7: BORRAMOS LA TABLA CON LOS DATOS
dbs.TableDefs.Delete nomTbl
'Cerramos conexiones y liberamos memoria
dbs.Close
Set fld = Nothing
Set tbl = Nothing
Set dbs = Nothing
End Sub
...
18
Vistame en http://siliconproject.com.ar/neckkito/
Qu pasa?
Pues lo que haremos ser dividir la ejecucin del cdigo en dos partes. La primera ser hasta
que se muestre el informe en vista previa. As, utilizaramos todo el cdigo anterior pero lo
finalizaramos de la siguiente manera:
Ahora vamos a por la segunda parte. Necesitamos un evento que deba producirse
obligatoriamente para asegurarnos que borramos la tabla. El problema que nos encontramos
es que no podemos operar sobre el informe directamente porque la tabla que queremos borrar
es, precisamente, su origen de datos, y obtendramos el error 3211 que antes comentbamos.
19
Vistame en http://siliconproject.com.ar/neckkito/
Fijaos que en este cdigo hemos utilizado otro sistema para identificar la tabla: no hemos
definido la variable tbl como un DAO.TableDef, sino que lo hemos definido como un objeto de
la base de datos. El proceso ha sido:
Lo definimos como objeto: Dim tbl As Object
Le decimos que ese objeto es una tabla:
CurrentData.AllTables
Miramos si existe a travs del bloque FOR EACH...NEXT e
IF...END IF
Si existe lo borramos a travs de nuestro amigo DoCmd,
con la siguiente estructura:
DoCmd.DeleteObject acTipoObjeto, nombreObjeto
Como no vamos a operar sobre las propiedades de la tabla no tiene sentido crear referencias a
DAO, borrar la tabla y despus tener que cerrar conexiones y liberar memoria. Este sistema
que acabamos de aprender es bastante ms prctico si no necesitamos operar sobre
elementos de la tabla.
Supongamos que queremos crear una tabla temporal por los motivos que sean. En nuestro
caso, la tabla ser para guardar los trabajos de un proyecto especial que se repite
espordicamente, pero no nos interesa guardar los datos de manera permanente en la BD.
20
Vistame en http://siliconproject.com.ar/neckkito/
dbs.TableDefs.Append tbl
'Cerramos conexiones y liberamos memoria
dbs.Close
Set fld = Nothing
Set tbl = Nothing
Set dbs = Nothing
End Sub
Importante: tened en cuenta que a veces Access tarda en refrescar la informacin en el panel
de exploracin. Eso significa que quiz no veis la tabla, pero est ah. Una manera rpida de
comprobarlo es empezar a crear una consulta en vista diseo, y veremos las tablas que hay
disponibles (cancelamos la creacin de la consulta, a no ser que la necesitemos). Cuando
menos lo esperemos nuestra tabla aparecer en el panel por arte de magia.
Vamos a ejecutar un cdigo que, adems, nos servir para el epgrafe siguiente. Vamos a
aadir un campo a la tabla TTrabajadores, que nos informar del sexo del trabajador.
21
Vistame en http://siliconproject.com.ar/neckkito/
Next fld
'Si no hay campo (es decir, hayCampo es False) lo aadimos
'con el sistema que hemos acabado de aprender
If hayCampo = False Then
With tbl
.Fields.Append .CreateField("Sexo", dbText, 6)
End With
End If
'Cerramos conexiones y liberamos memoria
dbs.Close
Set fld = Nothing
Set tbl = Nothing
Set dbs = Nothing
End Sub
Destacar una idea nueva que aparece en este cdigo: nos hemos servido, en primer trmino,
de una variable booleana para, primero, definirla con un valor predeterminado y, segundo,
cambiarle ese valor si se cumple una condicin (el campo ya existe). Y, en segundo trmino,
realizar una serie de acciones en funcin de lo que devuelva la booleana. Si queris un consejo
yo tomara nota de este recurso, porque en ocasiones no se puede ejecutar el cdigo
directamente sin haber evaluado antes una condicin, y las variables booleanas se prestan
mucho a facilitarnos el trabajo si fuera el caso.
Para acabar este epgrafe os dir que si lo que quisiramos es lo contrario, es decir, eliminar un
campo que ya existe en la tabla, el cdigo sera:
22
Vistame en http://siliconproject.com.ar/neckkito/
muy fciles), porque ahora interesa centrarnos en la creacin de consultas.
Al igual que hacamos con las tablas, debemos comprobar que la consulta no existe y, si
existe, borrarla. As nos evitaremos errores de cdigo
Definimos la SQL a travs de una variable de tipo String
Creamos la SQL a travs de la propia definicin de la consulta, utilizando
CreateQueryDef, con dos argumentos separados por comas: el nombre de la consulta y
la SQL
Set qry = dbs.CreateQueryDef("CTempSexo", miSql)
Recordad que es posible que no veamos inmediatamente la consulta en el panel de
exploracin por tardanza en el refresco de la informacin.
23
Vistame en http://siliconproject.com.ar/neckkito/
inicio para eliminar todo aquello que no nos interese que quede como objeto en la base de
datos. Imaginaos que creamos varias consultas en tiempo de ejecucin. Hay que hacer una
lista de todas ellas para borrarlas?
Pues no: podemos decirle al cdigo que borre slo las que
comienzan por CTemp. As, el cdigo en el evento Al abrir
de nuestro formulario de inicio (o el que nosotros elijamos
para tal accin) sera:
Fijaos que esta vez no utilizamos el Exit For, dado que necesitamos que el cdigo recorra todas
las consultas porque puede haber ms de una consulta que empiece por CTemp
Sin embargo, no hemos acabado con DAO todava. En el prximo captulo entraremos en lo
que se conoce con el nombre de... Recordset.
To be continued...
24
Vistame en http://siliconproject.com.ar/neckkito/