INSERTAR VARIOS CAMPOS EN MYSQL

131 views
Skip to first unread message

manuel medina

unread,
Feb 18, 2021, 8:59:03 PM2/18/21
to Comunidad de Visual Foxpro en Español
Noche a todos/as,
Decirles que ya arranque con VISUAL FOXPRO Y MYSQL despues de lograr conectarme pero ahora en el INSERT si pongo mas de 7 campos me da error 

SQLEXEC(coneccion,"INSERT INTO articulos(CODIGO,DESCRIP,PADRE,DEPARTA,codigop,descripp,costo) VALUES (?thisform.codigo.value,?thisform.descrip.value,?thisform.padre.value,?thisform.departa.value,?thisform.codigop.value,?thisform.descripp.value,?thisform.costo.value)")

hasta aqui todo bien, pero el siguiente tiene uno mas y da el error siguiente:
SQLEXEC(coneccion,"INSERT INTO articulos(CODIGO,DESCRIP,PADRE,DEPARTA,codigop,descripp,costo,e1) VALUES (?thisform.codigo.value,?thisform.descrip.value,?thisform.padre.value,?thisform.departa.value,?thisform.codigop.value,?thisform.descripp.value,?thisform.costo.value,?thisform.e1.value)")


Afpsistemas - Fernando Maggi

unread,
Feb 18, 2021, 9:05:17 PM2/18/21
to publice...@googlegroups.com

Hola,

Estas superando el largo permitido, te conviene poner todo en un TEXT TO variable NOSHOW …. ENDTEXT y luego SQLEXEC(conexion,variable)

 

Saludos,

Fernando.

--
Visita el 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/59cb0439-8c95-406a-914b-3ac37ec551c8o%40googlegroups.com.

image001.png

Antonio Lima

unread,
Feb 18, 2021, 9:50:41 PM2/18/21
to publice...@googlegroups.com
Hola Manuel Medina,

AfpSistemas  tiene razón,  para cadenas largas es mejor utilizar un comando TEXT.... ENDTEXT

Te dejo un ejemplo  ( ojala te sirva)
las instrucciones sql ( encapsuladas dentro de una transacción) para que si se produce un error entre medias, no guarde unas cosas si y otras no, en su lugar   no guarde nada.
lo ideal es que cuando se produzca un error llames a AERROR() y guardes el mensaje de error, para que al final puedas mostrar el motivo por el que se ha producido el error

para que este ejemplo  funcione bien, 
cuando creas tu conexión, debes configurar tu sessión de la siguiente forma  para que no se guarden los datos automaticamente, sino que se guarden cuando hagas commit
llResult = SQLEXEC( coneccion ', "set autocommit=0") 


*- al principio del código puedes definir tu variable como local,  para que no se pueda ver en otros procesos
LOCAL llResultado, lcSQLCommand

   llResultado = SQLEXEC(coneccion,l "start transaction") > 0     && "start transaction" se utiliza en MySQL  y "begin transaction" se utiliza en SQL Server

   *- solo si es .T. se siguen ejecutando las instrucciones
   IF llResult AND SQLSETPROP( coneccion ,'Transactions',2) > 0      && para que no haga un autoUpdate automáticamente , lo ponemos en modo  Manual

         TEXT TO lcSQLCommand TEXTMERGE NOSHOW PRETEXT 3
               INSERT INTO articulos(CODIGO,DESCRIP,PADRE,DEPARTA,codigop,descripp,costo,e1) 
               VALUES (?thisform.codigo.value,?thisform.descrip.value,?thisform.padre.value,?thisform.departa.value,?thisform.codigop.value,?thisform.descripp.value,?thisform.costo.value,?thisform.e1.value)
         ENDTEXT
         llResultado = SQLEXEC(coneccion,lcSQLCommand) > 0
      ENDIF

      IF llResultado
          *- Aqui mas instrucciones
      ENDIF

      *- si todo bien hacemos commit
       IF llResultado
            wait window "Se ha guardado correctamente"  nowait      &&  evito poner este mensaje , solo pongo el mensaje de error si es que se ha producido alguno
            llResultado = SQLEXEC(coneccion, "COMMIT") > 0
      ENDIF

    IF NOT llResultado
        =messagebox( "Se ha producido un error " ,48, "Error")
          = SQLEXEC(coneccion, "ROLLBACK") > 0  
    ENDIF
ENDIF

SQLSETPROP( coneccion ,'Transactions',1)    && lo dejamos como estaba antes ( modo automático)

Antonio Meza

unread,
Feb 19, 2021, 10:30:15 AM2/19/21
to Comunidad de Visual Foxpro en Español
Te recomiendo que uses FoxyDb, te evitas generar de forma manual los comandos SQL para enviar al servidor, lo mas seguro es que no estas tomando en cuenta el tema de transacciones y otros detalles que ya realiza la librería.


saludos
Antonio Meza

Germán Fabricio Valdez

unread,
Feb 21, 2021, 4:14:48 PM2/21/21
to Comunidad de Visual Foxpro en Español
hola medina
ese error no es de mysql,  es un error de sintaxis en fox, que detecta cuando  lo compilas.

o te falta algun parentesis o alguna comilla

HernanCano

unread,
Feb 22, 2021, 2:05:55 AM2/22/21
to Comunidad de Visual Foxpro en Español
Colega medina:
La primera instrucción tiene menos de 255 caracteres. 
La segunda instrucción tiene más de 255 caracteres. 

¿Ya lo habías analizado por ahí?
Reply all
Reply to author
Forward
0 new messages