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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Porqué este nombre. pues por eso le damos este nombre. Ahora vamos a definir las propiedades de la conexión. 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. . muestra las propiedades de nuestra conexión. bueno normalmente solemos darle a nuestros objetos. La figura a la izquierda. y como esta conexión va a contener los listados que van a generar nuestros informes. nombres descriptivos para los mismos.

51 OLE DB Provider. que se encuentra en el directorio VB98 de Visual Basic. ya que nuestra base de datos está creada con Access 97. deberemos seleccionar el motor que se encargará del manejo de las tablas de la base de datos. Para nuestro ejemplo.En la pestaña Proveedor. 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. que contiene la información que debe generar nuestros informes. seleccionaremos Microsoft Jet 3.mdb. Ahora pulsamos el botón Siguiente y se abre la pestaña Conexión. .

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

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

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

f) Ahora haz clic con el botón derecho del ratón sobre la Connection1 y haz clic en Properties. etc. Maestros. . etc. 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..

. en nuestro caso MS Access Database y haz doble clic ahí. haz clic en el botón Base de datos.h) Haz clic en: Usar la cadena de conexión y haz clic en Generar. 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. k) Y aparecerá la caja Conexión. haz clic en la opción Origen de datos de equipo...

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

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

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.