Autor
|
Tema: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 (Leído 3,279 veces)
|
digimaribel23
Desconectado
Mensajes: 6
|
Buenos días. Soy nueva en elhacker, así que disculpadme si algo no hago bien.
Se me presenta un problema a la hora de obtener datos de una base situada en un servidor para pasarlos a otra base de otro servidor.
El código es el siguiente:
On Error Resume Next strConexion1 = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=zz.zzz.zzz.zz;DATABASE=NombreBase;USER=Usuario;PASSWORD=Psw" strConexion2 = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xx.xxx.xxx.xx;DATABASE=NombreBase;USER=Usuario;PASSWORD=Psw" Dim cAbantisDB As New ADODB.Connection Dim cABDat As New ADODB.Connection cABDat.open strConexion1 cAbantisDB.open strConexion2 If Err.Number <> 0 Then 'error Exit Sub End If cABDat.Execute "INSERT INTO Tabla SELECT * FROM cAbantisDB.dbo.Tabla" Debug.Print Err.Description
Devuelve error: [MySQL][ODBC 3.51 Driver][mysqld-5.1.73]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.tbAccesos2' at line 1
Sé que el problema lo tengo al llamar a cAbantisDB, pero no sé cómo incluirlo dentro de la consulta sql. He mirado el manual, he buscado por la web, pero no consigo dar con la solución.
Alguien podría echarme una mano?
|
|
|
En línea
|
|
|
|
Serapis
|
bueno así a primera vista lo que veo es que tienes 2 BD, llamémoslas BD1 y BD2 ...y tienes una conctrinoString para cada una, llamemoslas cs1 y cs2... Sin embargo, me pregunto si luego las cruzas...bd1.open cs2 bd2.open cs1 No tendría más importancia salvo si luego una operación que debe ser realizada a una se hace a la otra... El caso es como no atrapas correctamente el error, no queda claor donde se genera... Hazlo mejor así: ' Hay que atrapar el error en el momento en que se produzca... no ya cuando resulte imposible seguir... on local error goto ErrorBd ' esta línea debe remplazar a tu ' on error resume next' ' todo tu código... aquí strConexion1 = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=zz.zzz.zzz.zz;DATABASE=NombreBase;USER=Usuario;PASSWORD=Psw" strConexion2 = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xx.xxx.xxx.xx;DATABASE=NombreBase;USER=Usuario;PASSWORD=Psw" Dim cAbantisDB As New ADODB.Connection ' <---- pon un "punto de interrupción en esta línea tecla F9 ' y a partir de aquí vamos paso a paso (tecla F8 con cada línea), ' así vmeos que línea falla exactamente, porque el mensaje de error refiere línea 1, y refiere '.tbAccesos2', que no aparece por ninguna parte en tu código... probablemente sea el nombdre de una tabla... pero (yo), no hay forma de saber de qué BD. Dim cABDat As New ADODB.Connection cABDat.open strConexion1 cAbantisDB.open strConexion2 cABDat.Execute "INSERT INTO Tabla SELECT * FROM cAbantisDB.dbo.Tabla" '... hay más código, pués ponlo debajo? ' al final del código en dicha sub/function exit sub ' o function según sea el caso errorBD: debug.print err.Description ' Si se puede corregir el error aquí, entonces resume next ' si no parar y arreglarlo... end sub /function
Por otro lado, porqué no separas la lógica... ???1 - Por un lado primero obtener un recordset de la BD1 2 - por el camino, si hay diferencias entre las tablas, antes de la inserción debes adaptarlo, y si es copia fidedigna, debería aceptarlo bien. 3 - y luego insertas ese recordset en la BD2... Separando claramente los pasos, puedes atajar y atacar mucho mejor cualquier problema que se presente, sobretodo porque sabrás donde sucede el error, en la BD1, en la BD2 ???
|
|
« Última modificación: 3 Septiembre 2018, 14:29 pm por NEBIRE »
|
En línea
|
|
|
|
digimaribel23
Desconectado
Mensajes: 6
|
Si hago un recordset de cada fila y la voy insertando a la otra base de datos, se me eterniza, porque hay muchos datos a pasar. Por eso creí que haciando una copia de un servidor a otro, la operación sería bastante más rápida, no te parece?
|
|
|
En línea
|
|
|
|
digimaribel23
Desconectado
Mensajes: 6
|
Es un procedimiento que se va a usar sólo en el caso de que se acaben de crear las bases de datos vacías y, de esa forma, se llenen las tablas que tienen que tener una serie de datos por defecto. Si no me explico bien te ruego me disculpes, pero lo que necesito es que, al abrir el sistema, si se han tenido que crear las tablas porque no existen, además de crear las tablas que tienen que estar vacías, copie las que tienen que estar llenas desde otro servidor. Y eso es lo que no consigo, porque registro a registro ya lo tengo, pero es muy muy muy lento. Gracias.
|
|
|
En línea
|
|
|
|
digimaribel23
Desconectado
Mensajes: 6
|
Por ejemplo, la tabla clientes se creará vacía, pero la tabla tipos de cliente tiene que estar llena, y la tabla plan de cuentas también, y la tabla forma de pago, plazos de pago, etc. tienen que estar llenas y no vacías como la de clientes. Como en otro servidor, tengo esas tablas llenas, pues la idea era copiar la tablas, en vez de pegar los registros uno a uno.
|
|
|
En línea
|
|
|
|
digimaribel23
Desconectado
Mensajes: 6
|
y tbaccesos2 se refiere a la tabla de la segunda conexión, es que había cambiado los nombres de las tablas para que fuera más claro y al final ha resultado que no he liado. No hay más instrucciones, da error al ejecutar la consulta, porque lo que no le gusta es la sintaxis de cómo llamo a la tabla de la segunda base para importarla a la primera.
|
|
|
En línea
|
|
|
|
Serapis
|
Si hago un recordset de cada fila y la voy insertando a la otra base de datos, se me eterniza, porque hay muchos datos a pasar. Por eso creí que haciando una copia de un servidor a otro, la operación sería bastante más rápida, no te parece?
Si estamos hablando de Terabytes... sí... si hablamos de unos pocos cientos de Megabytes... pués no. Por otro lado si la copia es completamente idéntica, o casi (y no solo copiar algunas tablas o ciertos registros de algunas tablas como inicialmente uno supone), poque no la comprimes entera y la trasladas al otro servidor (si no tienes habilitado nada al respecto (ftp por ejemplo), súbelo cifrado a algun site de descargas y luego la descargas desde el otro lado y allí la descomprimes y listo... esto es aún más rápido...
Leyendo otro mensaje... Si la BD debe ser creada con tablas y valores por defecto... hazlo en local en tu equipo, la comprimes y luego cuando se deba recrear en otro lado, la descargas allí, la descomprimes y aplicas los pocos cambios que precisara al momento...
|
|
« Última modificación: 3 Septiembre 2018, 15:39 pm por NEBIRE »
|
En línea
|
|
|
|
digimaribel23
Desconectado
Mensajes: 6
|
Pues creo que tienes razón. Voy a probarlo. Muchas gracias por tu ayuda, a veces se bloquea uno y no ve bien el camino. Gracias de nuevo y un saludo.
|
|
|
En línea
|
|
|
|
PirSys
Desconectado
Mensajes: 6
|
Sub main()
With BaseL .CursorLocation = adUseClient .Open "Provider=Microsoft.Jet.OLEDB.4.0;DATA Source=" & App.Path & "\MDB\PirSys1.mdb;Persist Security Info=False" End With
With BaseI .CursorLocation = adUseClient .Open "Driver={MySQL ODBC 3.51 Driver};Server=127.0.0.1;charset=UTF8;Database=pirsys;User=root;Password=21048912 **;Option=3;""" End With
ControlRs
If RsControl.RecordCount = 0 Then PrimeraEjecucion.Show Else InicioDiario.Show End If
End Sub esto tengo cargado en mi modulo de sentencias, fijate si te es de ayuda para que tomes el ejmplo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como listar todas las bases de datos de un servidor?
Programación Visual Basic
|
-carlus-
|
2
|
1,513
|
16 Marzo 2006, 14:36 pm
por -carlus-
|
|
|
Conectar a VPN desde Internet a mi servidor (mi pc)
Redes
|
lord_Sirikon
|
5
|
13,979
|
10 Febrero 2012, 20:53 pm
por azcue
|
|
|
Re: ¿Tengo una duda para conectar desde Windows a un servidor web con CentOS 5.4?
GNU/Linux
|
Air_Dragon2011
|
3
|
3,473
|
11 Mayo 2011, 18:57 pm
por [u]nsigned
|
|
|
Consulta sobre bases de datos e instalador
Java
|
zonahurbana
|
1
|
1,448
|
24 Mayo 2014, 00:12 am
por Migugami
|
|
|
[Resuelto] Usar subdominio como host para un servidor distinto
Desarrollo Web
|
viher
|
6
|
3,675
|
20 Febrero 2015, 14:41 pm
por viher
|
|