sobre 2 conexiones a mysql para actualizar entre 2 bases de datos

961 views
Skip to first unread message

Saul Piña Hernandez

unread,
May 10, 2013, 1:23:01 PM5/10/13
to publice...@googlegroups.com
Saludos!

Aparentemente funciona bien el siguiente codigo, lo que intento hacer es realizar 2 conexiones a 2 bases con nombres distintos pero con la tabla igual entre si, entonces debo actualizar los datos ó extrarer los datos mejor dicho e ingresarlas a la otra tabla vacia,

El código si realiza lo que le pido, solo que me aparece un error de mysql al final del barrido, como podria solucionarlo?

Este es el codigo:

********Me conecto a la primera base de datos mysql***********************
 lcStringConn="Driver={MySQL ODBC 5.1 Driver};Port3306"+;
";Server="+lcServer+;
";Database="+"gestionsocial"+;
";Uid="+lcUser+;
";Pwd="+lcPassWord

lHandle2=SQLSTRINGCONNECT(lcStringConn) &&& ERROR &&&
    IF lHandle2 > 0
    WAIT WINDOW STR(lHandle2)
    sqlexec(lHandle2,"use solicitud_mod3")
        SQLEXEC(lHandle2,"select *from solicitud_mod3","c1")
        SELECT * FROM c1 ORDER BY folio INTO CURSOR cc1
        SELECT cc1
        BROWSE
        LOCAL fo
        fo=cc1.folio
        ?fo
    ELSE
    WAIT WINDOW "Error al conectarse"
    ENDIF


************************Me conecto a la segunda base de datos*********************
lcStringConn="Driver={MySQL ODBC 5.1 Driver};Port3306"+;
";Server="+lcServer+;
";Database="+"gessoc13"+;
";Uid="+lcUser+;
";Pwd="+lcPassWord
***Evitar que aparezca la ventana de login
SQLSETPROP(0,"DispLogin",3)
lHandle=SQLSTRINGCONNECT(lcStringConn) &&& ERROR &&&
    IF lHandle > 0
    cTabla2="Solicitud_mod3"
*WAIT WINDOW STR(lHandle)
    sqlexec(lhandle,"use "+cTabla2)
            SQLEXEC(lhandle,"select *from "+cTabla2+" ORDER BY folio ASC","c2")
       
****************************Aquí empiezo la transaccion de datos, dependiendo si existe ya en la tabla o no ******************************
        DO WHILE !EOF()
        WAIT WINDOW fo
        SELECT folio FROM c2 WHERE folio=c1.folio INTO CURSOR c3 nofilter
        IF RECCOUNT()>0
        ELSE    
        WAIT WINDOW "nuevo"
    =SQLSETPROP(lhandle,'Transactions',1)
    lcIns="INSERT INTO "+'&cTabla2'+" (select *from gestionsocial.solicitud_mod3) where "
        WAIT WINDOW "Datos Agregados con éxito" TIMEOUT .8
   
            IF SQLExec(lhandle,lcIns) < 0
                IF AERROR(laError) > 0
                Messagebox("Error:"+laError[2])
                ELSE
                Messagebox("UnHandled Error..")
                ENDIF
            ELSE   
            ENDIF
   
   
        ENDIF
       
        SELECT c1
        SKIP
        fo=c1.folio
        ?fo
        ENDDO  
       
   
ENDIF
   
SQLDISCONNECT(lhandle2)
SQLDISCONNECT(lhandle)

Este es el error:

Armando Rodríguez Bermúdez

unread,
May 10, 2013, 1:51:34 PM5/10/13
to publice...@googlegroups.com

No se aprecia bien la imagen del error. ¿ O me falla la vista ?

 

Saludos

Armando

ZeRoberto

unread,
May 10, 2013, 2:23:28 PM5/10/13
to publicesvfoxpro
Quieren que el maestro Luis Maria tenga una bola de cristal, ahora le piden que tenga super vision?

Jajajaja

Saul Piña Hernandez

unread,
May 10, 2013, 4:12:11 PM5/10/13
to publice...@googlegroups.com
saludos! ya lo tengo solucionado. muy a mi manera. je,je...

Alfonso Ramirez Diaz

unread,
May 10, 2013, 4:35:36 PM5/10/13
to publice...@googlegroups.com
Una acotación al tema es que no es necesario abrir varias conexiones para usar diferentes bases de datos MYSQL al mismo tiempo (siempre y cuando esten en el mismo servidor), es lo que mas me gusta de MYSQL y de SQL SERVER.

Por ejemplo con una solo conexión puedes traerte los datos de una base de datos y actualizarlos en otra base de datos.

Por ejemplo (traer información desde base de datos llamada database1 y actualizarlos en database2)

SQLEXEC(lnHandle,"SELECT * FROM database1.mitabla","consulta")

SELECT consulta
SCAN
SQLEXEC(lnHandle,"INSERT INTO database2.mitabla ( campo1, campo2, campo3, ... ) VALUES ( ?consulta.campo1, ?consulta.campo2, ?consulta.campo3, ... )") 
ENDSCAN
USE IN consulta

Con el código anterior te traes todos los datos desde database1.mitabla y los grabas en database2.mitabla sin necesidad de abrir 2 conexiones al mismo tiempo.

Ojo: Solo funciona si ambas bases de datos estan en el mismo servidor.

mpulla

unread,
May 10, 2013, 7:11:55 PM5/10/13
to publice...@googlegroups.com

Hola.

Acotando lo que dice Alfonso, en ciertos casos se podría hacer que se trabaje en el servidor.


lcSql = 'Insert Into database2.mitabla (campo1, campo2, campo3) ' + ;
           'Select Campo1, Campo2, Campo3 From database1.mitabla Where Campo1 >= 114'

SQLEXEC(lnHandle,lcSql)

Saludos.
Mauricio
Reply all
Reply to author
Forward
0 new messages