|
Visual Basic -7
49.- Base de datos y SQL
Para realizar éste proyecto,
previamente hemos construido una Base de Datos con el Access,
llamada C:\mibase.mdb y en ella una
tabla llamada: mitabla.
En la tabla debe haber dos campos alfanuméricos llamados:
Nombre y Edad.
Una vez que tenemos la Base de datos, vamos a Visual
Basic y creamos un formulario como el que se indica a la derecha
la tabla siguiente.
Los Text3 y Text4 tienen propiedad Multiline True.
Deberás estudiar el funcionamiento de SQL
En algunos proyectos tendremos que abrir la base
de datos para poder trabajar, para ello se utilizan éstas
instrucciones:
Set con = CreateObject("ADODB.Connection")
con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb")
|
|
|
' Guardar
Private Sub Command1_Click()
Set con = CreateObject("ADODB.Connection")
con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb")
nomb = Text1.Text
edad = Text2.Text
sql = "INSERT INTO mitabla (Nombre, Edad) "
sql = sql & " VALUES ("
sql = sql & "'" & nomb & "',"
sql = sql & "'" & edad & "')"
con.Execute (sql)
End Sub
' Ver
Private Sub Command2_Click()
Set con = CreateObject("ADODB.Connection")
con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb")
busca = Text5.Text
sql = "SELECT * FROM mitabla WHERE Nombre LIKE '" & busca & "'"
Set RS = con.Execute(sql)
Do While Not RS.EOF
Text3.Text = Text3.Text & vbCrLf & RS("Nombre")
Text4.Text = Text4.Text & vbCrLf & RS("Edad")
RS.MoveNext
Loop
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Para BORRAR Registros, añadimos un nuevo Command6_Click:
Private Sub Command6_Click()
Set con = CreateObject("ADODB.Connection")
con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb")
busca = Text5.Text
sql = "DELETE * FROM prueba WHERE Nombre LIKE '" & busca & "'"
Set RS = con.Execute(sql)
End Sub
|
Vamos a ver tres formas más de trabajar con Bases de
Datos:
1.- Creación mediante el Administrador
Visual de datos.
2.- Control mediante el control Data.
3.- Control mediante el control ADODC.
1.- Creación mediante
el Administrador Visual de datos (Visdata).
Abrimos un nuevo proyecto EXE Standard.
Complementos/Administrador visual de datos... (Está arriba,
en la barra de menú)
Archivo/Nuevo.../Microsoft Access/MDB de la versión 7.0..
-------> Nombre: C:\mibase.mdb

Pulsar botón derecho; en el menú
emergente pulsar Nueva tabla. Le damos un nombre: mitabla
Agregar campo y vamos agregando los distintos campos
que componen la tabla.
Generar tabla.

Ya la tenemos. Ahora pulsamos dos veces sobre el
icono de mitabla y podremos
Agregar datos.
Con el botón derecho del ratón podemos entrar en las
Propiedades de la tabla y modificar sus parámetros.
(Algunas propiedades son sólo de lectura; el tipo y tamaño
no se puede modificar)

Buscar: Podemos Buscar
los Registros que tengan en el campo Edad, operador >, Valor
10.
Si queremos volver a editar la tabla, pulsamos
con el botón derecho sobre mitabla y luego Diseñar...
Podemos marcar Required,
para obligar a rellenar un campo.
Si en ValidationRule ponemos ">100"
y en ValidationText "Una edad
demasiada avanzada", estamos restringiendo a que coloquen una
edad mayor de 100 años.

Podemos hacer búsqueda mediante SQL

2.- Control mediante el control
Data
Construimos previamente esta base de datos:

Abrimos un nuevo proyecto EXE Standard.
Insertamos en el Formulario un control Data, TextBox y tres
Label.

Vamos a Propiedades
de Data1
DatabaseName = C:\mibase.mdb
RecordSource = mitabla
(Puede ocurrir que obtengamos un error debido a que
el formato de la base de datos no sea el adecuado, tendremos que
convertirla a Access 97, Access2000 o Access2002 según se
necesite)
Vamos a las Propiedades
de los Text:
Text1 y ponemos en DataSource Data1
y en DataField Nombre
Text2 y ponemos en DataSource Data1
y en DataField Edad
Text3 y ponemos en DataSource Data1
y en DataField Ciudad
Ejecutamos y observamos.
(Más adelante estudiaremos las Propiedades
del Data1: BOFAction y EOFAction)
Ahora vamos a gestionar la Base de datos anterior con Botones.
Ahora vamos a agregar 4 Botones y realizar la visualización
de las fichas mediante los botones.

Private Sub Command1_Click()
Data1.Recordset.MoveFirst
End Sub
Private Sub Command2_Click()
Data1.Recordset.MoveNext
End Sub
Private Sub Command3_Click()
Data1.Recordset.MovePrevious
End Sub
Private Sub Command4_Click()
Data1.Recordset.MoveLast
End Sub
|
Ejecutamos y observamos.
Cuando superamos el último o el anterior al primero se produce
un error.
Lo vamos a corregir de ésta manera:
Private Sub Command1_Click()
Data1.Recordset.MoveFirst
End Sub
Private Sub Command2_Click()
If Data1.Recordset.EOF Then
' Data1.Recordset.AddNew
Data1.Recordset.MoveLast
Else
Data1.Recordset.MoveNext
End If
End Sub
Private Sub Command3_Click()
If Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Else
Data1.Recordset.MovePrevious
End If
End Sub
Private Sub Command4_Click()
Data1.Recordset.MoveLast
End Sub
|
3.- Control mediante el control ADODC
Abrimos un nuevo proyecto EXE Standard.
Proyecto/Componentes/Microsoft ADO Data Control 6.0 (OLEDB)
Ponemos ese control en el Formulario.
Debemos "Conectar" la
Base de datos.
Vamos a Propiedades del Adodc1, ConnectionString
Marcamos: Usar cadena de conexión. Pulsamos Generar.
Elegimos el Proveedor: Microsoft Jet 4.0
OLE DB Provider

Le damos a Siguiente >>. Y Seleccionamos
la Base de datos con la que vamos a trabajar. Probar.

Ahora vamos de nuevo a Propiedades del Adodc1,
RecordSource
Y ponemos 2- adCmdTable
y el nombre de la tabla a la que se le aplicarán los comandos:
C:\mitabla

Ya hemos preparado el control ADODC1. Ahora vamos
a construir el Formulario:

En el DataSource de
los Text se pone el nombre del control Adodc1
En el Data Field de los
Text se pone el nombre del campo.
Vamos a las Propiedades
del:
Text1 y ponemos en DataSource Adodc1
y en DataField Nombre
Text2 y ponemos en DataSource Adodc1
y en DataField Apellido
Text3 y ponemos en DataSource Adodc1
y en DataField Pais
Text4 y ponemos en DataSource Adodc1
y en DataField Edad.
Ejecutamos y observamos.
En resumen:
- Agregar el control Adocd1
- Propiedad ConectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\mibase.mdb
- Propiedad CommandType: 2 adCmdTable
- Propiedad RecordSource: mitabla
- Propiedades DataSource
y DataField de cada Text
Volviendo al control Adodc1 vemos que tiene estas
dos Propiedades:
Propiedad BOFAction:
BOF significa antes que el primero, o sea, estamos viendo los registros
5, 4, 3, 2, 1, NADA-BOF
- Si ponemos MoveFirst permanecerán en el primer registro.
- Si ponemos BOF se desactiva el control izquierdo.
Propiedad EOFAction:
EOF significa fin del fichero, o sea, estamos viendo los registros
5, 6,7, 8, 9 * FIN-EOF
- Si ponemos MoveLast permanecerá en el último registro.
- Si ponemos EOF se desactiva el control derecho.
- Si ponemos AddNew podremos Agregar nuevos Registros.
Ahora vamos a gestionar la Base de datos anterior
con botones.
Agregamos los botones que indica la siguiente figura:

Private Sub Command1_Click()
Adodc1.Recordset.Fields("Nombre") = Text1.Text
Adodc1.Recordset.Fields("Apellido") = Text2.Text
Adodc1.Recordset.Fields("Pais") = Text3.Text
Adodc1.Recordset.Fields("Edad") = Text4.Text
Adodc1.Recordset.Update
End Sub
Private Sub Command2_Click()
Adodc1.Recordset.AddNew
End Sub
Private Sub Command3_Click()
Confirma = MsgBox("¿Quieres borrar esta ficha?", vbYesNo, "Confirmación")
If Confirma = vbYes Then
Adodc1.Recordset.Delete
MsgBox "Ficha borrada.", , "Borrado"
Else
MsgBox "Cancelación de borrado.", , "No borrado"
End If
End Sub
Private Sub Command4_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
End Sub
Private Sub Command5_Click()
If Not Adodc1.Recordset.BOF Then
Adodc1.Recordset.MovePrevious
If Adodc1.Recordset.BOF Then
Adodc1.Recordset.MoveNext
End If
End If
End Sub
Private Sub Command6_Click()
If Not Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveNext
If Adodc1.Recordset.EOF Then
Adodc1.Recordset.MovePrevious
End If
End If
End Sub
Private Sub Command7_Click()
End
End Sub
|
Ahora vamos a realizar un formulario en donde podamos
ver
imágenes archivadas en una Base de
Datos Access
Baja cuadros.zip, son
una serie de imágenes que nos pueden valer para éste
ejercicio.
Vamos a verlo de tres formas:
Primera forma:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvbpj01/html/gs0102.asp
Creamos una Base de datos Access llamada C:\Cuadros\cuadros2.mdb
y en ella una tabla llamada mitabla
con tres campos:
Nombre (Texto)
Apellido (Texto)
Cuadro (Objeto OLE) |
 |
Podemos rellenar los elementos de la tabla con
varios registros:
Los cuadros se introducen mediante:
Botón derecho en el campo Cuadro /
Insertar objeto... / Crear desde archivo / Examinar
Vamos a Visual Basic y creamos éste formulario:

Private Conn As ADODB.Connection
Private rs As ADODB.Recordset
Private Sub Form_Load()
'Establecer conexión
Set Conn = New ADODB.Connection
Conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB" & _
".4.0;Data Source=" & "C:\cuadros\cuadros.mdb"
Conn.Open
'Abrir recordset
Set rs = New ADODB.Recordset
rs.Open "mitabla", Conn, _
adOpenKeyset, adLockPessimistic, adCmdTable
Set Text1.DataSource = rs
Text1.DataField = "Nombre"
Set Text2.DataSource = rs
Text2.DataField = "Apellido"
Set Image1.DataSource = rs
Image1.DataField = "Cuadro"
End Sub
|
Con esta idea debería funcionar, pero suele fallar porque
los componente de Visual Basic no están actualizados con
las nuevas Base de datos de Access.
Además tenemos que poner botones u otros elementos para
cambiar de registro.
Hay que tener en cuenta que existen varias versiones de Access:
Access 97, Access 2000, Acces 2002....
si tenemos el Office XP, podemos convertir a Access a versiones
anteriores mediante:
Herramientas / Utilidades de la base de datos / Convertir base de
datos
Al convertir la base de datos, cambia algunas de sus anteriores
características.
En algunas ocasiones, si no tenemos el Visual Basic 6 actualizado,
tendremos que convertir bases de datos de Acces XP a Access 97.
Segunda forma:
Bajamos éste archivo: VBAccessImag.zip
lo descomprimimos y lo ejecutamos, observaremos que el código
es un poco enrevesado, pero funciona.
Tercera forma:
Digamos que es mi contribución personal,
en este caso no tenemos un campo de Objeto OLE, sino un campo de
texto en donde guardamos la localización del archivo gráfico.
Creamos una Base de datos Access llamada C:\cuadros2.mdb
y en ella una tabla llamada mitabla
con tres campos de Texto:

Rellenamos varios Registros:
Observamos que el campo Imagen es de Texto y en
él escribimos la ruta de la imagen.
Vamos a Visual Basic y creamos éste formulario:

Dim Con As ADODB.Connection
Dim RS As New ADODB.Recordset
Dim strConn As String
' Guardar
Private Sub Command1_Click()
Set Con = CreateObject("ADODB.Connection")
Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb")
nomb = Text1.Text
apel = Text2.Text
imag = Text3.Text
SQL = "INSERT INTO mitabla (Nombre, Apellido, Imagen) "
SQL = SQL & " VALUES ("
SQL = SQL & "'" & nomb & "',"
SQL = SQL & "'" & apel & "',"
SQL = SQL & "'" & imag & "')"
Con.Execute (SQL)
End Sub
' Abrir
Private Sub Command2_Click()
'Set Con = CreateObject("ADODB.Connection") 'Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb")
'SQL = "SELECT * FROM mitabla "
'Set RS = Con.Execute(SQL)
'RS.CursorType = adOpenDynamic
Dim Conn As New ADODB.Connection
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
strConn = strConn & "C:\cuadros2.mdb"
Conn.ConnectionString = strConn
Conn.Open
RS.Source = "SELECT * FROM mitabla"
RS.CursorType = adOpenDynamic
RS.ActiveConnection = Conn
RS.Open
End Sub
' Siguiente
Private Sub Command3_Click()
Text1.Text = RS("Nombre")
Text2.Text = RS("Apellido")
Text3.Text = RS("Imagen")
Image1.Picture = LoadPicture(RS("Imagen"))
RS.MoveNext
End Sub
' Anterior
Private Sub Command4_Click()
Text1.Text = RS("Nombre")
Text2.Text = RS("Apellido")
Text3.Text = RS("Imagen")
Image1.Picture = LoadPicture(RS("Imagen"))
RS.MovePrevious
End Sub
Private Sub Form_Load()
End Sub
|
Éste proyecto lo podemos depurar, evitando
que salga un error cuando llega al final del archivo EOF o al principio
BOF.
También se podría poner controles
Drive, Dir y File, para que no tengamos que poner la ruta de la
imagen manualmente, sino que la localizamos mediante éstos
controles y la agregamos a la base de datos.
Recordar que podemos visualizar una Base de datos
con imágenes mediante los formulario del Access como se vió
en el Ejercicio Nº 2 de Base de datos
|