Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
÷ (los más recientes abajo)
xara copiar/duplicar la estructura de una tabla en una base de datos Access, sigue
estos pasos:
Ya está la tabla "duplicada" en la misma base de datos, por si haces cambios de los
que después te arrepientas.
Si la intención es copiarla en otra base de datos, antes de seguir con el paso , cargar
o crear la nueva base de datos y ya está. En el paso 6 puedes seleccionar "Estructura y
Datos" si quieres copiar también los datos.
×
·
tabla
nombre_campo = 'nuevo_valor'
opciones_a_tener_en_cuenta
·
÷lientes
Agente = 'LIBRE'
[ÚltimaVisita] <
DateValue('01/01/96')
3 ÷
Si al crear las tablas de la base de datos usas caracteres acentuados, eñes, espacios,
etc. ÷uando hagas una consulta o lo uses en un Recordset, etc, ponlos entre corchetes,
fijates en cómo se usa ÚltimaVisita en el ejemplo anterior.
a
xara ejecutar una orden SQL en una base de datos, usar la orden Execute en la
variable de una base de datos (Database)
l
l
l
l
l
!"
# "$ %
&
'( )
*+" )
$
,$
-./ (-
'(
½
Se creará un Recordset con el resultado de una consulta SQL realizada a uan base de
datos, posteriormente se procesarán los datos que ha producido dicha consulta.
xor ejemplo si tenemos una base de datos con nuestra colección discográfica,
podríamos hacer una consulta con todos los ÷D's de xhil ÷ollins
Suponiendo que el formato de los discos (÷D, Lx, etc.) es Formato y el Nombre del
Autor está en ÷antante, la orden a ejecutar sería:
SQLTmp = "SELE÷T * FRM mis_discos WHERE Formato Like '*÷D*' AND ÷antante
Like '*xhil ÷ollins*'"
xor supuesto se puede usar = en lugar de Like, si estamos seguros de que no
necesitamos los comodines, ya que la consulta es "bastante" más rápida. Es decir
quedaría así:
SQLTmp = "SELE÷T * FRM mis_discos WHERE Formato = '÷D' AND ÷antante = 'xhil
÷ollins'"
l ,$
$
$
l
l
l
l
+
*0 !$
$1( - -2/3-
0
-/($
*0
#!$
%
)
4
*0 #*.&
'( )
4
l)0
%.
*+")0
5$$
$65
$($
%
-./ (- 7
%89%
"
'(
l:
;#/
*0 #*.&
<*0 # &
l= $
###
l
;#
*0 #*."
*0 #/
ë
Además de evitar el error, es más rápido que usar If...Then... para comprobar si el
campo es nulo o está vacío.
xara cadenas:
/
- A/
xara números:
G ÷
Esto puede ser útil si el programa tiene que acceder a una base de datos en red o bien
si accedes en el mismo equipo a una base de datos.
Lo que hay que hacer es usar EditMode y comprobar si se está editando.
Veamos un ejemplo:
)
;#!$
l $ $?
+ $ +
%$#
l###
)#
*
'= +
.
l/
+5B%50 ###
#
l###)$ $ + ###
#<
)
#
'= +
$#
):
+ $
C
0 + $
.B(( #
^
xara asignar a un Data (Recordset) los datos que quieras de una tabla, usa la
propiedad Recordsource.
Fijate que xoblación está entre corchetes, esto es necesario, porque la ó (o acentuada)
es un caracter "extraño" y se debe poner entre corchetes para que el Jet lo entienda.
Lo mismo hay que hacer si el nombre del campo incluye espacios.
tra cosa a tener en cuenta es que si usas =, el contenido del campo "debe coincidir
exactamente", si en xrovincia tienes algo como: Málaga (Andalucía), no lo
"encontrará". xara que lo incluya también, cambia el signo igual por LIKE:
Más cosas, en la parte RDER BY, se pueden incluir más de un campo, separados por
comas.
El asterisco (*) que hay después de SELE÷T, es para que incluya todos los campos de
la tabla.
Si sólo quieres incluir algunos campos, especificalos en lugar del asterisco y separalos
con comas:
Este es el código que uso para compactar las bases de datos. ÷osa que suelo hacer
bastante a menudo, sobre todo en las que uso en la empresa, que cambian a diario.
xor aquello de la seguridad, mantengo dos copias: la anterior y la última. Más vale
prevenir. Nunca se sabe cuando se cortará la luz o se quedará colgado el equipo... así
que, me curo en salud.
-G
H#
'(
E
)I
'(
E-G
;#
)I-G
;#
l
$
%
. %
$?
$ #
/$
%
%
+ )%
H4
lJ
$
$
-G
;#
l 0$$
%B5+
l ($)
'(
E-1#
)I-1#
{ ÷
(18/Abr)
H4
l
/
%
+ )%
H4
l
l$
H4 $0
%+ )$
HM
l N$
AAA
l
l=
#/
(
l$ $
$
&
#/ &
'
%
+
l) .+
$
%$#
&
#
'$ &
<
&
&"
&
#&
#
&
l
$
&
#/ &
&$)%
#&
#
&
&
#/ &
%
"%HMM
#&
#
&
&
#/ &
$ $%
*
#&
#
&
&
#/ &
&$)'$%
#&
#
&
&
#/ &
&$) %
#&
#
&
&
#/ &
%
'+
#&
#
&
l/ B
$$'
'
"#= 0I0
'
"#<5
'
"#= 0
'
"#&
'
#'
"#
'
"
l:
#
(#
l
l/ $
#/
($
l $'
%$
%$#
&
#/ &
'
%
+
&
#
'$ &
<
&
&"
&
#&
#
&
l
$
&
#/ &
&$)%
#&
#
&
&
#/ &
%
"%M4
#&
#
&
&
#/ &
%
"%HMM
#&
#
&
&
#/ &
*
%
"%HMM
#&
#
&
&
#/ &
$7$%
"%HMM
#&
#
&
&
#/ &
$ $%
*
#&
#
&
&
#/ &
%
+ 0
#&
#
&
l/ B
$$'
'
")+l ( $
'
"#= 0I0
'
"#<5
'
"#= 0
'
"#&
'
#'
"#
'
"
l:
+
#
(#
l/
#/
*+".
--$
#%.'(
En este ejemplo, uso un recordset para hacer la búsqueda, el único requisito es que
tenga un campo llamado ID, que será el que se devuelva con el dato encontrado.
La rutina acepta búsquedas hacia delante y hacia atrás, para buscar hacia atrás la
variable buscAtras será True.
Se supone que además tienes una variable (Db) con la base de datos que estás
usando.
Aquí tienes el código...
&&
'(+$ $ %$&&$$ R$&&$ %$
3
$&&$'
)
$ E$
'($ )
$ &&
l$/&&/
S 05
;$
-$ -###
.
l<
$
5'
$ ";/ $#
&
-'I l-
$ -1l
'(5'
)
;#!$
#&
& '
-/ 5'
'(
;#!$
#*$))
5'
4-
'(
'(
'(5'
4-)
*+"))
$
$
-";/ $#
&
%.IR.'( %
$
{ë
(17/Sep)
Aquí te muestro como saber las tablas que existen en una base de datos. De esta
forma puedes buscar si la que necesitas está en la base especificada o bien puedes
usarla para abrir "cualquier" tabla de una BD.
Las rutinas sirven igual para VB3 (ejemplo aparte) y VB o superior.
xara probar esta rutina, en un form, añade un ListBox (List1) y un botón que al
pulsarlo llame a EnumerarTablas, deberás cambiar la localización de la base de datos
por la que sea en tu equipo...
l , 9
= .
(
;#/
FF#*
& $)
'
#
(
l ?$ +/ !%
l
'(
# 4)
;#
'
#
'(
"
#/
)+
l= L9N
(
= .
' )
;#/
FF#*
'
#
'#*.&
<'# &
'(' 4)
;#
Si lo que quieres es sólo comprobar si existe, en lugar de añadirla a un list, haces una
comparación:
'(
#)
"
'(
{G ·
ë a
× (10/Nov/00)
Si has leido el artículo sobre el acceso a bases de datos de Access 2000 usando el DA
Datacontrol (Acceder a bases de datos de Access 2000 con el VB5), verías que había
un comentario sobre que no se puede usar ese control para acceder al nuevo formato
de las bases de datos de Access 2000...
Eso es cierto para el VB5 y para el ë a, ya que el DA Datacontrol que se
incluye con la nueva "revisión" del VB6 reconoce dicho formato, además de que
carga de forma automática la
3 ë
×.
xero puedes llevarte una sorpresa si, (a pesar de indicar en las referencias que se use
el nuevo motor de bases de datos 3.6), el VB te avisa de que no hay datos que
mostrar...
Esto es cierto si lo que estás probando es un proyecto que ya tuvieras hecho
anteriormente, ya que con los nuevos proyectos no hay problemas... la razón es que,
(si miras con un editor de textos el contenido de un formulario de VB), lo que se
asigna a la propiedad ÷ , para un control existente, es diferente del que se
asigna para uno nuevo... con lo cual, si quieres que tus proyectos pre-Sx funcionen
sin problemas y sin tener que quitar el control existente y añadirlo de nuevo, (que
sería la forma lógica de hacerlo), simplemente tendrás que cambiar la asignación que
se le hace a dicha propiedad:
..8% =9
DDDDDD
+#
;
/
;
/$$$H444T
+.8 =L###
DDDDDDDD
+#
;
/
;
/$$$
Espero que este "truquillo" te alivie algún que otro quebradero de cabeza...
Nos vemos
Guillermo
÷
Si quieres linkar con las otras entregas, desde el índice lo puedes hacer
÷onfío en que no acabes tarumba con tantas vueltas que estoy dando... la entrega
anterior fue sobre las clases en Visual Basic y esta que te ofrezco ahora sigue los pasos
de la entrega 36 sobre el acceso a bases de datos, aunque en esta ocasión sin usar el
data control y con DA. En otra entrega, veremos lo mismo, pero usando AD... hasta
que finalmente nos quedemos con ese tipo de acceso a datos, ya que Microsoft no
"quiere" que sigamos usando DA y lo trata como obsoleto, aunque no lo es tanto...
pero como hay que está a la última en esto de programación, habrá que hacerles
caso... así que también ve preparando el cuerpo, ya que a partir del 2002 la "nueva
ola" será .NET y habrá que ir "concienciándose" de la nueva tecnología... pero no te
preocupes que también podrás aprenderla... para que no te quedes atrás, aunque eso
será en un futuro... talvez no muy lejano...
Vayamos al tema que nos interesa, ya que no es plan de hacer "marketing" gratuito a
los distribuidores que "no sponsorizan" este curso básico... ¡hum!
·no de esos objetos es el objeto Database, el cual se usará para "mantener" una
referencia a la base de datos, con la cual podremos abrir recordsets que nos
permitirán, entre otras cosas, introducir y modificar los datos de cualquier tabla
incluida en la base de datos a la que queramos acceder...
R
Según la ayuda de Visual Basic,
À
. ·na consulta es... eso...
una consulta... una especie de búsqueda avanzada, en la que podemos indicar varios
criterios de búsqueda... aunque también, como verás pronto, es algo más sencillo que
todo eso. No te preocupes que veremos algunos ejemplos de "consultas".
xara poder manejar los objetos Database y Recordset, hay que crear unas variables
para dichos objetos, por tanto en la sección de declaraciones del formulario
(General/Declaraciones), añade estas líneas:
ption Explicit
xrivate db As Database
xrivate rs As Recordset
De esta forma tendremos una variable llamada
que apuntará al objeto Database y
otra, llamada
, que apuntará a un objeto del tipo Recordset.
En el evento Form_Load asignaremos los "objetos reales" a esas dos variables.
xara poder abrir la base de datos, necesitamos saber el path en el que se encuentra
dicha base de datos, para ello vamos a crea una constante, en la cual tendrás que
indicar el path correcto, es decir, el sitio exacto en el que se encuentra la base de
datos, en nuestro caso será BIBLI.MDB, la base de ejemplo que se incluye con Visual
Basic.
La constante
le indica al método
que lo que
queremos asignar a la variable
, (de tipo Recordset), es del tipo Dynaset, este tipo
de recordset permite mostrar y modificar los datos asignados a dicho recordset;
además de este tipo de recordset, existen otros los cuales sólo se pueden usar para
"recorrer" los datos o mostrarlos, si así lo prefieres, pero no permiten modificarlos, ese
tipo de recordset también lo veremos en esta misma entrega.
÷omo no tenemos un control data, el cual nos permitía movernos por los diferentes
registros de la tabla, en el formulario hay cuatro botones, que se usarán para esa
tarea: movernos tanto al primero, anterior, siguiente o último registro, el código para
hacerlo es el que te muestro a continuación:
= . $
*. /$U'
"'+
!"
l
l/
&0 &
$
!< %
l5)0
% %
$
'( #&
# & )
"
'(
l
l*. +
$
+6?
'('
"4)l
#*.&
'('
";)l
#*.= .
'('
"H)l+
#*."
'('
"L)l6
#*.
'(
l
l
#.
'( #&)
#*.&
l
N
6%. 6
'( # &)
#*.
'(
l )
$
%
'( 4)
* !+
'(
l
4
÷omo es posible que el usuario pulse en el botón anterior o siguiente después de estar
al principio o al final respectivamente, tenemos que "controlar" si ya estamos al
principio o al final del recordset para posicionarnos en el registro adecuado.
xor último, si todo ha ido bien, (no se ha producido un error), llamamos al
procedimiento que muestra el contenido del registro activo en las cajas de texto.
Esto último lo hace el procedimiento MostrarRegistro, cuyo código es el siguiente:
= . * !+
l*
+ $
l $
)05 $
.75
l5
+ $#
)
";4#&
'
";;#&
)
";H#&
S
)
Si le echas un vistazo al código de las pruebas con el control Data, notarás que no era
necesario llamar expresamente a un procedimiento para que los datos se mostraran,
esto era así porque el propio datacontrol se encargaba de actualizar la información en
los controles que tenía "enlazados", pero ahora no tenemos un control que
"automatice" esta tarea, así que, tenemos que hacerlo por nuestros medios... por
suerte no es tan difícil.
Ahora vamos a ver los procedimientos de Añadir un nuevo registro, actualizar uno ya
existente y eliminar el registro actual. En el propio código encontrarás la explicación de
que es lo que hace cada línea usada.
= . $
/$U
l:
. +
)
#
C
l:
+6"% 5.
#&
) .
l$7
% 5+ $
#<
)
= . $
$7 /$U
lJ
$
$,
"
)
l
$7
$
%
l)05
$?
#
l $N $%B5+
l#&
'
";4R4
l:
$
.$B(
l05";;.$B%+ . <0
#&
) ";;-
l'
$:
$% $N $%
4
#&
S ";HR4
l$7
$
#<
)
Y por último el código para eliminar un registro... como siempre, borrar es muy fácil...
= . $
/$U
l + $
l $ 5)0+6 + $.%
l $ 5)0
$
(
!$
l
l/ 5)0 + % 5)0%
'( # & #&)
l + $
#
l
l*. +
$
*. /$U4
'(
Bien, básicamente estas tareas son prácticamente iguales a las usadas con el
datacontrol, con la salvedad de que hay que mostrar los datos cuando se cambia el
registro activo.
Ahora veremos el código usado para buscar los datos, el cual es también
prácticamente lo mismo que cuando se tenía el datacontrol. Fíjate que la única
diferencia es que en lugar de usar la propiedad Recordset del datacontrol, se usa el
recordset "cargado" con los datos y que está contenido en la variable
.
Este es el código de buscar y buscar siguiente, para lo cual usamos los métodos
FindFirst y FindNext respectivamente.
= . $
$ /$U
l$ + 5$$
$
$
$
= . $
$ +/$U
l$ +
l$ +
$
= . $ 0 +&
l= $
$
$
;VO O4;
l + %$
+ $.
!++
U U +
$ +
l
l'$
$$?
!"
l
l$ $$
$ $
;
'(;#)
l/. $
""6
!+"H
l$'
$ '
-!+
'(
'(H#)
l$)
$ ) Ul-"H#"-l
'(
l
)
lJ
$? % )$
###
U U#U U
l
'( +&)
l$
$
#*.&
#&
& $
l$
+ $
#&
"$
'(
l
.. )$
l5 B###
'(#*$))
#/
*+""
$
0)0
5
#
l=$ $
$?+
#U UU U
'(
l*
+ $
* !+
)
R÷
Ya hemos visto cómo introducir y modificar registros, también hemos visto cómo
buscar un dato y seguir mostrando el resto de las coincidencias que se vayan
produciendo. xero hay ocasiones en las que a veces es necesario poder ver TD el
resultado de la búsqueda, incluso a veces nos interesa buscar más de un dato a la vez.
Eso mismo se puede hacer con FindFirst y FindNext, es decir, podemos buscar en más
de un campo del mismo registro el dato o datos que nos interesa a un mismo tiempo.
xero además de usar recordsets de sólo lectura, podemos acelerar esa tarea de
"obtener" la información que queramos realizando consultas en lugar de ir buscando
uno por uno los datos. Independientemente de cómo hagamos la consulta, siempre
nos quedará el recurso de poder usar los métodos FindXXX para buscar a su vez datos
dentro del resultado de la consulta, ya que al fin y al cabo el resultado de dicha
consulta se almacena en un objeto recordset... ¡que lio! ahora veremos con ejemplos
cómo funciona todo esto.
)C;
l
.C55
#C.C!
l B
$?
#J
l
($
.C
#
.C*
l:
$$
#/
#
%%'
%P44
#/
#
%% %HQ44
#/
#
Ahora la búsqueda sólo se hará por el nombre del autor y se mostrarán en la lista
todos los autores que coincidan con los datos que queremos buscar. El código del
botón Buscar sería el siguiente:
= . $
$ /$U
l*
.C
$ +
!!$
'
l
l& $
$
l $
0 $($
$ /1&!*) ! ) 'I l-"H-l
!
!S)
l/ $
$%$
($
l
($ %
B5
0$
!
#!$
$ %
)
l/ 5)0
$
)!
l )0
###
'(#&
# &)
*+")$
$
l*
)
C;#'#/
#*.&
)# &
C;#'#
%%#&
'
-
# ';#&
) -
# 'H#&
S -
#*."
'(
)
En otra ocasión veremos cómo "diseñar" un formulario para consultas con distintas
opciones de búsqueda, así como para búsqueda en múltiples campos.
En la próxima entrega veremos el código que habría que usar para hacer esto mismo
pero usando AD.
Así que, paciencia y a ser buenos.
Nos vemos
Guillermo