Foros del Web » Programación para mayores de 30 ;) » Programación General »

No puedo trabajar con bases de datos desde VB

Estas en el tema de No puedo trabajar con bases de datos desde VB en el foro de Programación General en Foros del Web. Estoy creando una aplicación en Visual Basic 6.0 (o lo intento) que utiliza una base de datos, la cual he diseñado utilizando MS Access 2003, ...
  #1 (permalink)  
Antiguo 09/03/2004, 05:51
Avatar de alarga  
Fecha de Ingreso: junio-2003
Ubicación: Cádiz
Mensajes: 119
Antigüedad: 20 años, 10 meses
Puntos: 0
Desacuerdo No puedo trabajar con bases de datos desde VB

Estoy creando una aplicación en Visual Basic 6.0 (o lo intento) que utiliza una base de datos, la cual he diseñado utilizando MS Access 2003, y guardado en formato .mdb.Dicha BD tiene sus tablas, sus relaciones, sus restricciones y todo eso.

Como no estoy muy puesto en VB, estoy siguiendo un libro sobre ello. En el tema correspondiente al acceso a BBDD, se dice que para acceder a datos almacenados en una BD a través del control "ADO Data Control", es imprescindible crear un origen de datos OLEDB, y se explican los pasos necesarios para hacerlo.
De entrada, me resulta imposible crear dicho vínculo tal como se explica en el libro, ya que las explicaciones no concuerdan con la realidad. Finalmente lo consigo hacer de otra manera, usando para ello la "vista datos" del VB.

Y aqui es donde viene el problema, ya que al intentar especificar el RecordSource me aparece un mensaje diciendo que "No se reconoce el formato de base de datos". Desde la ventana "Vista datos" intento configurar las propiedades del vínculo creado, y me dice que tampoco puede conectar con la fuente de datos.

Se me ocurre pensar que el problema está en que esa versión de VB no reconoce el formato mdb que utiliza Access 2003, pero no estoy muy seguro de ello. He intentado guardar la BD en un formato anterior a dicha versión de Access, pero no se puede.

Si utilizo el control "Data" ocurre lo mismo, aparece el mismo mensaje de error.

¿Alguna ayuda, sugerencia o idea?

Gracias.

Última edición por alarga; 09/03/2004 a las 05:52
  #2 (permalink)  
Antiguo 09/03/2004, 10:26
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola alarga,

te pongo un ejemplo sacado del MSDN, con este tipo de programación no necesitas el control data(es muy poco flexible)

Código:
Public Sub OpenX()

   Dim cnn1 As ADODB.Connection
   Dim rstEmployees As ADODB.Recordset
   Dim strCnn As String

   ' Abre una conexión.
      strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & S_ruta & "\tuBBDD.mdb;Persist Security Info=False"
   Set cnn1 = New ADODB.Connection
   cnn1.Open strCnn
   
   ' Abre la tabla Empleados.
   Set rstEmployees = New ADODB.Recordset
   rstEmployees.CursorType = adOpenKeyset
   rstEmployees.LockType = adLockOptimistic
   rstEmployees.Open "empleado", cnn1, , , adCmdTable

   ' Asigna la fecha de contratación del registro del primer empleado
   ' a una variable y, después, cambia la fecha de contratación.
   varDate = rstEmployees!hire_date
   Debug.Print "Datos originales"
   Debug.Print "  Nombre – Fecha de contratación"
   Debug.Print "  " & rstEmployees!fName & " " & _
      rstEmployees!lName & " - " & rstEmployees!hire_date
   rstEmployees!hire_date = #1/1/1900#
   rstEmployees.Update
   Debug.Print "Datos que han cambiado"
   Debug.Print "  Nombre – Fecha de contratación"
   Debug.Print "  " & rstEmployees!fName & " " & _
      rstEmployees!lName & " - " & rstEmployees!hire_date

   ' Vuelve a consultar el objeto Recordset y restablece la 
   ' fecha de contratación.
   rstEmployees.Requery
   rstEmployees!hire_date = varDate
   rstEmployees.Update
   Debug.Print "Datos después de restablecer."
   Debug.Print "  Nombre – Fecha de contratación"
   Debug.Print "  " & rstEmployees!fName & " " & _
      rstEmployees!lName & " - " & rstEmployees!hire_date

   rstEmployees.Close
   cnn1.Close

End Sub

AQUÍ está el problema para el código que he puesto aplicado a tu caso:

"Provider=Microsoft.Jet.OLEDB.4.0"

este es el proveedor para acceder a través de OLEDB a ACCESS 2000. También se podría acceder a través de ODBC. Pero lo que a tí te interesa es que pongas ahí el proveedor adecuado para la versión 2003, si no, no la vas a abrir.
Intenta instalarte el último MDAC, creo que va por la versión 9, o sea las librerías de acceso a datos de Microsoft. Busca en la web de Ms en la zona de descargas...

Saludos
Pablo
  #3 (permalink)  
Antiguo 09/03/2004, 13:20
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
me aparece un mensaje diciendo que "No se reconoce el formato de base de datos".
A partir de la version MDAC 2.7 ya puedes trabajar con versiones a Access 2000 o superiores, posiblemente estés usando una menor de ADO y por eso no reconoce el formato.

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 10/03/2004, 03:32
Avatar de alarga  
Fecha de Ingreso: junio-2003
Ubicación: Cádiz
Mensajes: 119
Antigüedad: 20 años, 10 meses
Puntos: 0
Pues he ido a la web de microsoft, he buscado las librerías MDAC y me he bajado la versión 2.8, las he instalado y, al terminar, me pide que reinicie, lo hago y cuando vuelvo a realizar el mismo proceso que ayer me vuelve a salir el mensaje "no se reconoce el formato de base de datos".
Cuando defino el vínculo de datos y pruebo la conexión con la fuente de datos me dice que "Error en la prueba de conexión al inicializar al proveedor. No se reconoce ...".

La única solución que me queda es crear la BD con el administrador visual de datos que viene con VB.

¿alguna otra idea o sugerencia?

Gracias de todas formas.
  #5 (permalink)  
Antiguo 10/03/2004, 04:27
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
alarga,

-prueba: haz un DSN(en herramientas administrativas de windows) para dicha base de datos y pulsa probar conexión. Si tienes intalada la bbdd tendrás el controlador adecuado. Si falla la prueba a través de ODBC entonces tu bbdd está mu chunga

-prueba: exporta una sola tabla a otra bbdd 2003 y vuelve a probar la conexión

Por cierto...
tiene que ser en ACCESS 2003, la 2000 no da nada de guerra

Saludos
Pablo
  #6 (permalink)  
Antiguo 10/03/2004, 05:42
Avatar de alarga  
Fecha de Ingreso: junio-2003
Ubicación: Cádiz
Mensajes: 119
Antigüedad: 20 años, 10 meses
Puntos: 0
A ver ... en parte he conseguido arreglar el problema, pero solo parcialmente.

He hecho lo que me comenta Pablo y, al probar la conexión con la fuente de datos, me ha vuelto a dar el mismo error.

Desesperado, se me ocurre crear un vínculo de datos pero seleccionando un proveedor distinto al sugerido por el libro que
tengo, y elijo "MS Jet 4.0 OLE BD Provider" en vez de "MS Jet 3.51 OLE BD Provider". Al probar la conexión aparece un mensaje
diciendo que "la prueba de conexión fue satisfactoria",... por fin!.

Asi pues, decido crear un control de datos 'data', y me va todo bien hasta que, al intentar seleccionar el RecordSource, vuelve a
decirme que "no se reconoce el formato de base de datos".

Leo en el libro que es mejor utilizar el control de datos ADO porque es mas flexible (las tablas se seleccionan con SQL). Asi
que decido cambiar el 'data' por un 'ADO' y, siguiendo las instrucciones del libro, selecciono una tabla y no me da ningún
mensaje de error (por ahora).

Pero como me quedo con la duda, decido eliminar el origen DSN que habia creado antes, y veo que sigue funcionando igual que
antes, luego deduzco que el problema está en que había elegido el proveedor equivocado. Pero entonces, ¿porque sigue sin
reconocer el formato de la BD cuando intento seleccionar una tabla al usar un 'data'?.

El motivo de usar Access 2003 es porque en el ordenador del trabajo está instalada esa versión.

Gracias y salu2.
  #7 (permalink)  
Antiguo 10/03/2004, 06:18
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
Veo tu mensaje un poco confuso con el tema del data. Cuando dices data te referirás al control ADODATA, pues solo hay uno, es lo mismo. Y de flexibles nada...

Si quieres flexibilidad utiliza los objetos ADO como connection, recordset y command. Te puse un ejemplo...

Esta cadena de conexión está hecha para no necesitar DSN:
Cita:
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & S_ruta & "\tuBBDD.mdb;Persist Security Info=False"
Si tienes problemas escribe
Saludos
Pablo
  #8 (permalink)  
Antiguo 10/03/2004, 06:43
Avatar de alarga  
Fecha de Ingreso: junio-2003
Ubicación: Cádiz
Mensajes: 119
Antigüedad: 20 años, 10 meses
Puntos: 0
Hola Pablo
A ver si consigo explicarme bien...

Cuando hablo del control 'data' me refiero al control de datos que trae VB por defecto, o sea, el único que existe una vez que se
instala VB, el cual que se utiliza para conectar un origen de datos con los controles del formulario.

El control de datos ADO (ActiveX Data Object) sirve para lo mismo pero es otro control diferente al anterior y no viene por defecto,
aunque se puede añadir a la caja de herramientas posteriormente. Por lo tanto me estoy refiriendo a dos controles
distintos.

Estoy utilizando el control ADO, porque con el otro no consigo que me reconozca al fichero .mdb, y con este no estoy teniendo
problemas, ... por ahora.

La cadena de conexión que me escribes es justamente el valor que le he dado a la propiedad 'ConnectionString' del control ADO,
la he generado automáticamente seleccionando un proveedor y el fichero de la BD.

Saludos y gracias por las observaciones.
  #9 (permalink)  
Antiguo 10/03/2004, 08:44
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
alarga,

ya está todo claro, ya se a que te refieres.

Te cuento:

Microsoft facilita a los programadores varias formas de acceder a datos. Unas de las más utilizadas son (en orden cronológico):

-DAO
-RDO
-ADO
-ADO.NET (que aunque comparte nombre con su predecesor por dentro no tiene nada que ver. Este es solo para .NET)

Todos vienen por defecto en VisualStudio aunque deben ser actualizados con el MDAC.
Cada proveedor de datos tiene sus propios controles que consumen datos, como el control data. Tú te referirás al data de DAO, que viene en el cuadro de herramientas y el control data de ADO es lo mismo pero con otro nombre y otras librerías por debajo.
Ahora creo entender por que no funcionaba. Microsoft comunicó hace tiempo que ha dejado de dar soporte a DAO y RDO, con lo cual con las nuevas bbdd no funcionarán. Por eso solo funcionará de ADO hacia delante.

De todas formas siempre aconsejo alejarse del control data, porque además de ser poco flexible es una programación cómoda con la que no se aprende nada, más orientada al diseño y los asistentes que a la programación y al control de todo el proceso. Con el control data casi no es necesario escribir ni una línea de código. De todas formas es válido para aplicaciones sencillas.

Un saludo
Pablo
  #10 (permalink)  
Antiguo 10/03/2004, 16:19
Avatar de alarga  
Fecha de Ingreso: junio-2003
Ubicación: Cádiz
Mensajes: 119
Antigüedad: 20 años, 10 meses
Puntos: 0
Pues me alegro que ya sepas a que me refería, y me ha servido de mucho la
explicación que has dado.

Imagino que programar con los control data es lo mas sencillo, aunque sea la
opción menos flexible y la menos recomendada para los programadores, lo que
ocurre es que el código que me pusiste anteriormente me suena casi a chino, por
lo cual, y como veo que estas puesto en el tema, me gustaría pedirte que me
recomendaras algún libro para aprender a programar a fondo con VB,
pero utilizando mas el código que el diseño.

Gracias y un saludo

Última edición por alarga; 10/03/2004 a las 16:21
  #11 (permalink)  
Antiguo 10/03/2004, 17:07
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
alarga,

no se que nivel te interesa. Te pongo dos libros que tengo, uno de nivel básico-medio y otro medio-avanzado.

-básico-medio

Visual Basic 6. Edición Especial
Prentice Hall
ISBN: 84-8322-104-7

"muy bueno, empecé con él en VB"

-medio-avanzado

Programación avanzada con Microsoft Visual Basic
McGrawHill
ISBN: 84-481-2681-5

"este es más duro, cuesta digerirlo ya que cubre tanto temas básicos como avanzados(simulación de prog orientada a objeto, api, activeX, etc)"

Hojéalos y mira bien si tienen los temas que te interesan o cumplen tus espectativas.

Saludos
Pablo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 13:50.