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

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

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

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

Cuando asigne a la propiedad DataSource del control DBGrid un control Data. 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. 5. Si no desea que se muestre el mensaje de error estándar. 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. 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. puede asignar al argumento Response el valor 0.3. el control DBGrid le permite ver y modificar varios registros simultáneamente. En la siguiente ilustración se muestra un formulario que utiliza un control DBGrid para presentar registros procedentes de la base de datos Neptuno. En esta sección se describen algunos controles ActiveX enlazados a datos avanzados. . Visual Basic ofrece varios controles ActiveX enlazados a datos. 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

g) Y aparecerá la caja Propiedades de vínculo de datos. etc. 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.. Maestros. .. 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. etc.

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

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

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

Sign up to vote on this title
UsefulNot useful