Grabar registros en MySQL

119 views
Skip to first unread message

Enrique

unread,
May 28, 2022, 9:28:16 PM5/28/22
to Comunidad de Visual Foxpro en Español
Hola a todos. Estoy pasando de DBF a MySQL y tengo el síguete inconveniente al grabar.

El siguiente código puedo grabar registros. Todo en una sola linía de comando;

SQLEXEC(Cone,"UPDATE espejo SET nume=?mNume, rut=?mRut,e=?mE,nombre=?mNombre,direccion=?mDirecc,Fono=?mFono,celu=?mCelu,fecha=?(mFecha),sexo=?mSexo,poblacion=?mPoblacion,origen=?mOrigen,materia=?mMateria,tema=?mTema,derivacion=?mDeriva,glosa=?mGlosa WHERE nume=?mNume")
 =sqlexec(Cone,"COMMIT")        
  =TableUpdate(.T.)                      
  =CURSORSETPROP("Buffering", 5, "curClientes")    

Pero al agregar más campos para poder grabar, mande error. Solo puedo llegar al último campo del código de nombre Glosa y me faltan como 8 campos más para poder completar todos los datos del formulario.
Buscando alternativas, estoy tratando de realizar de la siguiente forma y que me sea mas entendible;
TEXT TO _sqlComando TEXTMERGE PRETEXT 7 NOSHOW
                  UPDATE espejo SET nume=?mNume,
                              rut=?mRut,
                              e=?mE,
                              nombre=?mNombre,
                              direccion=?mDirecc,  
                              Fono=?mFono,
                              celu=?mCelu,
                              fecha=?(mFecha),
                              sexo=?mSexo,
                              poblacion=?mPoblacion,
                              origen=?mOrigen,
                              materia=?mMateria,
                              tema=?mTema,
                              derivacion=?mDeriva,                              
                            WHERE nume=?mNume                            
                ENDTEXT
                SQLEXEC(cone, _sqlComando, "curClientes")
                If Cone>0  Then
                 =SqlExec(Cone,'COMMIT')
                 MESSAGEBOX("¡Operación Realizada Exitosamente! "+ STR(mNume),0+16,"El Sistema Informa",1500)                
                 =TableUpdate(.T.)                      
                 =CURSORSETPROP("Buffering", 5, "curClientes")              
                Else
                    =SqlExec(Cone,'ROLLBACK')
                    Wait Window "Ocurrió un Error "+Chr(13)+"Atencion"
                Endif
No manda ningún error, pero no graba los cambios.

Me pueden ayudar como solucionar lo señalado y cual es la forma correcta  de realizarlo.
Muchas Gracias.

Jomel Mcdonald - Dj Megabyte

unread,
May 28, 2022, 10:05:57 PM5/28/22
to publice...@googlegroups.com
Ok, Lo primero que debes ver que los campos:
nume,rut,e,nombre,direccion, Fono,celu,fecha,sexo,poblacion,origen,materia,tema,derivacion
esten igual en tu tabla respetando mayusculas y minusculas y segundo
elimina la coma en este ultimo campo:   =?mDeriva, debe quedar asi     =?mDeriva

prueba y me avisas..

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/f90f3d73-cf6e-428c-8eb8-cd104dbefb3cn%40googlegroups.com.

Víctor Hugo Espínola Domínguez

unread,
May 28, 2022, 10:30:09 PM5/28/22
to publice...@googlegroups.com
Cuando en un motor SQL se produce error en una sentencia enviada desde VFP no se produce un error en el programa VFP, pero con la función AERROR puedes saber que error se produjo en el motor, tu código sería algo parecido a lo siguiente:

lnRet = SQLEXEC(cone, _sqlComando, "curClientes")
If lnRet > 0 Then
    = SqlExec(Cone,'COMMIT')

    MESSAGEBOX("¡Operación Realizada Exitosamente! "+ STR(mNume),0+16,"El Sistema Informa",1500)                
    = TableUpdate(.T.)                      
    = CURSORSETPROP("Buffering", 5, "curClientes")              
Else
     = Aerror(laError)
     lnError = m.laError[1]
     lcError = m.laError[2]
     lcError = "ERROR: " + Transform(.nError) + Chr(13) + lcError
    Messagebox(lcError)

    = SqlExec(Cone,'ROLLBACK')

    Wait Window "Ocurrió un Error "+Chr(13)+"Atencion"
Endif

Saludos,
Víctor.
Lambaré - Paraguay.


--

HernanCano

unread,
May 28, 2022, 11:39:20 PM5/28/22
to Comunidad de Visual Foxpro en Español
Qué pasa si en vez de 

PRETEXT 7

usas

PRETEXT 15 ???????

Jomel Mcdonald - Dj Megabyte

unread,
May 28, 2022, 11:50:10 PM5/28/22
to publice...@googlegroups.com
es la mezcla de todos 1, 2, 4 y 8, con el 15 agregas para que tambien elimine los saltos de lineas a lo que este dentro del TEXT....ENDTEXT....

EL 1 - elimina los espacios antes de cada linea
el  2 - elimina los tabs antes de cada linea.
el  4 - elimina los retornos de carro, osea lineas en blanco antes de cada linea. y
el  8 - elimina los saltos de lineas

por lo general el mas usado es la combinacion de 1+2+4 = 7



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Germán Fabricio Valdez

unread,
May 29, 2022, 12:28:54 AM5/29/22
to Comunidad de Visual Foxpro en Español
te quiero advertir que la tecnica que estas usando para grabar , es rapida solo en red local,  por internet es inusable.
utiliza sqldata2.
aqui mi grupo de whatsapp

Enrique

unread,
May 29, 2022, 12:29:44 AM5/29/22
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos.
Se resolvió quitando la última coma como indica  Jom y Vich capturando el error en el campo fecha y por ultimo agregando lo indicado por Hernán, agregando  PRETEXT 15.

Ahora con la misma rutina puedo agregar mas campos y de forma mas ordenada, quitando la ultima coma antes del   WHERE .

Muchas gracias nuevamente.

Enrique

unread,
May 29, 2022, 12:36:41 AM5/29/22
to Comunidad de Visual Foxpro en Español
gfva...@gmail.com :
  te quiero advertir que la tecnica que estas usando para grabar , es rapida solo en red local,  por internet es inusable.
utiliza sqldata2.
aqui mi grupo de whatsapp

Uff. Recién vi este mensaje. Precisamente contrate un hosting y estoy realizando estas pruebas.
Nunca he usado sqldata2.

Y las consultas también cambian. Tengo un sistema que solo realiza consultas y tiene un buen comportamiento.?


Me uniré al grupo de wassap.

Muchas gracias.



Jomel Mcdonald - Dj Megabyte

unread,
May 29, 2022, 12:40:58 AM5/29/22
to publice...@googlegroups.com
sin desmeritar lo que dice el compañero German, te comento que utilizo mariadb y me va de las mil maravillas, tanto local como externo.
un punto a favor de esa velocidad es no utilizar tu motor de base de datos en sistemas operativos de windows.

por lo general siempre les pongo a mis clientes una PC con Linux la mejor distribución que me ha funcionado es debian.
y creeme que las respuestas de consulta de datos, grabar y todo es rapidito como si estuvieras localmente.
no he probado utilizar servidores en la nube pero deberia ser igual.


Jomel Mcdonald - Dj Megabyte

unread,
May 29, 2022, 12:43:45 AM5/29/22
to publice...@googlegroups.com
me uni al grupo...gracias

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Victor Espina

unread,
May 30, 2022, 9:20:09 AM5/30/22
to Comunidad de Visual Foxpro en Español
te quiero advertir que la tecnica que estas usando para grabar , es rapida solo en red local,  por internet es inusable.
utiliza sqldata2.

En mi experiencia, solo un HTTP request es mas rápido que usar SPT (Sql Pass-Thru) sobre una conexión remota.  Que técnica de VFP usas en sqldata/sqldata2 que sea mas rápida que SPT ??  Intente descargar la ultima version desde el link en MEGA que publicaste, pero ya no están disponibles.   Y te pregunto porque, hasta donde se, las únicas dos formas que hay en VFP para actualizar una fuente remota de datos son SPT (SQLEXEC) y Vistas/Cursores remotos (TABLEUPDATE), y en lo particular pienso que SPT no solo es mucho mas rápido que un cursor actualizable sino menos propenso a errores extraños.  

Victor Espina

Programação Iniciante

unread,
Jun 2, 2022, 5:39:59 PM6/2/22
to Comunidad de Visual Foxpro en Español
Aquí funciona así.... pero hay otras formas...
TRY
       
        = sqlsetprop(yourconnectionH,'DispWarnings',.t.)

        SqlCmd= "Update ..... ................................................................................................................. '

        = SQLPREPARE(yourconnectionH,SqlCmd)
     
        = SQLEXEC(yourconnectionH)
 
  CATCH
        Aerror(laError)
        resp=MESSAGEBOX("No se pudo leer la tabla. Intentar nuevamente ? "+CHR(13)+laError[1,2],36,"Aviso do Sistema")
 ENDTRY
Reply all
Reply to author
Forward
0 new messages