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 interactúa con el motor de base de datos Microsoft Jet y permite crear aplicaciones preparadas para datos con la mínima cantidad de código posible. En esta sección se explica cómo utilizar el control Data y otros controles avanzados enlazados a datos para ver, modificar y actualizar información de una base de datos. 5.3.1 Introducción 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 terminología 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 Método 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 Métodos de Acceso a Datos

He aquí otros métodos 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 código. En esta sección 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 tecnología proporciona acceso a muchos formatos de base de datos y le permite crear aplicaciones que manejan datos sin necesidad de escribir código.

 Uso de Controles Enlazados a Datos Cuando enlaza un control enlazado a datos que ha colocado en un formulario, se muestran automáticamente los datos de la base de datos en el control enlazado. Si un usuario cambia los datos de un control enlazado, dichos cambios se actualizarán automáticamente en la base de datos en cuanto el usuario se desplace a otro registro. Muchos controles intrínsecos de Visual Basic están enlazados a datos, como es el caso de los controles CheckBox, Image, Label, PictureBox, TextBox, ListBox, ComboBox y los contenedores OLE.

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

Enlazar Controles

Después de establecer los valores de las propiedades para el control Data, es necesario enlazar al control Data los controles enlazados a datos individuales y después especificar qué campo de la tabla mostrará cada control. Uso de las Propiedades y métodos del Control Data Para especificar qué datos desea recuperar, debe establecer las propiedades DatabaseName y RecordSource de un control Data. Además, puede establecer las siguientes propiedades y métodos:       Propiedad Connect Propiedad Exclusive Propiedad ReadOnly Propiedad Recordset Propiedades BOFAction y EOFAction Método Refresh El Objeto Recordset En una aplicación 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, transfiriéndose al disco si es necesario.  Determinar los límites de un Recordset

Si utiliza código para cambiar la posición 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 acción indicada por el valor de la propiedad BOFAction o EOFAction. En la siguiente ilustración se muestra cómo las propiedades BOF y EOF determinan los límites 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 código: Data1.Recordset.MoveNext 'Va al registro siguiente. If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If Uso de las Propiedades y Métodos de Recordset Utilice los métodos y las propiedades del objeto Recordset para recuperar información del conjunto de registros, desplazarse por los registros y agregar, actualizar o eliminar registros.      Propiedades BOF y EOF Método AddNew de Recordset Método UpdateRecord del control Data Método CancelUpdate del control Data El método Delete

El siguiente código muestra el uso de las propiedades y métodos de un Recordset: Sub cmdCancel_Click () Data1.CancelUpdate End Sub

UpdateRecord End Sub Sub cmdAdd_Click () Data1. El evento Validate se produce como resultado de realizar las operaciones siguientes:  MoveFirst.Delete Data1.Sub cmdUpdate_Click () Data1.Recordset.3 Uso de Eventos del Control Data El control Data proporciona tres eventos que puede utilizar para mejorar la aplicación de base de datos: Validate. Puede utilizar el evento Validate para pedir al usuario que confirme los cambios realizados.3. save As Integer)  El argumento action El argumento action indica la operación que provocó el evento Validate.Recordset.MoveLast End If End Sub 5.Recordset.MoveNext If Data1. 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. MoveLast . MoveNext.  Sintaxis: El evento Validate tiene la siguiente sintaxis: Private Sub Data1_Validate (index As Integer.Recordset. Dichos eventos le permiten omitir parte del comportamiento predeterminado del control Data. Error y Reposition.Recordset. MovePrevious. Usar el Evento Validate Utilice el evento Validate para comprobar los datos antes de guardar un registro en la base de datos.AddNew End Sub Sub cmdDelete_Click () Data1.EOF Then Data1. action As Integer.

El número de registro es relativo a cero. puede que los datos del formulario tengan que presentarse de una forma distinta en el caso del nuevo registro.  Modificar la apariencia de un formulario Para cambiar la manera en que un formulario muestra información basándose en el registro seleccionado en ese momento hay que utilizar el evento Reposition. asigne al argumento action el valor vbDataActionCancel. Usar el Evento Reposition Utilice el evento Reposition para modificar la apariencia de un formulario o realizar una acción necesaria cuando se desplace a un nuevo registro. Para cancelar la acción de guardar puede asignar a save el valor False. Para que se seleccione la opción correcta para cada registro. Este evento tiene lugar cuando Visual Basic desplaza el puntero del registro actual a otro registro de la base de datos. puede modificar el título del control Data de forma que se muestre el registro número n.  El argumento save El argumento save indica si va a guardarse o no el registro. si trabajan por horas o si son becarios. Cada registro mostrará la información sobre un empleado distinto. Si save es True.  Tratar los cambios al desplazarse a un nuevo registro Cuando un usuario se desplaza a un nuevo registro mediante el control Data. escriba código en el evento Reposition. cuyas opciones pueden no ser las mismas para todos los registros. utilice la propiedad AbsolutePosition del objeto Recordset. los datos enlazados han cambiado. El código siguiente utiliza el evento Reposition para modificar la apariencia de un formulario: . También se produce la primera vez que se abre la base de datos. Para ver el número del registro actual. por lo que el primer registro es el 0. temporales.       AddNew Update Delete Find Establecer la propiedad Bookmark Cerrar la base de datos Descargar el formulario Para cancelar cualquiera de estas acciones. es posible que en un formulario que muestre registros de empleados haya distintas opciones dependiendo de si los empleados son fijos. Por ejemplo. Por ejemplo.

Los valores de los campos enlazados no cambian tras producirse un error.Value = True Else optJunior.Recordset. Si se produce un error de acceso a datos durante la actualización.Recordset("IdEmpleado") > 5 Then optSenior. el control Data actualizará el registro actual. se producirá el evento Error.AbsolutePosition + 1 End Sub Esta ilustración muestra el formulario basado en el código anterior. si un usuario modifica un campo y después hace clic en el control Data para desplazarse al siguiente registro. Utilice el evento Error para agregar tratamiento de errores personalizado al control Data. Por ejemplo. El usuario puede corregir los valores y hacer clic en el control Data para tratar de actualizar nuevamente el registro.Value = True End If Data1.Private Sub Data1_Reposition() Data1.AbsolutePosition If Data1.Caption = "Registro " & _ Data1. Usar el Evento Error El evento Error tiene lugar cuando un usuario interactúa con el control Data y se produce un error de acceso a datos.Recordset.Caption=Data1. .

Cuando asigne a la propiedad DataSource del control DBGrid un control Data. puede asignar al argumento Response el valor 0. Si no desea que se muestre el mensaje de error estándar. el control DBGrid le permite ver y modificar varios registros simultáneamente. . el control DBGrid se llenará automáticamente de datos y se establecerán automáticamente sus encabezados de columna a partir del conjunto de registros del control Data. Mostrar un mensaje de error personalizado Si no coloca código para tratar errores en el evento Error y se produce un error cuando un usuario interactúa con el control Data. 5. Al contrario que la mayoría de los controles enlazados a datos. Visual Basic muestra el mensaje de error y el programa continúa ejecutándose.4 Uso de Controles Enlazados a Datos ActiveX Además de los controles enlazados intrínsecos.3. Usar el Control DBGrid El control de cuadrícula enlazada a datos (control DBGrid) permite que los usuarios de su aplicación de base de datos trabajen con varios registros a la vez. En esta sección se describen algunos controles ActiveX enlazados a datos avanzados. Visual Basic ofrece varios controles ActiveX enlazados a datos.  Mostrar múltiples registros DBGrid es un control ActiveX que muestra una serie de filas y columnas que representan registros y campos de un objeto Recordset. En la siguiente ilustración se muestra un formulario que utiliza un control DBGrid para presentar registros procedentes de la base de datos Neptuno.

 Usar el evento BeforeUpdate El evento BeforeUpdate tiene lugar antes de que se muevan datos desde un control DBGrid al búfer de copia del control Data. de pedido en la tabla Detalles de pedidos. Por ejemplo.El control DBGrid tiene varias propiedades que especifican cómo se comporta el control. etc. si asigna a la propiedad AllowUpdate el valor True. un usuario puede modificar los datos del control. cuando se enlaza a un control Data. También puede establecer propiedades para columnas individuales del control DBGrid. . cambie el objeto Recordset asociado. Puede validar los datos y cancelar la actualización si es necesario. Por ejemplo: MsgBox DBGrid1. Puede cambiar el título de la columna.Col).  Obtener y establecer texto de la celda actual Utilice la colección Columns del control DBGrid para recuperar el texto de la celda seleccionada actualmente en tiempo de ejecución. cambiar el campo de datos al que se enlaza la columna. Usar el Control MSFlexGrid El control MSFlexGrid proporciona características avanzadas para la presentación de datos en una cuadrícula. agregar valores predeterminados. Puede utilizar el control MSFlexGrid para combinar filas o columnas de información y así agrupar la información relacionada. En la siguiente ilustración se muestran registros agrupados por Id.Text Para cambiar la información del control DBGrid. Es similar al control DBGrid aunque. el control MSFlexGrid muestra datos de sólo lectura.Columns(DBGrid1.

) y utilizar el Id. Acceso a base de datos de Access 2000 Usando el ADO data control . La ilustración siguiente muestra un formulario que utiliza el control DBCombo para presentar nombres de categorías de la tabla Productos. correspondiente cuando el usuario agregue o modifique datos. establezca la propiedad BoundColumn. establezca las propiedades DataSource y DataField.  Establecer propiedades del control DBCombo Para determinar el valor que se presenta en el control DBCombo. Para establecer la relación entre la tabla que contiene los valores de búsqueda y la tabla que se está modificando realmente. Por ejemplo. Para determinar qué campo de la base de datos se actualiza cuando un usuario cambia un valor. El cuadro combinado enlazado a datos contiene todos los valores de ese campo.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 automáticamente una lista de valores de un Recordset. Esto resulta útil para proporcionar valores válidos al usuario. puede presentar una lista de nombres de categoría válidos (en vez de Id.  Obtener información de una tabla de búsqueda También puede utilizar estos controles en aplicaciones de "tabla de búsqueda". asigne a la propiedad RowSource un nombre de control Data y a la propiedad ListField un nombre de campo.

(puede que si tienes la versión en castellano del VB. en la ventana de propiedades pulsa en Custom.5.. estará seleccionada la opción "Use Connection String". selecciona Pegar.. lo mismo dará que la base de datos haya sido creada con Access 97 o con el Access 2000.0 de Visual Basic. ancho 2955.) En la ficha General.Publicado: 31/Ago/1999 Actualizado: 31/Ago/1999 Si has intentado usar una base de datos creada o convertida con el Access 2000. pulsa en "Next>>" y selecciona la base de datos que quieres usar. te aguantas. pero espero que no te lies.... yo le he dado estos valores: alto 315. pulsa en el botón "Build. ya que la versión que tengo está en inglés... Te mostrará un cuadro de diálogo." Te mostrará otro cuadro de diálogo. Esto es porque el nuevo formato de Access usa el motor Jet versión 4. y espera un poco que ya mismo termino. no te muestre lo que yo te digo. en Proyecto/Componentes. Ahora vamos a configurar el ADO datacontrol: Selecciona el datacontrol. Pero si tienes la versión 6. cámbiale la altura a un valor pequeño: 315 está bien. (si tienes la que . Crea un array del Text1 recién añadido: Selecciona el Text1. Nota: En el zip con el código de ejemplo se acompaña una base de datos de prueba creada con Access 97 y otra con el Access 2000... te habrás llevado una pequeña sorpresa al ver que usando el Data control que se incluye en el Visual Basic no te permite hacerlo. En el siguiente código veremos cómo abrir y movernos en una base de datos..... selecciona Microsoft ADO Data Control (OLEDB).0 y los datacontrol DAO sólo "entienden" hasta la versión 3. Vuelve a pegar de nuevo y se creará un tercer Text1... Ahora tendrás tres controles Text1 con los índices desde 0 a 2 Si te parece demasiado "básico" todos estos pasos. selecciona Microsoft Jet 4.. pulsa en cualquier lado del Form y pulsa el ratón derecho del ratón. en este caso.. puedes usarlas sin problemas. responde que SI. o bien has conseguido las DLLs de ADO (ActiveX Data Object). cambia el tamaño.0 OLE DB Provider. Para empezar: Crea un nuevo proyecto. en la ficha "Provider". sitúalo donde más coraje te de y añade un TextBox. incluso con el ADO Datacontrol. te preguntará si quieres crear un array del control Text1. pulsa Aceptar y verás que se añade un nuevo control a la barra de herramientas: ¡Ese será el control que usaremos! Haz dobleclick en ese control para que se añada al formulario. pulsa el botón derecho y copialo..

pero para el de índice 1.Refresh Nota: En el código de ejemplo asignaremos en tiempo de ejecución la base de datos y demás conexiones necesarias. Selecciona la propiedad RecordSource y pulsa en el botón. selecciona: 2-adCmdTable.0. pulsa en "Aceptar" dos veces para que se cierren los cuadros de diálogo.OLEDB. el resto de opciones déjalos como está.4.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1. selecciona el nombre de la tabla que quieres usar. selecciona "Nombre" Haz lo mismo con los otros dos Text1.están incluidas en el ZIP.ConnectionString = "Provider=Microsoft. se llamará db2000. ya que se supone que aceptará textos más grandes porque el tipo de campo es "Memo" Ya puedes pulsar en F5 para probar que todo esto funciona. 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 selección actual. En la ventana de propiedades. Selecciona el Text1 con índice 0." & _ "Data Source=" & App. De la lista desplegable (Command type).mdb" Adodc1. la lista "Table or Stored Procedure Name" se habrá habilitado. en este caso Table1 y pulsa en Aceptar. te mostrará un cuadro de diálogo.Jet. para ello asígnale estos valores al datacontrol: (por ejemplo en el evento Form_Load) ' Indicar la base de datos a usar Adodc1. .Path & "\db2000.CursorType = adOpenDynamic ' Conectarlo a la tabla de prueba Adodc1. Ahora tenemos que decirle que tabla usar y otras cosillas. selecciona DataField y de la lista desplegable. Esto mismo se puede hacer mediante código. selecciona "e-mail" y para el otro: "Comentario" Este último control sería conveniente que lo hicieras más grande y MultiLine. Ahora será necesario "ligar" los cuadros de texto con el Datacontrol y los campos correspondientes: Selecciona los tres Text1. Selecciona la propiedad CursorType y de la lista desplegable selecciona 2-adOpenDynaset.mdb).

_ ByVal pRecordset As ADODB. pero si quieres hacerlo manualmente.DataField = "Comentario" End Sub Para que el Caption del data control nos muestre el número de registro.DataField = "Nombre" Text1(1).OLEDB.ConnectionString = "Provider=Microsoft.Jet." & _ "Data Source=" & App.EventReasonEnum. añade lo siguiente en el evento Form_Load: Private Sub Form_Load() ' Indicar la base de datos a usar Adodc1.mdb" Adodc1.DataSource = Adodc1 Next ' Asignar los nombres de los campos Text1(0).0.Recordset) ' Mostrar el ID del registro actual .Refresh ' Conectar manualmente los Text1 al recordset Dim i As Long ' Asignar el control data For i = 0 To 2 Set Text1(i).EventStatusEnum. _ ByVal pError As ADODB.4.CursorType = adOpenDynamic ' Conectarlo a la tabla de prueba Adodc1. añade este código: Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.Error.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1.Realmente no es necesario añadir nada de código.DataField = "e-mail" Text1(2).Path & "\db2000. en este caso el campo ID de la tabla. _ adStatus As ADODB.

Recordset. creo que con esto tienes para empezar. 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 . al primero lo llamas cmdAdd y en el Caption escribe Añadir.Caption = "ID del Registro: " & pRecordset!ID ' También se puede usar: Adodc1.Recordset!ID Err = 0 End Sub Añadir y borrar registros de la tabla. añade dos botones al formulario. al otro botón le cambias el nombre a cmdDel y en el Caption escribe: Eliminar.Recordset. dará error On Local Error Resume Next ' Mostrar el ID del registro actual usando el recordset pasado como parámetro 'Adodc1. Añade el siguiente código: ' Private Sub cmdAdd_Click() Adodc1.Delete End Sub Bueno.Caption = "ID del Registro: " & Adodc1.' si se pasa del primero o del último.AddNew End Sub Private Sub cmdDel_Click() Adodc1. Para tener estas dos opciones. en otra ocasión te mostraré cómo hacer esto mismo pero sin usar el data control.

Seguramente cuando te explique la situación en la que puede ser útil saber lo que te voy a contar. Los precedentes (la situación) Empecemos el ejemplo usando DAO. Usando controles enlazados DAO Estos son los pasos que debemos seguir para poder hacer el proyecto de prueba: ... cambies de opinión. ya que eso se ha dicho y explicado en varias ocasiones. pues. Seguramente si lees el párrafo anterio en la que te digo lo que te voy a explicar. no te parecerá nada del otro mundo. ya que en VB6 puede que haya más gente (sobre todo los que empiezan) que usen el DataControl que está de forma predeterminada en la barra de herramientas. es decir cuando la aplicación esté ejecutándose. Pero como resulta que aún hay mucha gente que usa los controles "enlazados" y los data control y los asigna en modo de diseño..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 cómo indicar el path en el que se encuentra la base de datos.. para ellos seguros que le irá bien esta "historia" que voy a contar. pero lo haremos en tiempo de ejecución.

De ese cuadro de diálogo seleccionaremos Microsoft Data Bound Grid Control (también se indicará la versión del VB y el SP que se está usando. nos mostrará un cuadro de diálogo con los controles ActiveX que podemos añadir a nuestra aplicación. lo añadiremos al formulario. Hecho todo esto. De esa forma será más fácil seguir las indicaciones de este artículo. 2.. seleccione la propiedad DatabaseName y busque una base de datos (pulsando en el botón con los tres puntos suspensivos). Para ello tendremos que seleccionar la propiedad RecordSource y elegir de la lista desplegable la tabla a usar.Creamos un nuevo proyecto de Visual Basic 6 (cuando digo VB6. 3. . de forma que podamos manejar de forma simple los datos de nuestra base de datos y de la tabla seleccionada.. tendremos que indicarle la tabla a la que queremos acceder. Copia esa base de datos (db2000. En este ejemplo será Data1 (que debería ser el único que se muestre).En el menú Proyecto (Project) seleccionamos Componentes (Components. Esto añadirá a la barra de herramientas el control DataGrid y haciendo doble-click en él. Para ello nos vamos a la ventana de propiedades (el DataGrid debe estar seleccionado) y buscamos la propiedad DataSource.mdb) en el mismo directorio del proyecto y úsala para asignarla al control data. se vaya a la ventana de propiedades.Seleccionamos el nuevo control que tenemos en el formulario. añadimos el control Data. en mi caso sería 5. podemos pulsar F5 para ejecutar la aplicación 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. lo cambiamos de tamaño y posición y ahora le indicaremos de dónde obtendrá los datos. también se puede aplicar a VB5 e incluso a VB4). Estos tres pasos serán los que nos permitan acceder a una base de datos desde nuestro proyecto de VB6. que está en el Toolbox y se creará un objeto en el formulario llamado Data1. 2.Una vez que hemos indicado el nombre de la base de datos.0 (SP3)). lo más usual es que el usuario seleccione el DataControl.Ahora le asignamos la base de datos que usaremos.1. Ahora vamos a añadir un control DataGrid. de la lista desplegable seleccionamos el DataControl que usaremos para obtener los datos. Para añadir un DataGrid tendremos que hacer lo siguiente: 1. Nota: En el zip con el código completo he incluido una base de datos de prueba.).

. 2. ¿que pasa si el disco E del cliente es un CD-ROM? .. Por ejemplo. 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. ya sabes. Para compilar el proyecto y crear el ejecutable.Para probar que todo esto funciona como debe vamos a compilar el proyecto (crear el ejecutable) y veamos si siempre funciona.Crea un directorio en otro sitio. tendríamos que volver a copiar la base de datos en el directorio en el que estaba (el del proyecto). debería mostrarte lo mismo que cuando pulsaste F5 desde el IDE (entorno de desarrollo) de VB.Pégalos en el nuevo directorio. Si has seguido los pasos de forma correcta. nos indicará que no se puede encontrar la base de datos y nos mostrará el path en el que estaba anteriormente.Abre el ejecutable (ejecútalo..Asegúrate de que has cerrado la aplicación. doble-click. selecciona la opción Make del menú File (si tienes el VB en español. Haciendo que falle todo esto. Ahora ve al directorio en el que está el EXE y ejecútalo (haz doble-click en él). El problema (colateral): Pero. 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. Para probar que no siempre funcionará. 5.. 3. tal como se comenta en la nota) 4.) Al ejecutarse la aplicación.. es distribuir esta aplicación y la base de datos.Corta el ejecutable y la base de datos (se supone que la base de datos estaba en el mismo directorio del proyecto. peor aún.. ya que no se ha podido abrir la base de datos y por tanto no se pueden "ver" esos datos... pero en el DataGrid no habrá nada. Como hemos podido comprobar. vamos a hacer ahora lo siguiente: 1. Compruébalo moviendo (cortar y pegar) la base de datos al directorio del proyecto. seguramente tendrá otros nombres). Cierra también el VB6. La aplicación se abrirá. La solución: Para que la aplicación vuelva a funcionar. imagínate que lo que quieres hacer.

simplemente tenemos que usar ese directorio a la propiedad DatabaseName del data control. En este código. Si la base de datos está en el mismo directorio que el ejecutable.Pues que no funcionará el programa. ¿Cual es la mejor solución? Creo que sería mejor que el programa pudiera funcionar si tanto el ejecutable y la base de datos están en el mismo directorio. Este primer ejemplo es para usar con acceso a datos DAO.DatabaseName = App. El resto de propiedades no hace falta cambiarlas ya que seguirán siendo los mismos valores. Y en caso de que si tenga un disco E. el E o el X. Ahora veamos cómo hacer lo mismo pero con controles ADO. lo único que tendrías que hacer es asignar a todos los controles data el path correcto de la base de datos. Es decir. nos dará igual si el disco en el que está la base y el exe es el disco C. podemos hacer lo siguiente: Private Sub Form_Load() Data1. tendremos que crear esos directorios para que todo funcione. etc. ¿Cómo podemos hacerlo? Indicándole al programa dónde está la base de datos.. además de que el directorio puede ser cualquiera. indicamos que el directorio en el que se encuentra la base de datos es el mismo directorio desde el que se está ejecutando la aplicación. .mdb" End Sub De esta forma le indicamos al control data dónde localizar la base de datos y todo volverá a funcionar de forma satisfactoria. y lo más importante es: sea cual sea ese directorio.. Nota: Si tienes varias tablas en la misma base de datos y también tienes varios controles data y a la vez varios controles DataGrid enlazados con esos controles data. Por ejemplo si leemos el path de un fichero de configuración (INI) o desde el registro de Windows usando GetSetting. En el caso de que la base de datos esté en otro directorio.Path & "\db2000.

0 (si no se muestra. -Seleccionamos la primera ficha (Provider) y de la lista de proveedores que muestra seleccionamos Microsoft..Usando controles enlazados ADO Tal como vamos a comprobar. te dirá que la conexión ha funcionado correctamente. agregar los controles. pulsa en el botón Test Connection y si todo va bien. y se mostrará otro cuadro de diálogo. 7. es casi lo mismo que en el caso de DAO.adCmdTable. etc.0 (SP4) (OLEDB).OLEDB.. Asegúrate que el control data está seleccionado y en la ventana de propiedades selecciona RecordSource y pulsa en el botón con los tres puntos para que se muestre el asistente. pero en esta ocasión seleccionamos Microsoft DataGrid Control 6.Repetimos el paso anterior. hacemos doble-click en cada uno de ellos para agregarlos al formulario. déjalos con los valores predeterminados. se mostrará la segunda ficha (Connection). -Para comprobar que se puede abrir la base de datos.Ahora vamos a indicar que tabla queremos usar. seleccionamos la última: Use Connection String. 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.0 (SP5) (OLEDB). 1. el cual (en mi caso) tiene el nombre Microsoft ADO Data Control 6. 5. 6. -Escribe el nombre de la base de datos en la caja de texto que hay bajo 1.Seleccionamos el control data (Adodc1) para indicar la base de datos y la tabla que vamos a usar. veamos paso a paso cómo crear el proyecto. -De la segunda lista selecciona la tabla que quieres usar (en nuestro caso será Table1). lo que vamos a hacer en esta ocasión. Así que. en el cuadro de diálogo tenemos que seleccionar el control data de ADO.Creamos un nuevo proyecto de VB6 2. además de que el control data de ADO no tiene las mismas propiedades que el de DAO. -De las tres opciones que nos muestra. -De la primera lista desplegable selecciona 2. etc. lo único que cambiará serán los controles que vamos a usar.. En la ventana de propiedades seleccionamos ConnectionString y pulsamos en el botón con los tres puntos suspensivos para que se muestre el asistente de conexión. pulsamos en el botón Build.. ya que usaremos autentificación de Windows para abrir la base.). 4.Con los dos pasos anteriores tendremos en el Toolbox dos nuevos controles.En el menú Proyecto (Project) seleccionamos Controles (Controls. (usando ADO).Jet. enlazarlos con la base de datos.Ya tenemos asignado el control data para que sepa que base de datos y que tabla debe usar. .4. 3.. Select or enter a database name o pulsa en el botón con los tres puntos para seleccionar una base (recuerda usar la base de datos que acompaña al código la cual debe estar en el mismo directorio del proyecto) -No escribas nada en usuario y password.

DataSource = Adodc1.mdb. pero resulta que el control data ADO no tiene una propiedad DatabaseName como su primo el data control DAO. con los mismos problemas. pero si no lo hacemos el contenido de la base de datos no será el correcto.8.DataSource = Adodc1. Con todos estos pasos tendremos una aplicación similar al del ejemplo anterior y además. por tanto debemos modificar dicha cadena de conexión para que apunte a la base de datos adecuada. .Refresh Set DataGrid1.Jet. En el control ADO tenemos que usar la cadena de conexión (como en las bases de datos de SQL Server). Set DataGrid1. Por tanto para que funcione.Ahora vamos a indicarle al DataGrid que use el control data como fuente de datos.Pulsa F5 para probar que todo funciona bien. 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 conexión a la tabla que queremos usar. La primera opción de ADO para que funcione: Para que funcione debemos indicarle al data control dónde se encuentra la base de datos. ¿Por qué este código extra? Por la sencilla razón de que el control data intentará obtener los datos de la base de datos y después rellenar el DataGrid. en nuestro caso Adodc1. 9." & _ "Persist Security Info=False" Adodc1. es decir. no funcionará. Si hacemos la misma prueba que antes de compilar la aplicación y mover el ejecutable y la base de datos a un directorio diferente.Path & "\db2000. la base de datos que usará el ejecutable (el cual no tiene ni una línea de código) será la que hemos indicado en el control data. la base de datos tiene que estar en el path indicado en tiempo de diseño.0. Aquí tenemos el código a añadir al proyecto para que todo funcione correctamente: Private Sub Form_Load() ' Aquí se puede indicar el path de la base de datos: Adodc1.Recordset End Sub En el caso de ADO." & _ "Data Source=" & App.Refresh para que se carguen los datos desde la base de datos. además de indicarle el path correcto debemos usar este código adicional: Adodc1.ConnectionString = "Provider=Microsoft.OLEDB.Recordset porque debemos asignar los datos que el control data ha cargado. Esto último no es "estrictamente" necesario.4.

se mostrará un mensaje de aviso de que la base de datos no se ha encontrado. en este caso.. ." & _ "Data Source=" & App.Recordset End Sub En este caso.DataSource = Adodc1. La tercera opción de ADO para que funcione Otra opción es no indicar el path de la base de datos.Además.ConnectionString = "Provider=Microsoft. el código a usar será el siguiente: Private Sub Form_Load() ' Aquí se puede indicar el path de la base de datos: Adodc1.4.mdb. (las cuales he preferido indicarlas en plan "paso a paso para principiantes" porque. la base se buscará en el mismo path del ejecutable.Data Source=db2000.OLEDB.Jet. todo esto lo necesitarán los que no tengan mucho manejo con el uso de bases de datos. confío en que con estas explicaciones.. casi con seguridad.Persist Security Info=False Y ya no será necesario usar ningún código en el evento Load del formulario.0.Path & "\db2000.4. te quede más 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. de esta forma.OLEDB. Bueno.Jet. ni tampoco asignar el RecordSource.). aunque después cargará bien los datos y funcionará correctamente.0.Refresh Set DataGrid1. en el caso del control data de ADO si la base de datos no está en el sitio adecuado. Con lo cual la cadena de conexión podría quedar de la siguiente forma: Provider=Microsoft.RecordSource = "Table1" Adodc1. lo que hacemos es indicar también la tabla de la que se extraerán los datos. La segunda opción de ADO para que funcione Por tanto es preferible no asignar en tiempo de diseño la cadena de conexión a la base de datos.mdb." & _ "Persist Security Info=False" Adodc1. sino sólo el nombre de la base.

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

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

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

¡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 .

Y la solución.Data Report y Data Environment La intención de este artículo consiste en aclarar. intentar resolverlas por medio de este artículo. Luego al ejecutar el programa y mostrar el reporte la información nueva si aparece. mas bien es una dificultad para visualizarlos cabalmente). el Recordset de datos no se cierra junto con él. interactúa con los objetos Command del Data Environment cuando ambos están enlazados en tiempo de diseño. Es entonces mi inquietud. la manera en que el objeto Data Report. en reiteradas oportunidades en distintos foros de programación.rsCommand1 If .." Lo que sucede aquí. Puntualmente.State = adStateOpen Then ... Sucede que he visto consultas relacionadas con esta situación. la apertura y cierre del Recordset. el reporte no los muestra hasta que cierro la aplicación. Muchas veces he visto en foros de programación la siguiente consulta: ". cuando cierro el Data Report y lo vuelvo a abrir luego de haber agregado datos. . Hay que codificar el cierre del Recordset subyacente. y siempre hablando de un DataReport enlazado en tiempo de diseño al entorno de datos. La situación que genera este tipo de problemas de actualización (en rigor no es un problema de actualización de datos. Cuando un usuario cierra un reporte. en realidad es muy sencilla.Close End If End With End Sub Nota: rsCommand1 es el recordset del objeto Command asociado al reporte.. A continuación se expone código que ejemplifica esta situación: Private Sub Datareport1_Terminate() ' Cerramos el recordset en el evento terminate del reporte ' Previa verificación del estado de éste para evitar errores ' en tiempo de ejecución With Dataenvironment1. y esto no es así.Show se abre el Recordset perteneciente al objeto Command enlazado a la propiedad DataMember del reporte. tiene que ver con que el programador usualmente asume que el recordset se cerrará automáticamente al descargar el reporte. es que al momento de utilizar la instrucción Datareport. Pero no sucede lo que uno esperaría al cerrar el reporte.

.Opciones del menú Capítulo siguiente: 9 . Menú 7. Creando el Data Environment a) Haz clic en el botón Project de la barra de herramientas.Cómo crear un reporte usando Visual Basic Capítulo anterior: 7 . La conexión de base de datos 6. Cómo crear un reporte usando Visual Basic 9. Tablas 4. b) Haz clic en Add Data Environment c) Y se abrirá el Data Environment mostrando el nombre del proyecto en su barra de título.Comando Introducción 1. Reporte I 11. 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. Visual Basic 2. Opciones del menú 8. Base de datos 3. Reporte III 13. Reporte II 12. Comando 10. Formularios 5.

.d) En la ventana aparece un pequeño icono de un reporte al cual puedes cambiarle el nombre fácilmente seleccionándolo y modificando su propiedad (Name) por otro como Reportes. etc.. haz clic en la opción Conexión. . f) Ahora haz clic con el botón derecho del ratón sobre la Connection1 y haz clic en Properties. g) Y aparecerá la caja Propiedades de vínculo de datos. etc. Maestros. e) Más abajo se puede ver otro objeto con una clavija eléctrica llamado Connection1 al cual también puedes cambiarle el nombre modificando su propiedad (Name) por otro como Alumnos.

haz clic en la opción Origen de datos de equipo. en nuestro caso MS Access Database y haz doble clic ahí. k) Y aparecerá la caja Conexión.. haz clic en el botón Base de datos. j) Selecciona el tipo de base de datos en donde se creó la base de datos. i) Y aparecerá la caja Seleccionar origen de datos.h) Haz clic en: Usar la cadena de conexión y haz clic en Generar. ..

para finalizar la conexión haz clic en Aceptar. m) Enseguida se vuelve a mostrar la caja Conexión también haz clic en Aceptar.l) Y aparecerá la caja Seleccionar base de datos. selecciónala y haz clic en Aceptar. mostrando en la caja de texto Cadena de conexión bajo Usar la cadena de conexión la ruta de la base de datos que hemos conectado. . localiza la carpeta en donde se halla tu base de datos. n) Y se mostrará la caja Propiedades de vínculo de datos.

c) Ahora en la sección 2 PageHeader. etc. 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 más o menos así. y modifica su propiedad Caption con el título que tendrá el reporte. vamos a emplear una muy sencilla. . haz clic en la herramienta RptLabel y dibuja una etiqueta en la sección 4.Reporte II Creando la estructura del reporte a) En Visual Basic haz clic en el botón Project de la barra de herramientas y haz clic en Add Data Report y se mostrará la caja DataReport1. ReportHeader. b) Hay varias maneras de elaborar la estructura del reporte. haz clic en RptTextBox y coloca cajas de texto en la sección 1 Detail. ForeColor. la caja de herramientas y la caja de propiedades para trabajar en el DataReport. d) Al terminar. A tu gusto. haz clic en RptLabel y coloca etiquetas con los títulos de los encabezados de la tabla y modifica sus propiedades Font.

Sign up to vote on this title
UsefulNot useful