Un lugar por donde empezar...

Conectar VB6 con Base de datos.

En un video anterior publique (entre otras cosas) sobre como hacer esto, en todo caso pudiera que no halla sido muy claro sobre esto y con el único afán de lograr que algunos colegas dejen por fin de usar el antiquísimo e impráctico control ADODC (que ya bastante tenemos con seguir programando con VB6 que no se caracteriza por ser un lenguaje de avanzada) es que me he tomado un tiempo para escribir estas lineas que espero los ayude a migrar su código.

Para ir entendiendo, el esquema de consulta general considero que se divide en 3 partes. Esta la BD, esta la consulta SQL que se gestiona con un recordset y finalmente esta el control de presentación que es lo que poblará el recordset (estoy siendo algo generalista porque internamente hay mas pasos pero lo hago porque en un nivel principiante no necesitamos tanto detalle que en todo caso podremos profundizar luego)
recorridop

1.- Lo primero que debe hacer es agregar la referencia:

Referencias

Debe estar Microsoft ActiveX Data Objects 2.5 Library

Aclaramos entonces que esta es una referencia al componente ADO indicado, el componente ADO es el encargado de enlazar a nuestro programa con el proveedor de datos y viceversa, ya luego en otro post podremos ver esto en mas detalle. Las versiones del ADO van desde el 1.5 al 2.8 siendo recomendable usar la 2.5 en adelante puesto que muchos posibles bugs han sido resueltos, si tiene instalado mas de uno debe especificar cual de ellas usará.

2.- Una vez agregada es conveniente hacer la conexión desde un módulo para que tenga alcance a todo el proyecto, en el caso de usarse sobre red local es suficiente hacer la conexión una sola vez al iniciar el proyecto y terminarla una vez el proyecto se cierre. Vale decir que el ejecutable se conectará a la base de datos por única vez, posteriormente se podrán generar innumerables consultas SQL cada una en un recordset y estas poblaran los controles de presentación como DataCombos, Grids, Reportes, etc. En el caso de conexión por internet es casi seguro que lo mas recomendable seria conectar y desconectar por transacción ya que la conexión normalmente no se queda dedicada, al menos no por ahora.

Abran un módulo bas simple y deben poner este codigo:

Public dB As ADODB.Connection

Lo primero es estable la conexión y para ello necesitamos una variable de conexión, normalmente yo la defino como dB por una manía personal pero ustedes pueden nombrarla como les plaza siendo cn la variable que mayormente se ve en muchos ejemplos, eso ya es indistinto.
Con esa linea de código la variable ya esta declarada, aun falta instanciarla. Nótese que uso Public porque como dije arriba quiero que tenga alcance a todo el proyecto.

El siguiente código lo llame Conexion y lo hago público, la explicación de ese codigo esta en los comentarios.

Public Sub Conexion()
Dim Ruta As String     'Declaramos la variable Ruta para la ruta de la BD
Dim Usuario As String  'Declaramos la variable Usuario que es el usuario de la BD
Dim Password As String 'Declaramos la variable Password que es el password a la bd si fuese el caso
Dim Driver As String   'Declaramos la variable Driver para almacenar el Driver del motor que usamos.

Ruta = "C:\PRUEBADB.FDB"  'Asignamos la ruta, esto se puede hacer tambien dinamicamente

Usuario = "SYSDBA"      'Este es el usuario por defecto de Firebird.
Password = "masterkey"  'Esta es la contraseña por defecto de Firebird
Driver = "Firebird/InterBase(r) driver"  'Asignamos el driver de Firebird

Conecta = _
"DRIVER=" & Driver & "; UID=" & Usuario & "; PWD=" & Password & "; DBNAME=" & Ruta & "; "
'En la variable conecta armamos toda la cadena de conexión

Set dB = New ADODB.Connection 'Instanciamos la conexión
dB.Provider = "MSDatashape" 'Esto requiere de una explicación extensa que luego veremos, pero
                           'para resumir dire que es una especie de preformateador a cierto grupo
                           'de registros, es muy necesario si usamos consultas jerárquicas.

dB.Open Conecta    'El paso final, aqui se conecta. ¿Como es? como ya arriba instanciamos a dB ahora aqui
                  'abrimos la conexión, si no se conecta nos saltara un error el cual podemos capturar para
                  'dar al usuario un mensaje "mas humano" como: No se puedo realizar la conexión.
End Sub

En el caso de usar Access el código de conexión que a continuación pongo les servirá: (solo comentare lo que no se comento arriba)
Para los archivos Access con extensión ACCDB

Public Sub Conexion()
Dim S As String
S = App.Path & "\PRUEBABD.accdb" & ";"

CadenaCompleta = _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & S & ";Persist Security Info=False;"
Set dB = New ADODB.Connection
dB.CursorLocation = adUseClient  'Básicamente se refiere a que se pre-procesa la consulta del lado del
                                'cliente (usando sus recursos) y contribuir a que no se generan
                                'cuellos de botella en el servidor.
dB.Provider = "MSDataShape"
dB.Open CadenaCompleta ' conectamos la BD
End Sub

Y los archivos Access que usan extensión MDB:

Public Sub Conexion()
Dim S As String
S = App.Path & "\PRUEBABD.mdb" & ";"

CadenaCompleta = _
"Provider=MSDataShape.1;Extended Properties=Jet OLEDB:Database Password=mipassword;Persist Security Info=False;Data Source=" & S & ";Data Provider=MICROSOFT.JET.OLEDB.4.0"
Set dB = New ADODB.Connection
dB.CursorLocation = adUseClient
dB.Provider = "MSDataShape"

dB.Open CadenaCompleta ' conectamos la BD

End Sub

Bien hasta allí ya tenemos la conexión, solo resta llamar al procedimiento Conexion desde el evento Load de nuestro formulario principal, no deben conectar y desconectar por cada formulario, no es necesario si hablamos de un entorno de red local, la conexión se mantendrá sobre la variable dB (o la que ustedes usen) en todo el proyecto porque la declaramos en un modulo.

Bien, con esto ya tenemos la conexión establecida, en este siguiente post haremos la consulta hacia la BD.

12 Comentarios

  1. Julio 8, 2014    

    Te conozco desde hace años, y te reconozco como un gran experto en programación. Tus aportaciones en nuestro foro (Vb-Mundo) siempre han destacado como sobresalientes. En esta página confirmas que eres un verdadero “maestro”, de ésos que saben enseñar, cosa que no abunda. Mis felicitaciones y mi agradecimiento por tus lecciones magistrales.

    • YAcosta YAcosta
      Julio 8, 2014    

      Amigo Jose Maria le agradezco muchísimo sus palabras sobre todo viniendo de Ud., de una persona a quien tanto admiro, aprendo y sigo desde el 2008 que entré a VB-Mundo. Un fuerte abrazo desde Perú.

  2. josegil josegil
    Julio 21, 2014    

    tendras un codigo para una base de datos en mysql?

    • YAcosta YAcosta
      Julio 21, 2014    

      Hola, hace unos días te respondí con NO porque no tenia el código, en realidad solo debes cambiar la cadena de conexion de VB6 a MySQL y eso si lo encuentras en la red, luego todo lo demas es lo mismo.

      Saludos

  3. Septiembre 23, 2014    

    Hermano como siempre te digo no dejas de sorprendernos no solo por tu nivel de conocimientos en VB6 y base de datos sino por tu desprendimiento a la hora de compartirlos y como decía tu padre enseñando también se aprende, pues espero algún día aprender enseñando, un gran saludo desde Venezuela

    • YAcosta YAcosta
      Septiembre 24, 2014    

      Gracias por tus palabras amigo.

  4. gerardo gerardo
    Octubre 15, 2015    

    El query SQL puede estar escrito en el mismo aplicativo VB6, puede estar en alguna DLL la cual la recuperaremos como un string o puede estar en un archivo externo (obviemos de momento los SP y triggers)

    Una duda ya logre conectar mi base de datos con tus ejemplos y ya hice un ejercicio de ejemplo con un query sencillo como el que mencionas “SELECT * FROM CLIENTES”

    Si tengo consultas ya hechas sobre esa base de datos como puedo ejecutarlas como archivo ?
    consulta1.sql ya que tengo unas que son de mas de 50 lineas con varias condiciones y tablas involucradas, si podría solo conectar la base de datos y correr el query desde vb6 para que me traiga en el grid como tu ejemplo el resultado?

    Saludos y muchas gracias, Grandes Aportes

    • YAcosta YAcosta
      Diciembre 21, 2015    

      Disculpa la demora en responder, me había desconectado un tiempo y no se si la respuesta aun te sirva. Pues si tienes los sql en archivos podrías leerlos desde vb6 y cargarlo en una variable la cual puedas ejecutar dentro de VB6. Espero te sirva. Saludos

  5. Matias Matias
    Febrero 17, 2016    

    Hola como estas ? estoy probando el codigo que pasas pero necesito conectarlo a una BD remota sabes como hacerlo ?

    • YAcosta YAcosta
      Febrero 29, 2016    

      Para una BD remota es casi lo mismo, solo que debes abrir el puerto en el router, la forma de hacerlo dependerá del router que tengas aunque en esencia es lo mismo. SAludos

  6. Eduardo Eduardo
    Abril 10, 2016    

    Es una gran alegria encontrar blog acerca de vb y firebird ya que es un gran manejador de Base de Datos.

    • YAcosta YAcosta
      Abril 11, 2016    

      Muchas gracias

No Pings Yet

  1. Duda de filtro ADODC Acces - VB-MUNDO - Programacion Visual on Julio 6, 2014 at 11:34 pm
  2. Temas ya Expuestos y Resueltos - VB-MUNDO - Programacion Visual on Julio 20, 2014 at 12:28 am
  3. 2 Formas para conectar base de datos - VB-MUNDO - Visual Basic, y mucho mas on Septiembre 22, 2014 at 4:53 pm
  4. vb6 Seleccionar texto en datagrid a medida que se escribe - VB-MUNDO - Visual Basic, y mucho mas on Septiembre 25, 2014 at 8:29 pm
  5. Anónimo on Febrero 9, 2015 at 12:01 pm

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Protected by WP Anti Spam

Gracias por su visita.