Importar Tabla de una base de datos externa en Visual Basic 6

Un cliente me plante una necesidad quiere tener sincronizado el inventario de 2 bases de datos que lo que haga en una pueda importarlo a la otra.

En resumen lo que se quiere es una copia de la tabla Artículos en la otra, alguien dirá copio y pego de una base de datos a otra, pero el cliente no sabe de eso quiere que el sistema lo haga automáticamente.

Solución

Entonces se requiere abrir las 2 bases de datos y hacer una consulta de todos los registros e insertarlos en la otra base de datos. La tabla artículos tiene unos 23 campos mas o menos son muchos y pensé que debía haber una manera de poderlo hacer sin tener que escribir cada campo.

Al consultar me di cuenta que al usar Insert Into tiene la opción de que si las tablas son iguales puedes usar solo value siempre y cuando tengan los mismos campos y en el mismo orden, ejemplo:

Una consulta sql normal seria: Insert into Articulos (Campo1, Campo2, Campo3, Campo4, Campo5) values (Valor1, Valor2, Valor3, Valor4, Valor5)  pero es posible omitir los primeros parentesis si las tablas son iguales quedando de la siguiente manera:

Insert into Articulos values (Valor1, Valor2, Valor3, Valor4, Valor5)

Pensé que bien ahora tengo que buscar la manera de poder recorrer los campos de un recordset sin tener que escribir los nombres de los campos, consulte y precisamente si se podía.

RecordInventario.Fields.Count

Esta línea me arroja el numero de campos de la consulta 😉 que bien ahora solo tengo que recorrer con for el resultado de la consulta.

Sql = "Select * from tblArticulos "
    Set RecordInventarioExt = Cx4_ConexionADO_Ext.Execute(Sql)
    
    'recorro los registros
    Do While Not RecordInventarioExt.EOF
           For i = 0 To RecordInventarioExt.Fields.Count - 1
           Next i
        RecordInventarioExt.MoveNext 'paso al siguiente registro
    Loop

Que hace ese código, pues primero hago la consulta a la base de datos origen desde donde voy a sacar los datos, hago el ciclo del recorrido para los registros y dentro recorro por cada registro los campos que contiene.

Con esto solo me resta armar la consulta SQL para hacer el insert a la base de datos destino

El código completo de importación

Sub Glo_ImportarInventarioExterno()
    Dim RecordInventarioExt As New ADODB.Recordset
    
    On Error GoTo error
    
    'Borro todos lo articulos de la base de datos actual
    Sql = "Delete from tblArticulos "
    ConexionADO.Execute Sql
    
    'conexión a la base de datos externa
  
    Cx4_ConexionADO_Ext.CursorLocation = adUseClient
    Cx4_ConexionADO_Ext.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Cx4_DireccionDb_Ext _
            & ";Jet OLEDB:Database Password=4elmejorb4"
            
    'consulto todo los articulos de la otra base de datos desde la que quiero importar
    Sql = "Select * from tblArticulos "
    Set RecordInventarioExt = Cx4_ConexionADO_Ext.Execute(Sql)
    
    'recorro los registros
    Do While Not RecordInventarioExt.EOF
        
        'armando la consulta
        Sql = "Insert into tblArticulos VALUES ("
                For i = 0 To RecordInventarioExt.Fields.Count - 1 'hago un ciclo con la cantidad de campos que me arrojo la consulta
                     If i > 0 Then 'el primer campo no lleva coma al principio por eso la omito
                        Sql = Sql & ","
                     End If
                     Select Case i
                        Case 20
                               Sql = Sql & "0"
                        Case 29
                               Sql = Sql & "0"
                        Case Else
                            'extraigo el valor de cada campo y lo agreo a la consulta
                            Sql = Sql & "'" & RecordInventarioExt.Fields.Item(i).Value & "'"
                     End Select                     
                    
                Next i
                Sql = Sql & ")" 'al terminar el ciclo cierro el parentesis de la consulta
    
        ConexionADO.Execute Sql 'ejecuto la consula en la base de datos actual
        
        RecordInventarioExt.MoveNext 'paso al siguiente registro
    Loop
    Cx4_ConexionADO_Ext.Close
    
    MsgBox "Inventario Importado con exito", vbInformation, "Importar Inventario"
    
    Exit Sub
error:
    MsgBox Err.Description, vbCritical, Err.Number
End Sub

Con RecordInventarioExt.Fields.Item(i).Value  extraigo el valor de cada campo y lo agrego a la consulta.

El Select case lo uso por que hay campos que están nulos y no los puedo agregar con comillas entonces lo que hago es contar desde cero hasta el numero de la columna y asigno cero para que no genere error porque si intentas insertar un campo que es de tipo numero y le pasas comillas ” vacías saca error. En mi código si el campo es el 20 o 21 pongo cero sin comillas en caso contrario agrego el valor del campo entre comillas.

El resto del código esta comentado para que se entienda lo que hace.

Espero que les sea de  mucha utilidad no olvides de seguirme en Facebook

 

 

Suscribete a mi canal de   

 

Comentarios de Facebook
Total Page Visits: 6247 - Today Page Visits: 3

Deja una respuesta