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

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

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

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

Visual Basic muestra el mensaje de error y el programa continúa ejecutándose. En esta sección se describen algunos controles ActiveX enlazados a datos avanzados. 5. 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.4 Uso de Controles Enlazados a Datos ActiveX Además de los controles enlazados intrínsecos. puede asignar al argumento Response el valor 0.3. 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 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. Visual Basic ofrece varios controles ActiveX enlazados a datos. 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 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. Cuando asigne a la propiedad DataSource del control DBGrid un control Data. Si no desea que se muestre el mensaje de error estándar. Al contrario que la mayoría de los controles enlazados a datos. el control DBGrid le permite ver y modificar varios registros simultáneamente.

Puede utilizar el control MSFlexGrid para combinar filas o columnas de información y así agrupar la información relacionada.Col). de pedido en la tabla Detalles de pedidos. Por ejemplo. Por ejemplo: MsgBox DBGrid1. etc.  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.Columns(DBGrid1. si asigna a la propiedad AllowUpdate el valor True. cambiar el campo de datos al que se enlaza la columna. Puede cambiar el título de la columna. cuando se enlaza a un control Data. . En la siguiente ilustración se muestran registros agrupados por Id.El control DBGrid tiene varias propiedades que especifican cómo se comporta el control. También puede establecer propiedades para columnas individuales del control DBGrid. el control MSFlexGrid muestra datos de sólo lectura. Usar el Control MSFlexGrid El control MSFlexGrid proporciona características avanzadas para la presentación de datos en una cuadrícula. un usuario puede modificar los datos del control. Es similar al control DBGrid aunque. Puede validar los datos y cancelar la actualización si es necesario. agregar valores predeterminados. cambie el objeto Recordset asociado.Text Para cambiar la información del control DBGrid.  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.

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

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

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

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

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

Seguramente si lees el párrafo anterio en la que te digo lo que te voy a explicar. cambies de opinión.. Seguramente cuando te explique la situación en la que puede ser útil saber lo que te voy a contar. Usando controles enlazados DAO Estos son los pasos que debemos seguir para poder hacer el proyecto de prueba: . para ellos seguros que le irá bien esta "historia" que voy a contar. pero lo haremos en tiempo de ejecución... 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. pues. es decir cuando la aplicación esté ejecutándose. 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.. no te parecerá nada del otro mundo. Los precedentes (la situación) Empecemos el ejemplo usando DAO.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. ya que eso se ha dicho y explicado en varias ocasiones.

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

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

DatabaseName = App. . 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. nos dará igual si el disco en el que está la base y el exe es el disco C.Pues que no funcionará el programa. Es decir. 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. El resto de propiedades no hace falta cambiarlas ya que seguirán siendo los mismos valores. y lo más importante es: sea cual sea ese directorio. ¿Cómo podemos hacerlo? Indicándole al programa dónde está la base de datos. Este primer ejemplo es para usar con acceso a datos DAO. el E o el X. etc.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. ¿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. Si la base de datos está en el mismo directorio que el ejecutable.. lo único que tendrías que hacer es asignar a todos los controles data el path correcto de la base de datos. En el caso de que la base de datos esté en otro directorio. Y en caso de que si tenga un disco E.Path & "\db2000. En este código. podemos hacer lo siguiente: Private Sub Form_Load() Data1. además de que el directorio puede ser cualquiera. Ahora veamos cómo hacer lo mismo pero con controles ADO. tendremos que crear esos directorios para que todo funcione.. simplemente tenemos que usar ese directorio a la propiedad DatabaseName del data control.

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

¿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 el control ADO tenemos que usar la cadena de conexión (como en las bases de datos de SQL Server). la base de datos tiene que estar en el path indicado en tiempo de diseño.ConnectionString = "Provider=Microsoft. Por tanto para que funcione.Refresh para que se carguen los datos desde la base de datos.Ahora vamos a indicarle al DataGrid que use el control data como fuente de datos. es decir. .mdb. 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.DataSource = Adodc1. no funcionará.0. con los mismos problemas.Path & "\db2000. Set DataGrid1. Esto último no es "estrictamente" necesario. 9.Recordset porque debemos asignar los datos que el control data ha cargado." & _ "Persist Security Info=False" Adodc1.Jet. además de indicarle el path correcto debemos usar este código adicional: Adodc1. en nuestro caso Adodc1. por tanto debemos modificar dicha cadena de conexión para que apunte a la base de datos adecuada. 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 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.Pulsa F5 para probar que todo funciona bien.Recordset End Sub En el caso de ADO. 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. 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.DataSource = Adodc1.8. pero si no lo hacemos el contenido de la base de datos no será el correcto." & _ "Data Source=" & App.OLEDB.4. Con todos estos pasos tendremos una aplicación similar al del ejemplo anterior y además. pero resulta que el control data ADO no tiene una propiedad DatabaseName como su primo el data control DAO.Refresh Set DataGrid1.

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

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

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

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

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

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

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

. Maestros. etc. f) Ahora haz clic con el botón derecho del ratón sobre la Connection1 y haz clic en Properties. haz clic en la opción Conexión. . 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.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. g) Y aparecerá la caja Propiedades de vínculo de datos. etc..

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

selecciónala y haz clic en Aceptar.l) Y aparecerá la caja Seleccionar base de datos. m) Enseguida se vuelve a mostrar la caja Conexión también haz clic en Aceptar. . n) Y se mostrará la caja Propiedades de vínculo de datos. localiza la carpeta en donde se halla tu base de datos. 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. para finalizar la conexión haz clic en Aceptar.

c) Ahora en la sección 2 PageHeader. haz clic en RptTextBox y coloca cajas de texto en la sección 1 Detail. la caja de herramientas y la caja de propiedades para trabajar en el DataReport. b) Hay varias maneras de elaborar la estructura del reporte. A tu gusto. 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í. . haz clic en RptLabel y coloca etiquetas con los títulos de los encabezados de la tabla y modifica sus propiedades Font. ForeColor. y modifica su propiedad Caption con el título que tendrá el reporte. vamos a emplear una muy sencilla. ReportHeader. d) Al terminar. 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. etc.

Sign up to vote on this title
UsefulNot useful