Título: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 10:04 am 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? Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: Serapis en 3 Septiembre 2018, 14:18 pm 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í: Código
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 ??? Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 15:09 pm 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? Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 15:13 pm 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. Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 15:16 pm 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. Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 15:19 pm 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. Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: Serapis en 3 Septiembre 2018, 15:36 pm 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. Si estamos hablando de Terabytes... sí... si hablamos de unos pocos cientos de Megabytes... pués no.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? 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... Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: digimaribel23 en 3 Septiembre 2018, 15:44 pm 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. Título: Re: Consulta sql para conectar dos bases de datos de distinto servidor, desde VB6 Publicado por: PirSys en 29 Agosto 2019, 20:19 pm Código: 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. |