Sunteți pe pagina 1din 32

Uso del Control Data En Visual Basic puede utilizar el control Data para crear aplicaciones de bases de datos

para una gran variedad de formatos de base de datos. El control Data interacta con el motor de base de datos Microsoft Jet y permite crear aplicaciones preparadas para datos con la mnima cantidad de cdigo posible. En esta seccin se explica cmo utilizar el control Data y otros controles avanzados enlazados a datos para ver, modificar y actualizar informacin de una base de datos. 5.3.1 Introduccin al Acceso de Datos Antes de empezar a trabajar con la funcionalidad de bases de datos de Visual Basic, es necesario que comprenda las funciones de acceso a datos, as como la terminologa referente a bases de datos. Opciones de Acceso a Datos en Visual Basic Uso del Motor de Base de Datos Jet

Los Objetos de acceso a datos (DAO) y el control Data utilizan el motor de base de datos Microsoft Jet para tener acceso a las bases de datos. El motor de base de datos Jet puede obtener acceso a tres tipos de bases de datos: Bases de datos Jet.

Bases de datos del Mtodo de acceso secuencial indizado (ISAM, Indexed Sequential Access Method). Bases de datos compatibles con Open Database Connectivity (ODBC, Conectividad abierta de bases de datos). Otros Mtodos de Acceso a Datos

He aqu otros mtodos de acceso a datos que admite Visual Basic: Control de origen de datos remotos. Bibliotecas ODBC. Bibliotecas SQL para Visual Basic (VBSQL).

5.3.2 Trabajar con el Control Data El control Data de Visual Basic le permite escribir aplicaciones de bases de datos muy eficaces con muy poco cdigo. En esta seccin aprender a generar aplicaciones de bases de datos con el control Data y el objeto Recordset asociado. Tener Acceso a Datos con el Control Data El control Data implementa el acceso a datos mediante el motor de base de datos Microsoft Jet. Esta tecnologa proporciona acceso a muchos formatos de base de datos y le permite crear aplicaciones que manejan datos sin necesidad de escribir cdigo.

Uso de Controles Enlazados a Datos Cuando enlaza un control enlazado a datos que ha colocado en un formulario, se muestran automticamente los datos de la base de datos en el control enlazado. Si un usuario cambia los datos de un control enlazado, dichos cambios se actualizarn automticamente en la base de datos en cuanto el usuario se desplace a otro registro. Muchos controles intrnsecos de Visual Basic estn enlazados a datos, como es el caso de los controles CheckBox, Image, Label, PictureBox, TextBox, ListBox, ComboBox y los contenedores OLE.

La siguiente ilustracin es un ejemplo de un formulario que contiene un control Data y dos controles enlazados.

Enlazar Controles

Despus de establecer los valores de las propiedades para el control Data, es necesario enlazar al control Data los controles enlazados a datos individuales y despus especificar qu campo de la tabla mostrar cada control. Uso de las Propiedades y mtodos del Control Data Para especificar qu datos desea recuperar, debe establecer las propiedades DatabaseName y RecordSource de un control Data. Adems, puede establecer las siguientes propiedades y mtodos: Propiedad Connect Propiedad Exclusive Propiedad ReadOnly Propiedad Recordset Propiedades BOFAction y EOFAction Mtodo Refresh El Objeto Recordset En una aplicacin de base de datos, los usuarios trabajan con el control Data para desplazarse entre registros dentro de la base de datos. Los usuarios pueden hacer clic en los botones del control Data para avanzar o retroceder registro a registro o para ir directamente al primer o al ltimo registro. Qu es un Recordset?

Todo el conjunto de registros al que hace referencia un control Data se denomina conjunto de registros o Recordset. El Recordset se almacena en la memoria, transfirindose al disco si es necesario. Determinar los lmites de un Recordset

Si utiliza cdigo para cambiar la posicin del registro actual, debe comprobar las propiedades EOF y BOF del objeto Recordset para determinar el inicio y el final del mismo. Cuando se desplace al registro EOF o al BOF, se ejecutar la accin indicada por el valor de la propiedad BOFAction o EOFAction. En la siguiente ilustracin se muestra cmo las propiedades BOF y EOF determinan los lmites del objeto Recordset.

Para utilizar el objeto Recordset de un determinado control Data, especifique la propiedad Recordset del control Data, tal y como se muestra en el siguiente cdigo: Data1.Recordset.MoveNext 'Va al registro siguiente. If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If Uso de las Propiedades y Mtodos de Recordset Utilice los mtodos y las propiedades del objeto Recordset para recuperar informacin del conjunto de registros, desplazarse por los registros y agregar, actualizar o eliminar registros. Propiedades BOF y EOF Mtodo AddNew de Recordset Mtodo UpdateRecord del control Data Mtodo CancelUpdate del control Data El mtodo Delete

El siguiente cdigo muestra el uso de las propiedades y mtodos de un Recordset: Sub cmdCancel_Click () Data1.CancelUpdate End Sub

Sub cmdUpdate_Click () Data1.UpdateRecord End Sub Sub cmdAdd_Click () Data1.Recordset.AddNew End Sub Sub cmdDelete_Click () Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If End Sub 5.3.3 Uso de Eventos del Control Data El control Data proporciona tres eventos que puede utilizar para mejorar la aplicacin de base de datos: Validate, Error y Reposition. Dichos eventos le permiten omitir parte del comportamiento predeterminado del control Data. Usar el Evento Validate Utilice el evento Validate para comprobar los datos antes de guardar un registro en la base de datos. Este evento se produce justo antes de que Visual Basic escriba en la base de datos los cambios procedentes de los controles enlazados y de que vuelva a colocar el puntero del registro actual en otro registro de la base de datos. Puede utilizar el evento Validate para pedir al usuario que confirme los cambios realizados. Sintaxis: El evento Validate tiene la siguiente sintaxis:

Private Sub Data1_Validate (index As Integer, action As Integer, save As Integer) El argumento action

El argumento action indica la operacin que provoc el evento Validate. El evento Validate se produce como resultado de realizar las operaciones siguientes: MoveFirst, MovePrevious, MoveNext, MoveLast

AddNew Update Delete Find Establecer la propiedad Bookmark Cerrar la base de datos Descargar el formulario

Para cancelar cualquiera de estas acciones, asigne al argumento action el valor vbDataActionCancel. El argumento save

El argumento save indica si va a guardarse o no el registro. Si save es True, los datos enlazados han cambiado. Para cancelar la accin de guardar puede asignar a save el valor False. Usar el Evento Reposition Utilice el evento Reposition para modificar la apariencia de un formulario o realizar una accin necesaria cuando se desplace a un nuevo registro. Este evento tiene lugar cuando Visual Basic desplaza el puntero del registro actual a otro registro de la base de datos. Tambin se produce la primera vez que se abre la base de datos. Modificar la apariencia de un formulario

Para cambiar la manera en que un formulario muestra informacin basndose en el registro seleccionado en ese momento hay que utilizar el evento Reposition. Por ejemplo, puede modificar el ttulo del control Data de forma que se muestre el registro nmero n.

Para ver el nmero del registro actual, utilice la propiedad AbsolutePosition del objeto Recordset. El nmero de registro es relativo a cero, por lo que el primer registro es el 0. Tratar los cambios al desplazarse a un nuevo registro

Cuando un usuario se desplaza a un nuevo registro mediante el control Data, puede que los datos del formulario tengan que presentarse de una forma distinta en el caso del nuevo registro. Por ejemplo, es posible que en un formulario que muestre registros de empleados haya distintas opciones dependiendo de si los empleados son fijos, temporales, si trabajan por horas o si son becarios. Cada registro mostrar la informacin sobre un empleado distinto, cuyas opciones pueden no ser las mismas para todos los registros. Para que se seleccione la opcin correcta para cada registro, escriba cdigo en el evento Reposition. El cdigo siguiente utiliza el evento Reposition para modificar la apariencia de un formulario:

Private Sub Data1_Reposition()

Data1.Caption=Data1.Recordset.AbsolutePosition If Data1.Recordset("IdEmpleado") > 5 Then optSenior.Value = True Else optJunior.Value = True End If Data1.Caption = "Registro " & _ Data1.Recordset.AbsolutePosition + 1 End Sub Esta ilustracin muestra el formulario basado en el cdigo anterior.

Usar el Evento Error El evento Error tiene lugar cuando un usuario interacta con el control Data y se produce un error de acceso a datos. Utilice el evento Error para agregar tratamiento de errores personalizado al control Data. Por ejemplo, si un usuario modifica un campo y despus hace clic en el control Data para desplazarse al siguiente registro, el control Data actualizar el registro actual. Si se produce un error de acceso a datos durante la actualizacin, se producir el evento Error. Los valores de los campos enlazados no cambian tras producirse un error. El usuario puede corregir los valores y hacer clic en el control Data para tratar de actualizar nuevamente el registro.

Mostrar un mensaje de error personalizado

Si no coloca cdigo para tratar errores en el evento Error y se produce un error cuando un usuario interacta con el control Data, Visual Basic muestra el mensaje de error y el programa contina ejecutndose. Si no desea que se muestre el mensaje de error estndar, puede asignar al argumento Response el valor 0. 5.3.4 Uso de Controles Enlazados a Datos ActiveX Adems de los controles enlazados intrnsecos, Visual Basic ofrece varios controles ActiveX enlazados a datos. En esta seccin se describen algunos controles ActiveX enlazados a datos avanzados. Usar el Control DBGrid El control de cuadrcula enlazada a datos (control DBGrid) permite que los usuarios de su aplicacin de base de datos trabajen con varios registros a la vez. Mostrar mltiples registros

DBGrid es un control ActiveX que muestra una serie de filas y columnas que representan registros y campos de un objeto Recordset. Cuando asigne a la propiedad DataSource del control DBGrid un control Data, el control DBGrid se llenar automticamente de datos y se establecern automticamente sus encabezados de columna a partir del conjunto de registros del control Data. Al contrario que la mayora de los controles enlazados a datos, el control DBGrid le permite ver y modificar varios registros simultneamente. En la siguiente ilustracin se muestra un formulario que utiliza un control DBGrid para presentar registros procedentes de la base de datos Neptuno.

El control DBGrid tiene varias propiedades que especifican cmo se comporta el control. Por ejemplo, si asigna a la propiedad AllowUpdate el valor True, un usuario puede modificar los datos del control. Tambin puede establecer propiedades para columnas individuales del control DBGrid. Puede cambiar el ttulo de la columna, cambiar el campo de datos al que se enlaza la columna, agregar valores predeterminados, etc. Obtener y establecer texto de la celda actual

Utilice la coleccin Columns del control DBGrid para recuperar el texto de la celda seleccionada actualmente en tiempo de ejecucin. Por ejemplo: MsgBox DBGrid1.Columns(DBGrid1.Col).Text Para cambiar la informacin del control DBGrid, cambie el objeto Recordset asociado. Usar el evento BeforeUpdate

El evento BeforeUpdate tiene lugar antes de que se muevan datos desde un control DBGrid al bfer de copia del control Data. Puede validar los datos y cancelar la actualizacin si es necesario. Usar el Control MSFlexGrid El control MSFlexGrid proporciona caractersticas avanzadas para la presentacin de datos en una cuadrcula. Es similar al control DBGrid aunque, cuando se enlaza a un control Data, el control MSFlexGrid muestra datos de slo lectura. Puede utilizar el control MSFlexGrid para combinar filas o columnas de informacin y as agrupar la informacin relacionada.

En la siguiente ilustracin se muestran registros agrupados por Id. de pedido en la tabla Detalles de pedidos.

Usar el Control DBCombo Puede utilizar el control de cuadro de lista enlazado a datos (DBList) o el cuadro combinado enlazado a datos (DBCombo) para presentar automticamente una lista de valores de un Recordset. Esto resulta til para

proporcionar valores vlidos al usuario. Obtener informacin de una tabla de bsqueda

Tambin puede utilizar estos controles en aplicaciones de "tabla de bsqueda". Por ejemplo, puede presentar una lista de nombres de categora vlidos (en vez de Id.) y utilizar el Id. correspondiente cuando el usuario agregue o modifique datos.

La ilustracin siguiente muestra un formulario que utiliza el control DBCombo para presentar nombres de categoras de la tabla Productos.

Establecer propiedades del control DBCombo

Para determinar el valor que se presenta en el control DBCombo, asigne a la propiedad RowSource un nombre de control Data y a la propiedad ListField un nombre de campo. El cuadro combinado enlazado a datos contiene todos los valores de ese campo. Para determinar qu campo de la base de datos se actualiza cuando un usuario cambia un valor, establezca las propiedades DataSource y DataField. Para establecer la relacin entre la tabla que contiene los valores de bsqueda y la tabla que se est modificando realmente, establezca la propiedad BoundColumn.

Acceso a base de datos de Access 2000 Usando el ADO data control

Publicado: 31/Ago/1999 Actualizado: 31/Ago/1999

Si has intentado usar una base de datos creada o convertida con el Access 2000, te habrs llevado una pequea sorpresa al ver que usando el Data control que se incluye en el Visual Basic no te permite hacerlo. Esto es porque el nuevo formato de Access usa el motor Jet versin 4.0 y los datacontrol DAO slo "entienden" hasta la versin 3.5... Pero si tienes la versin 6.0 de Visual Basic, o bien has conseguido las DLLs de ADO (ActiveX Data Object), puedes usarlas sin problemas... incluso con el ADO Datacontrol. En el siguiente cdigo veremos cmo abrir y movernos en una base de datos, en este caso, lo mismo dar que la base de datos haya sido creada con Access 97 o con el Access 2000. Nota: En el zip con el cdigo de ejemplo se acompaa una base de datos de prueba creada con Access 97 y otra con el Access 2000.

Para empezar: Crea un nuevo proyecto, en Proyecto/Componentes... selecciona Microsoft ADO Data Control (OLEDB), pulsa Aceptar y vers que se aade un nuevo control a la barra de herramientas: Ese ser el control que usaremos! Haz dobleclick en ese control para que se aada al formulario, cmbiale la altura a un valor pequeo: 315 est bien, sitalo donde ms coraje te de y aade un TextBox, cambia el tamao, yo le he dado estos valores: alto 315, ancho 2955. Crea un array del Text1 recin aadido: Selecciona el Text1, pulsa el botn derecho y copialo; pulsa en cualquier lado del Form y pulsa el ratn derecho del ratn, selecciona Pegar... te preguntar si quieres crear un array del control Text1, responde que SI. Vuelve a pegar de nuevo y se crear un tercer Text1. Ahora tendrs tres controles Text1 con los ndices desde 0 a 2 Si te parece demasiado "bsico" todos estos pasos... te aguantas... y espera un poco que ya mismo termino. Ahora vamos a configurar el ADO datacontrol: Selecciona el datacontrol, en la ventana de propiedades pulsa en Custom... Te mostrar un cuadro de dilogo, (puede que si tienes la versin en castellano del VB, no te muestre lo que yo te digo, ya que la versin que tengo est en ingls, pero espero que no te lies...) En la ficha General, estar seleccionada la opcin "Use Connection String", pulsa en el botn "Build..." Te mostrar otro cuadro de dilogo, en la ficha "Provider", selecciona Microsoft Jet 4.0 OLE DB Provider, pulsa en "Next>>" y selecciona la base de datos que quieres usar, (si tienes la que

estn incluidas en el ZIP, se llamar db2000.mdb); el resto de opciones djalos como est; pulsa en "Aceptar" dos veces para que se cierren los cuadros de dilogo. Ahora tenemos que decirle que tabla usar y otras cosillas. Selecciona la propiedad CursorType y de la lista desplegable selecciona 2-adOpenDynaset. Selecciona la propiedad RecordSource y pulsa en el botn, te mostrar un cuadro de dilogo. De la lista desplegable (Command type), selecciona: 2-adCmdTable, la lista "Table or Stored Procedure Name" se habr habilitado, selecciona el nombre de la tabla que quieres usar, en este caso Table1 y pulsa en Aceptar. Esto mismo se puede hacer mediante cdigo, para ello asgnale estos valores al datacontrol: (por ejemplo en el evento Form_Load) ' Indicar la base de datos a usar Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb" Adodc1.CursorType = adOpenDynamic ' Conectarlo a la tabla de prueba Adodc1.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1.Refresh

Nota: En el cdigo de ejemplo asignaremos en tiempo de ejecucin la base de datos y dems conexiones necesarias. Ahora ser necesario "ligar" los cuadros de texto con el Datacontrol y los campos correspondientes: Selecciona los tres Text1, en la ventana de propiedades selecciona DataSource y en la lista desplegable selecciona Adodc1

Para ligar cada Text1 con un campo de la base de datos: Pulsa en cualquier parte del formulario para quitar la seleccin actual. Selecciona el Text1 con ndice 0. En la ventana de propiedades, selecciona DataField y de la lista desplegable, selecciona "Nombre" Haz lo mismo con los otros dos Text1, pero para el de ndice 1, selecciona "e-mail" y para el otro: "Comentario" Este ltimo control sera conveniente que lo hicieras ms grande y MultiLine, ya que se supone que aceptar textos ms grandes porque el tipo de campo es "Memo" Ya puedes pulsar en F5 para probar que todo esto funciona.

Realmente no es necesario aadir nada de cdigo, pero si quieres hacerlo manualmente, aade lo siguiente en el evento Form_Load:

Private Sub Form_Load() ' Indicar la base de datos a usar Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb" Adodc1.CursorType = adOpenDynamic ' Conectarlo a la tabla de prueba Adodc1.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1.Refresh ' Conectar manualmente los Text1 al recordset Dim i As Long ' Asignar el control data For i = 0 To 2 Set Text1(i).DataSource = Adodc1 Next ' Asignar los nombres de los campos Text1(0).DataField = "Nombre" Text1(1).DataField = "e-mail" Text1(2).DataField = "Comentario" End Sub

Para que el Caption del data control nos muestre el nmero de registro, en este caso el campo ID de la tabla, aade este cdigo:

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) ' Mostrar el ID del registro actual

' si se pasa del primero o del ltimo, dar error On Local Error Resume Next ' Mostrar el ID del registro actual usando el recordset pasado como parmetro 'Adodc1.Caption = "ID del Registro: " & pRecordset!ID ' Tambin se puede usar: Adodc1.Caption = "ID del Registro: " & Adodc1.Recordset!ID Err = 0 End Sub

Aadir y borrar registros de la tabla. Para tener estas dos opciones, aade dos botones al formulario, al primero lo llamas cmdAdd y en el Caption escribe Aadir, al otro botn le cambias el nombre a cmdDel y en el Caption escribe: Eliminar. Aade el siguiente cdigo: ' Private Sub cmdAdd_Click() Adodc1.Recordset.AddNew End Sub Private Sub cmdDel_Click() Adodc1.Recordset.Delete End Sub

Bueno, creo que con esto tienes para empezar, en otra ocasin te mostrar cmo hacer esto mismo pero sin usar el data control. En el zip con los listados hay otro proyecto que te permite seleccionar entre una base de Access 97 o una creada con Access 2000

Indicar el path de la base de datos usando un data control


Ejemplos con ADO y DAO
Publicado: 18/Sep/2004 Actualizado: 18/Sep/2004 Autor: Guillermo 'guille' Som En este ejemplo vamos a ver cmo indicar el path en el que se encuentra la base de datos, pero lo haremos en tiempo de ejecucin, es decir cuando la aplicacin est ejecutndose. Seguramente si lees el prrafo anterio en la que te digo lo que te voy a explicar, no te parecer nada del otro mundo, ya que eso se ha dicho y explicado en varias ocasiones. Pero como resulta que an hay mucha gente que usa los controles "enlazados" y los data control y los asigna en modo de diseo... pues... para ellos seguros que le ir bien esta "historia" que voy a contar. Seguramente cuando te explique la situacin en la que puede ser til saber lo que te voy a contar, cambies de opinin.

Los precedentes (la situacin)


Empecemos el ejemplo usando DAO, ya que en VB6 puede que haya ms gente (sobre todo los que empiezan) que usen el DataControl que est de forma predeterminada en la barra de herramientas.

Usando controles enlazados DAO


Estos son los pasos que debemos seguir para poder hacer el proyecto de prueba:

1- Creamos un nuevo proyecto de Visual Basic 6 (cuando digo VB6, tambin se puede aplicar a VB5 e incluso a VB4), aadimos el control Data, que est en el Toolbox y se crear un objeto en el formulario llamado Data1. 2- Ahora le asignamos la base de datos que usaremos, lo ms usual es que el usuario seleccione el DataControl, se vaya a la ventana de propiedades, seleccione la propiedad DatabaseName y busque una base de datos (pulsando en el botn con los tres puntos suspensivos). 3- Una vez que hemos indicado el nombre de la base de datos, tendremos que indicarle la tabla a la que queremos acceder. Para ello tendremos que seleccionar la propiedad RecordSource y elegir de la lista desplegable la tabla a usar. Estos tres pasos sern los que nos permitan acceder a una base de datos desde nuestro proyecto de VB6.

Nota: En el zip con el cdigo completo he incluido una base de datos de prueba. Copia esa base de datos (db2000.mdb) en el mismo directorio del proyecto y sala para asignarla al control data. De esa forma ser ms fcil seguir las indicaciones de este artculo.

Ahora vamos a aadir un control DataGrid, de forma que podamos manejar de forma simple los datos de nuestra base de datos y de la tabla seleccionada. Para aadir un DataGrid tendremos que hacer lo siguiente: 1- En el men Proyecto (Project) seleccionamos Componentes (Components...), nos mostrar un cuadro de dilogo con los controles ActiveX que podemos aadir a nuestra aplicacin. De ese cuadro de dilogo seleccionaremos Microsoft Data Bound Grid Control (tambin se indicar la versin del VB y el SP que se est usando, en mi caso sera 5.0 (SP3)). Esto aadir a la barra de herramientas el control DataGrid y haciendo doble-click en l, lo aadiremos al formulario. 2- Seleccionamos el nuevo control que tenemos en el formulario, lo cambiamos de tamao y posicin y ahora le indicaremos de dnde obtendr los datos. Para ello nos vamos a la ventana de propiedades (el DataGrid debe estar seleccionado) y buscamos la propiedad DataSource, de la lista desplegable seleccionamos el DataControl que usaremos para obtener los datos. En este ejemplo ser Data1 (que debera ser el nico que se muestre). Hecho todo esto, podemos pulsar F5 para ejecutar la aplicacin y veremos que el DataGrid se llena con los datos que tenga la tabla de la base de datos que le indicamos al control Data.

Para probar que todo esto funciona como debe vamos a compilar el proyecto (crear el ejecutable) y veamos si siempre funciona. Para compilar el proyecto y crear el ejecutable, selecciona la opcin Make del men File (si tienes el VB en espaol, seguramente tendr otros nombres). Ahora ve al directorio en el que est el EXE y ejectalo (haz doble-click en l). Si has seguido los pasos de forma correcta, debera mostrarte lo mismo que cuando pulsaste F5 desde el IDE (entorno de desarrollo) de VB.

Haciendo que falle todo esto...


Para probar que no siempre funcionar, vamos a hacer ahora lo siguiente: 1- Asegrate de que has cerrado la aplicacin. Cierra tambin el VB6. 2- Crea un directorio en otro sitio. 3- Corta el ejecutable y la base de datos (se supone que la base de datos estaba en el mismo directorio del proyecto, tal como se comenta en la nota) 4- Pgalos en el nuevo directorio. 5- Abre el ejecutable (ejectalo, doble-click, ya sabes...) Al ejecutarse la aplicacin, nos indicar que no se puede encontrar la base de datos y nos mostrar el path en el que estaba anteriormente. La aplicacin se abrir, pero en el DataGrid no habr nada... ya que no se ha podido abrir la base de datos y por tanto no se pueden "ver" esos datos. La solucin: Para que la aplicacin vuelva a funcionar, tendramos que volver a copiar la base de datos en el directorio en el que estaba (el del proyecto). Comprubalo moviendo (cortar y pegar) la base de datos al directorio del proyecto. El problema (colateral): Pero... imagnate que lo que quieres hacer, es distribuir esta aplicacin y la base de datos. Como hemos podido comprobar, la nica forma de que funcione es creando un directorio que se encuentre en el mismo "camino" que el que nosotros tenemos en nuestro equipo. Por ejemplo, en mi caso el directorio del proyecto es: E:\gsCodigo\VBpruebas\Bases de datos\indicar el path de una base de datos usando Data Control\conDAO Que pasa si el cliente no tiene un disco E? O, peor an, que pasa si el disco E del cliente es un CD-ROM?

Pues que no funcionar el programa. Y en caso de que si tenga un disco E, tendremos que crear esos directorios para que todo funcione.

Cual es la mejor solucin?


Creo que sera mejor que el programa pudiera funcionar si tanto el ejecutable y la base de datos estn en el mismo directorio, y lo ms importante es: sea cual sea ese directorio. Es decir, nos dar igual si el disco en el que est la base y el exe es el disco C, el E o el X, adems de que el directorio puede ser cualquiera... Cmo podemos hacerlo? Indicndole al programa dnde est la base de datos. Si la base de datos est en el mismo directorio que el ejecutable, podemos hacer lo siguiente: Private Sub Form_Load() Data1.DatabaseName = App.Path & "\db2000.mdb" End Sub De esta forma le indicamos al control data dnde localizar la base de datos y todo volver a funcionar de forma satisfactoria. En este cdigo, indicamos que el directorio en el que se encuentra la base de datos es el mismo directorio desde el que se est ejecutando la aplicacin. En el caso de que la base de datos est en otro directorio, simplemente tenemos que usar ese directorio a la propiedad DatabaseName del data control. Por ejemplo si leemos el path de un fichero de configuracin (INI) o desde el registro de Windows usando GetSetting, etc.

Nota: Si tienes varias tablas en la misma base de datos y tambin tienes varios controles data y a la vez varios controles DataGrid enlazados con esos controles data, lo nico que tendras que hacer es asignar a todos los controles data el path correcto de la base de datos. El resto de propiedades no hace falta cambiarlas ya que seguirn siendo los mismos valores.

Este primer ejemplo es para usar con acceso a datos DAO. Ahora veamos cmo hacer lo mismo pero con controles ADO.

Usando controles enlazados ADO


Tal como vamos a comprobar, lo que vamos a hacer en esta ocasin, (usando ADO), es casi lo mismo que en el caso de DAO, lo nico que cambiar sern los controles que vamos a usar, adems de que el control data de ADO no tiene las mismas propiedades que el de DAO. As que, veamos paso a paso cmo crear el proyecto, agregar los controles, enlazarlos con la base de datos, etc., etc. 1- Creamos un nuevo proyecto de VB6 2- En el men Proyecto (Project) seleccionamos Controles (Controls...), en el cuadro de dilogo tenemos que seleccionar el control data de ADO, el cual (en mi caso) tiene el nombre Microsoft ADO Data Control 6.0 (SP4) (OLEDB). 3- Repetimos el paso anterior, pero en esta ocasin seleccionamos Microsoft DataGrid Control 6.0 (SP5) (OLEDB). 4- Con los dos pasos anteriores tendremos en el Toolbox dos nuevos controles, hacemos doble-click en cada uno de ellos para agregarlos al formulario. 5- Seleccionamos el control data (Adodc1) para indicar la base de datos y la tabla que vamos a usar. En la ventana de propiedades seleccionamos ConnectionString y pulsamos en el botn con los tres puntos suspensivos para que se muestre el asistente de conexin. -De las tres opciones que nos muestra, seleccionamos la ltima: Use Connection String, pulsamos en el botn Build... y se mostrar otro cuadro de dilogo. -Seleccionamos la primera ficha (Provider) y de la lista de proveedores que muestra seleccionamos Microsoft.Jet.OLEDB.4.0 (si no se muestra, es que no tienes ese proveedor y la base de datos de ejemplo no te funcionar) -Pulsa en Next>> para indicar el nombre de la base de datos, se mostrar la segunda ficha (Connection). -Escribe el nombre de la base de datos en la caja de texto que hay bajo 1. Select or enter a database name o pulsa en el botn con los tres puntos para seleccionar una base (recuerda usar la base de datos que acompaa al cdigo la cual debe estar en el mismo directorio del proyecto) -No escribas nada en usuario y password, djalos con los valores predeterminados, ya que usaremos autentificacin de Windows para abrir la base. -Para comprobar que se puede abrir la base de datos, pulsa en el botn Test Connection y si todo va bien, te dir que la conexin ha funcionado correctamente. 6- Ahora vamos a indicar que tabla queremos usar. Asegrate que el control data est seleccionado y en la ventana de propiedades selecciona RecordSource y pulsa en el botn con los tres puntos para que se muestre el asistente. -De la primera lista desplegable selecciona 2- adCmdTable. -De la segunda lista selecciona la tabla que quieres usar (en nuestro caso ser Table1). 7- Ya tenemos asignado el control data para que sepa que base de datos y que tabla debe usar.

8- Ahora vamos a indicarle al DataGrid que use el control data como fuente de datos, por tanto selecciona el DataGrid y en la ventana de propiedades selecciona la propiedad DataSource y de la lista desplegable tienes que seleccionar el control data que tiene la conexin a la tabla que queremos usar, en nuestro caso Adodc1. 9- Pulsa F5 para probar que todo funciona bien. Con todos estos pasos tendremos una aplicacin similar al del ejemplo anterior y adems, con los mismos problemas, es decir, la base de datos que usar el ejecutable (el cual no tiene ni una lnea de cdigo) ser la que hemos indicado en el control data. Por tanto para que funcione, la base de datos tiene que estar en el path indicado en tiempo de diseo. Si hacemos la misma prueba que antes de compilar la aplicacin y mover el ejecutable y la base de datos a un directorio diferente, no funcionar.

La primera opcin de ADO para que funcione: Para que funcione debemos indicarle al data control dnde se encuentra la base de datos, pero resulta que el control data ADO no tiene una propiedad DatabaseName como su primo el data control DAO. En el control ADO tenemos que usar la cadena de conexin (como en las bases de datos de SQL Server), por tanto debemos modificar dicha cadena de conexin para que apunte a la base de datos adecuada. Aqu tenemos el cdigo a aadir al proyecto para que todo funcione correctamente: Private Sub Form_Load() ' Aqu se puede indicar el path de la base de datos: Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb;" & _ "Persist Security Info=False" Adodc1.Refresh Set DataGrid1.DataSource = Adodc1.Recordset End Sub En el caso de ADO, adems de indicarle el path correcto debemos usar este cdigo adicional: Adodc1.Refresh para que se carguen los datos desde la base de datos. Set DataGrid1.DataSource = Adodc1.Recordset porque debemos asignar los datos que el control data ha cargado. Esto ltimo no es "estrictamente" necesario, pero si no lo hacemos el contenido de la base de datos no ser el correcto. Por qu este cdigo extra? Por la sencilla razn de que el control data intentar obtener los datos de la base de datos y despus rellenar el DataGrid.

Adems, en el caso del control data de ADO si la base de datos no est en el sitio adecuado, se mostrar un mensaje de aviso de que la base de datos no se ha encontrado, aunque despus cargar bien los datos y funcionar correctamente. La segunda opcin de ADO para que funcione Por tanto es preferible no asignar en tiempo de diseo la cadena de conexin a la base de datos, ni tampoco asignar el RecordSource, en este caso, el cdigo a usar ser el siguiente:
Private Sub Form_Load() ' Aqu se puede indicar el path de la base de datos: Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb;" & _ "Persist Security Info=False" Adodc1.RecordSource = "Table1" Adodc1.Refresh Set DataGrid1.DataSource = Adodc1.Recordset End Sub

En este caso, lo que hacemos es indicar tambin la tabla de la que se extraern los datos. La tercera opcin de ADO para que funcione Otra opcin es no indicar el path de la base de datos, sino slo el nombre de la base, de esta forma, la base se buscar en el mismo path del ejecutable. Con lo cual la cadena de conexin podra quedar de la siguiente forma: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2000.mdb;Persist Security Info=False Y ya no ser necesario usar ningn cdigo en el evento Load del formulario.

Bueno, confo en que con estas explicaciones, (las cuales he preferido indicarlas en plan "paso a paso para principiantes" porque, casi con seguridad, todo esto lo necesitarn los que no tengan mucho manejo con el uso de bases de datos...), te quede ms claro porqu algunas veces las aplicaciones que usan los controles enlazados no funcionan al cambiar el path en el que se encuentra la base de datos.

DATA ENVIRONMENT Lo primero que veremos es cmo agregar el Entorno de Datos a nuestro proyecto. Pues bien, para ello nos iremos al men Proyecto y elegiremos la opcin Agregar Data Environment. En nuestro proyecto tendremos algo parecido a lo mostrado en la figura siguiente. Bueno lo primero que debemos hacer es dar un nombre a nuestro Entorno de Datos. Por ejemplo, dteEntornoDatos. Para ello nos colocaremos en la propiedad Nombre del DataEnvironment y escribiremos su nombre. Como vemos, debajo del Entorno de datos aparece un nuevo objeto, el objeto Connection. En un principio vamos a ponerle un nombre a esta conexin, y luego definiremos sus propiedades. El nombre que vamos a elegir para nuestra primera conexin va a ser el de Listados.

Porqu este nombre, bueno normalmente solemos darle a nuestros objetos, nombres descriptivos para los mismos, y como esta conexin va a contener los listados que van a generar nuestros informes, pues por eso le damos este nombre. Ahora vamos a definir las propiedades de la conexin. Nos situaremos encima de la conexin con el ratn, y pulsando el botn derecho del mismo elegimos la opcin Propiedades del men contextual. La figura a la izquierda, muestra las propiedades de nuestra conexin.

En la pestaa Proveedor, deberemos seleccionar el motor que se encargar del manejo de las tablas de la base de datos, que contiene la informacin que debe generar nuestros informes. Para nuestro ejemplo, seleccionaremos Microsoft Jet 3.51 OLE DB Provider, ya que nuestra base de datos est creada con Access 97. Ahora pulsamos el botn Siguiente y se abre la pestaa Conexin. En ella deberemos seleccionar la base de datos de la cual tomaremos la informacin para confeccionar los informes. En nuestro caso se ha seleccionado la base de datos Biblio.mdb, que se encuentra en el directorio VB98 de Visual Basic.

Te informamos cada semana de los nuevos cursos gratuitos que colocamos on-line para ti! Pon aqu tu e-mail y aprende gratis con nosotros

Data Report y Data Environment


La intencin de este artculo consiste en aclarar, la manera en que el objeto Data Report, interacta con los objetos Command del Data Environment cuando ambos estn enlazados en tiempo de diseo. Puntualmente, la apertura y cierre del Recordset. Sucede que he visto consultas relacionadas con esta situacin, en reiteradas oportunidades en distintos foros de programacin. Es entonces mi inquietud, intentar resolverlas por medio de este artculo. Muchas veces he visto en foros de programacin la siguiente consulta: "... cuando cierro el Data Report y lo vuelvo a abrir luego de haber agregado datos, el reporte no los muestra hasta que cierro la aplicacin. Luego al ejecutar el programa y mostrar el reporte la informacin nueva si aparece..." Lo que sucede aqu, es que al momento de utilizar la instruccin Datareport.Show se abre el Recordset perteneciente al objeto Command enlazado a la propiedad DataMember del reporte. Pero no sucede lo que uno esperara al cerrar el reporte. La situacin que genera este tipo de problemas de actualizacin (en rigor no es un problema de actualizacin de datos, mas bien es una dificultad para visualizarlos cabalmente), tiene que ver con que el programador usualmente asume que el recordset se cerrar automticamente al descargar el reporte, y esto no es as. Cuando un usuario cierra un reporte, y siempre hablando de un DataReport enlazado en tiempo de diseo al entorno de datos, el Recordset de datos no se cierra junto con l. Y la solucin, en realidad es muy sencilla. Hay que codificar el cierre del Recordset subyacente. A continuacin se expone cdigo que ejemplifica esta situacin: Private Sub Datareport1_Terminate() ' Cerramos el recordset en el evento terminate del reporte ' Previa verificacin del estado de ste para evitar errores ' en tiempo de ejecucin With Dataenvironment1.rsCommand1 If .State = adStateOpen Then .Close End If End With End Sub Nota: rsCommand1 es el recordset del objeto Command asociado al reporte.

Cmo crear un reporte usando Visual Basic


Captulo anterior: 7 - Opciones del men Captulo siguiente: 9 - Comando Introduccin 1. Visual Basic 2. Base de datos 3. Tablas 4. Formularios 5. La conexin de base de datos 6. Men 7. Opciones del men 8. Cmo crear un reporte usando Visual Basic 9. Comando 10. Reporte I 11. Reporte II 12. Reporte III 13. Reporte IV Para crear reportes en Visual Basic vamos a crear primero el Data Environment (Entorno de Datos) el cual es una herramienta para crear reportes tal como Crystal Reports o Access. Creando el Data Environment a) Haz clic en el botn Project de la barra de herramientas. b) Haz clic en Add Data Environment c) Y se abrir el Data Environment mostrando el nombre del proyecto en su barra de ttulo.

d) En la ventana aparece un pequeo icono de un reporte al cual puedes cambiarle el nombre fcilmente seleccionndolo y modificando su propiedad (Name) por otro como Reportes, etc. e) Ms abajo se puede ver otro objeto con una clavija elctrica llamado Connection1 al cual tambin puedes cambiarle el nombre modificando su propiedad (Name) por otro como Alumnos, Maestros, etc.

f) Ahora haz clic con el botn derecho del ratn sobre la Connection1 y haz clic en Properties... g) Y aparecer la caja Propiedades de vnculo de datos, haz clic en la opcin Conexin.

h) Haz clic en: Usar la cadena de conexin y haz clic en Generar. i) Y aparecer la caja Seleccionar origen de datos, haz clic en la opcin Origen de datos de equipo.

j) Selecciona el tipo de base de datos en donde se cre la base de datos, en nuestro caso MS Access Database y haz doble clic ah. k) Y aparecer la caja Conexin, haz clic en el botn Base de datos...

l) Y aparecer la caja Seleccionar base de datos, localiza la carpeta en donde se halla tu base de datos, seleccinala y haz clic en Aceptar.

m) Enseguida se vuelve a mostrar la caja Conexin tambin haz clic en Aceptar. n) Y se mostrar la caja Propiedades de vnculo de datos, mostrando en la caja de texto Cadena de conexin bajo Usar la cadena de conexin la ruta de la base de datos que hemos conectado, para finalizar la conexin haz clic en Aceptar.

Reporte II
Creando la estructura del reporte a) En Visual Basic haz clic en el botn Project de la barra de herramientas y haz clic en Add Data Report y se mostrar la caja DataReport1, la caja de herramientas y la caja de propiedades para trabajar en el DataReport.

b) Hay varias maneras de elaborar la estructura del reporte, vamos a emplear una muy sencilla, haz clic en la herramienta RptLabel y dibuja una etiqueta en la seccin 4, ReportHeader, y modifica su propiedad Caption con el ttulo que tendr el reporte. c) Ahora en la seccin 2 PageHeader, haz clic en RptLabel y coloca etiquetas con los ttulos de los encabezados de la tabla y modifica sus propiedades Font, ForeColor, etc. A tu gusto. d) Al terminar, haz clic en RptTextBox y coloca cajas de texto en la seccin 1 Detail. e) Ahora selecciona la primer caja de texto y haz clic en la cajita que se halla en la esquina superior izquierda para mostrar las propiedades de las cajas de texto y modifica sus propiedades como sigue: DataMember: Command1 DataField: selecciona el campo que corresponda de la tabla y repite los pasos para cada caja de texto para que se vea ms o menos as.

S-ar putea să vă placă și