Hacer un INSERT INTO a mysql

305 views
Skip to first unread message

William Villada

unread,
Jun 15, 2022, 1:50:53 AM6/15/22
to Comunidad de Visual Foxpro en Español
Hola. Estoy haciendo una prueba aprendiendo a grabar registros en una tabla de MySql pero en fox me sale un mensaje de error al tratar de grabar el formulario indicando que no encuentra la función. "Function name is missing). Aquí dejo el código para ver si me pueden ayudar con lo que estoy haciendo mal.  Gracias

    *** Establecer la conexión
    LOCAL lnHandle as Integer, laError(1)
    *-- Sin DSN
    lnHandle = SQLSTRINGCONNECT([Driver={MySQL ODBC 8.0 ANSI Driver}; Server=localhost; ] + ;
     [Database=minishop; uid=root; pwd=])
    IF lnHandle > 0
        SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S'))"

    ELSE
     AERROR(laError)
     MESSAGEBOX('No pudo conectarse: ' + laError(2), 48, 'Aviso')
    ENDIF
    ***************    

HernanCano

unread,
Jun 15, 2022, 3:21:14 AM6/15/22
to Comunidad de Visual Foxpro en Español
Intenta cambiando

SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S' ) ) "
 
por

SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S' ) " )

 Y nos cuentas.

William Villada

unread,
Jun 15, 2022, 9:38:28 AM6/15/22
to Comunidad de Visual Foxpro en Español
Excelente! con ese cambio ahora no aparece ese mensaje de error. Pero tengo otra pregunta: No se está guardando el registro que estoy insertando y creo que es porque le falta el COMMIT. Como hago eso?    Gracias

nkris...@gmail.com

unread,
Jun 15, 2022, 11:59:30 AM6/15/22
to Comunidad de Visual Foxpro en Español
lnRes = SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S' ) " )
if lnRes < 0 then 
     AERROR(laError)
     sqlrollback(lnHandle)
     MESSAGEBOX('Error: ' + laError(2), 48, 'Aviso')
else
     sqlcommit(lnHandle)
endif 

HernanCano

unread,
Jun 15, 2022, 3:20:14 PM6/15/22
to Comunidad de Visual Foxpro en Español
Primera alternativa:
SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S' ) ; COMMIT; " )

Segunda alternativa:
SQLEXEC(lnHandle, "INSERT INTO categoria('cat_code','cat_name','cat_estado') values(?m_CatCode,?m_CatName,'S' ) " )
SQLEXEC(lnHandle, " COMMIT; " )

Tercera Alternativa:
Aprender SQL, y --mucho mejor-- el del motor con que se a a trabajar.

William Villada

unread,
Jun 15, 2022, 3:32:41 PM6/15/22
to Comunidad de Visual Foxpro en Español
Gracias! ya me funcionó y pude guardar el registro!

Germán Fabricio Valdez

unread,
Jun 15, 2022, 8:46:54 PM6/15/22
to Comunidad de Visual Foxpro en Español
te recomiendo que aprendas a usar mi clase sqldata2 para mysql 
no tendras estos problemas , ademas esta tecnica que estas usando no sirve si estas accediendo por internet
mi grupo de whatsapp

mhlezama

unread,
Jun 24, 2022, 9:33:55 PM6/24/22
to Comunidad de Visual Foxpro en Español
Sqlcommit es desde el fox?

Germán Fabricio Valdez

unread,
Jun 24, 2022, 11:05:01 PM6/24/22
to Comunidad de Visual Foxpro en Español
Si

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/xpYMqdiU1PE/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, 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/0077e0d9-726c-4b04-a7f9-3a25d5656882n%40googlegroups.com.

Antonio Meza

unread,
Jun 25, 2022, 10:27:05 AM6/25/22
to Comunidad de Visual Foxpro en Español
También puedes probar con FoxyDb hace tu código mas legible y te permite concentrarte en tu aplicación y no en el acceso o manejo de los datos, te evitas el control de transacciones, conexión y desconexión, aplicas buenas practicas.

* Obtener cursor vacío para insertar registros nuevos
oDb.Query("Select * from categorias where 2=1", "categorias")

* Preparar el cursor para poder modificarlo
oDb.CursorEdit("categorias")

* agregar registro desde VFP
INSERT INTO categoria (cat_code, cat_name, cat_estado) values (m_CatCode, m_CatName, 'S')

* Actualizar en el servidor
If oDb.Update("categorias")
     oDb.Commit()
else
     oDb.Rollback()
endif

saludos
Antonio Meza

Javier lugo

unread,
Mar 14, 2023, 8:32:24 AM3/14/23
to Comunidad de Visual Foxpro en Español
Hola a todos.. estoy empezando con MariaDB, para intentar migrar una pequeña aplicacion que tengo... he conseguido bien las conexiones, y hacer select, update , insert.. ect
hasta aqui todo bien.. la pregunta es como puedo hacer un insert o un update con variables, pongo ejm.

INSERT INTO myTable (Product, Description, Type, Date)
VALUES (?lcProduct, ?lcDescription, ?lcType, ?ldDate)

esto me funciona y ya utiliza variables, hasta aqui bien... pero lo que quiero es:
tabla=" myTable "
campos=" Product, Description, Type, Date"
valores=" ?lcProduct, ?lcDescription, ?lcType, ?ldDate"

INSERT INTO tabla (campos) VALUES (valores)
pero esto no me funciona.. a lo mejor es que es imposible... gracias a todos por la ayuda

Javier Javier

unread,
Mar 14, 2023, 8:46:35 AM3/14/23
to publice...@googlegroups.com
Hola, te recomiendo si recién estás empezando programar todo nativo, sin ningún intermediario, es bastante simple, cuando tuve que pasar todo un desarrollo que tenía DBF´s a Mysql lo hice así

Primero haces la conexión ODBC con la Base

lcDSNLess="DRIVER={"+ALLTRIM(cDriverInstalado)+"};" ;
+ "SERVER=" + ALLTRIM(lcserver) + ";" ;
+ "PORT="+ALLTRIM(lcport)+";" ;
+ "DATABASE="+ALLTRIM(cBase)+";" ;
+ "USER="+ALLTRIM(lcuid)+";";        
+ "PASSWORD="+ALLTRIM(lcpwd)+";OPTION=2048"

PUBLIC pub_handle
SQLSETPROP(0,"DispLogin",3)
pub_handle=sqlstringconnect(m.lcDSNLess)

IF pub_handle <= 0
return
ENDIF

En pub_handle te devuelve el -1 si hubo un error, si es > 0 se conectó perfecto.


Para hacer un insert 

TEXT TO SQLQUERY TEXTMERGE NOSHOW
    INSERT tabla ( campo1, campo2) values (<<valorCampo1>>, <<valorCampo2>>
ENDTEXT

res=SQLEXEC(pub_handle, SQLQUERY)
IF res < 0
      =MESSAGEBOX("Error en SQL - AVISE A SISTEMAS" +CHR(13)+CHR(13)+sqlquery,16,'NO se actualiza') 
      RETURN
ENDIF

Saludos


--
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/0d86551f-f372-4e92-a8f5-d988e982e384n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages