ODBC - Comandos INSERTAR, MODIFICAR, BORRAR

516 views
Skip to first unread message

mhlezama

unread,
Apr 20, 2017, 8:24:40 PM4/20/17
to Mundo Visual FoxPro
Saludos amigos

Tengo otra pregunta.  Tengo una conexion ODBC con mysql y es mediante un DNSusuarios.  Hasta allí todo bien
La conexión funciona.

La pregunta es:  Qué comandos debo usar para INSERTAR, MODIFICAR, BORRAR registros con una conexion ODBC
hacia un mysql que lo acceso con LOCALHOST?

Si alguien puede ayudarme, gracias

Oscar Bonet

unread,
Apr 20, 2017, 8:55:30 PM4/20/17
to mundovisualfoxpro@googlegroups com
despues que te hayas conectado a una base de datos el tratamiento de registros es a través de instrucciones SQL en forma estandar o nativas segun el motor de la base de datos.


_________________
Oscar Bonet

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfoxpro+unsubscribe@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

mhlezama

unread,
Apr 20, 2017, 9:02:18 PM4/20/17
to Mundo Visual FoxPro
no tienes algun ejemplo corto de ingreso, modificar, excluir?


El jueves, 20 de abril de 2017, 18:55:30 (UTC-6), Oscar Bonet escribió:
despues que te hayas conectado a una base de datos el tratamiento de registros es a través de instrucciones SQL en forma estandar o nativas segun el motor de la base de datos.


_________________
Oscar Bonet
El 20 abr. 2017 7:24 PM, "mhlezama" <mhle...@gmail.com> escribió:
Saludos amigos

Tengo otra pregunta.  Tengo una conexion ODBC con mysql y es mediante un DNSusuarios.  Hasta allí todo bien
La conexión funciona.

La pregunta es:  Qué comandos debo usar para INSERTAR, MODIFICAR, BORRAR registros con una conexion ODBC
hacia un mysql que lo acceso con LOCALHOST?

Si alguien puede ayudarme, gracias

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:

---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfox...@googlegroups.com.

Oscar Bonet

unread,
Apr 20, 2017, 9:12:45 PM4/20/17
to mundovisualfoxpro@googlegroups com
una guia en el siguiente link:

_________________
Oscar 


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

mhlezama

unread,
Apr 20, 2017, 9:19:05 PM4/20/17
to Mundo Visual FoxPro
Gracias,

Solo tengo una pregunta.  Eso quiere decir que debo utilizar comandos SQL puros en la programación de VFP?  Estoy usando Mysql

Oscar Bonet

unread,
Apr 20, 2017, 9:24:09 PM4/20/17
to mundovisualfoxpro@googlegroups com
creeria que lo mas estandar posible por si algun dia cambias de motor de base de datos de tal manera que al modificar no sea tan traumatico la migracion.

_________________
Oscar 


---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

mhlezama

unread,
Apr 20, 2017, 9:33:48 PM4/20/17
to Mundo Visual FoxPro
si utilizo comando SQL como INSERT me dice que es un VIEW y no una tabla...

HernanCano

unread,
Apr 20, 2017, 10:33:23 PM4/20/17
to Mundo Visual FoxPro
Colega:
¿Cómo lo estás usando?
Muéstranos los comandos desde VFP que estás usando....

mhlezama

unread,
Apr 20, 2017, 10:48:14 PM4/20/17
to Mundo Visual FoxPro
Ya logré utilizar SQLSTRINGCONNECT, pero no entiendo el SQLEXEC?

HernanCano

unread,
Apr 21, 2017, 5:34:01 PM4/21/17
to Mundo Visual FoxPro
Colega:

Parece que ya puedes usar datos "nativos" --es decir en DBF-- de VFP.

Ahora si deseas usar datos "remotos" --o sea en archivos que no están en DBF-- que los encuentras normalmente en motores de bases de datos al estilo MySQL, MariaDB, Oracle, SQL Server, Firebird, SQLite, PostgreSQL, Informix, Paradox, y muchos más, necesitas emplear algún método de acceso a ellos.

Existen varios métodos de acceso a datos remotos, algunos son:

ODBC
ADO
JDBC
OLEDB

y quizá más.

Hablemos de ODBC. Para usar datos remotos necesitas cambiar el chip: ahí no usas USE, SKIP, REPLACE, APPEND, GO, ni tantos otros comandos que sólo se usan en "datos nativos" (ya sabes qué son datos nativos).

Para conocer cómo se aplica ODBC, te recomiendo un documento que nos comparte Luis M. Guayán:

Acceso a datos remotos desde Visual FoxPro

Y luego seguimos conversando.

Mario Hernandez

unread,
Apr 22, 2017, 4:36:14 PM4/22/17
to mundovis...@googlegroups.com
SI, he usado comandos nativos, pero no de MySQL

Atentamente


Mario Hernández


-------- Mensaje original --------
Asunto: Re: [Mundo Visual FoxPro] ODBC - Comandos INSERTAR, MODIFICAR, BORRAR
De: HernanCano
Para: Mundo Visual FoxPro
CC:


--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Mundo Visual FoxPro" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/mundovisualfoxpro/y5bLMzbT7l4/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a mundovisualfox...@googlegroups.com.

mhlezama

unread,
Apr 22, 2017, 9:30:43 PM4/22/17
to Mundo Visual FoxPro
He usado las tablas nativas de vfp, pero en mysql no, realizé una conexion mediante un ODBC
probé usar INSERT INTO tabla (codigo, nombre) value ('0001','EMPRESA') pero no logro hacerlo

He escuchado del CURSOADAPTADER

pero no entiendo, no sé si quizás hay demasiado información, pero no se han podido explicar bien.

mhlezama

unread,
Apr 22, 2017, 9:40:43 PM4/22/17
to Mundo Visual FoxPro

AMIGOS....

No sé si estoy en lo correcto.  Hice lo siguiente


1. Tengo un localhost con phpadmin y mysql
2. realice una conexion con un ODBC
3. Ingrese a VFP9 y lo que hice fue un CONEXION REMOTA con el ODBC creado
4. Hice un form y en el form agregue la VISTA REMOTA
5. utilzo comandos de VFP  
    go 1
    replace edad with 100
    tableudate()

y me lo actualiza en el localhost

eso es correcto?

mhlezama

unread,
Apr 22, 2017, 10:04:47 PM4/22/17
to Mundo Visual FoxPro
Incluso utilizo para actualizar

REPLACE edad WITH 25
tableupdate()


y lo actualiza, esto es correcto ?

mhlezama

unread,
Apr 22, 2017, 10:06:31 PM4/22/17
to Mundo Visual FoxPro

UTILIZO tambien  DELETE
tableupdate

y me borra el registro, lo que hago es correcto? esta bien?




El sábado, 22 de abril de 2017, 19:40:43 (UTC-6), mhlezama escribió:

mhlezama

unread,
Apr 22, 2017, 10:23:15 PM4/22/17
to Mundo Visual FoxPro
Entre las pruebas que he hecho ahora me da un error



como se arregla?
Auto Generated Inline Image 1

mhlezama

unread,
Apr 23, 2017, 12:46:23 PM4/23/17
to Mundo Visual FoxPro
Estoy usando los comandos de mysql como INSERT, UPDATE, etc

Pero la duda es si se debe usar TABLEUPDATE o no????

Lo otro es que no utilizo el SQLEXEC
o con solo lo anterior es suficiente?????

mhlezama

unread,
Apr 23, 2017, 7:37:36 PM4/23/17
to Mundo Visual FoxPro
 Luego que hice la conexion con ODBC me trae la información a VFP, pero cuando uso el UPDATE no lo actualiza
por favor ayuda.

Oscar Bonet

unread,
Apr 23, 2017, 7:41:16 PM4/23/17
to mundovisualfoxpro@googlegroups com
por esa opcion es mas complicado.   utiliza sqlconnect, por favor primero estuadiate toda la documentacion.   revisa videos en youtube Vidual foxpro con sql server, algunosnde esos videos te ilustrarán mejor.
________
Oscar

El 23 abr. 2017 6:37 PM, "mhlezama" <mhle...@gmail.com> escribió:
 Luego que hice la conexion con ODBC me trae la información a VFP, pero cuando uso el UPDATE no lo actualiza
por favor ayuda.

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

HernanCano

unread,
Apr 24, 2017, 12:36:38 AM4/24/17
to Mundo Visual FoxPro
Colega:
Te invité a leer el documento de Luis M.Guayán.

¿Qué te pareció? ¿Qué deseas que revisemos de ese doc?

mhlezama

unread,
Apr 24, 2017, 11:11:43 AM4/24/17
to Mundo Visual FoxPro
Hernan, gracias voy al revisarlo y te aviso

William López Jiménez

unread,
Apr 24, 2017, 3:48:00 PM4/24/17
to Mundo Visual FoxPro
Ejemplo de INSERTAR

VARESTADO=ALLTRIM(THISFORM.ESTADO.VALUE)
VARCONTRATO=THISFORM.CONTRATO.VALUE
VARCONTRAT=ALLTRIM(THISFORM.CONTRAT.VALUE)
VARUSUARIO=ALLTRIM(THISFORM.NOMBRE.VALUE)
VARAPELLIDOP=ALLTRIM(THISFORM.APEP.VALUE)
VARAPELLIDOM=ALLTRIM(THISFORM.APEM.VALUE)
VARRFC=ALLTRIM(THISFORM.RFC.VALUE)
VARCALLE=ALLTRIM(THISFORM.CALLE.VALUE)
VARNUMERO=ALLTRIM(THISFORM.NUMERO.VALUE)
VARINTERIOR=ALLTRIM(THISFORM.INTERIOR.VALUE)
VARCOLONIA=ALLTRIM(THISFORM.COLONIA.VALUE)
VARSECTOR=ALLTRIM(THISFORM.SECTOR.VALUE)
VARCIUDAD=ALLTRIM(THISFORM.CIUDAD.VALUE)
VARTELEFONO=ALLTRIM(THISFORM.TEL.VALUE)
VARPOSTE=ALLTRIM(THISFORM.POSTE.VALUE)
VAROBSERVA1=ALLTRIM(THISFORM.OBSERV.VALUE)
VARENTRECALLE=ALLTRIM(THISFORM.ENTRECALLE.VALUE)
VARTIPOINSTAL=THISFORM.TIPOINST.LISTINDEX
VARTIPOSERVIC=THISFORM.TIPOSERV.LISTINDEX
VARCP=ALLTRIM(THISFORM.TEXT1.VALUE)
VARID=ALLTRIM(THISFORM.CONTRAT.VALUE)
varfenac=thisform.fecnac.value
varcorreo=alltrim(ThisForm.correo.value)

nHandle = SQLCONN('tvnet','','')

*- Comprobamos la Conexión
IF nHandle > 0



** GUARDAR INFORMACION DE CLIENTES
lcCadena=""
lcCadena = "INSERT INTO clientes ( empresa_id,contrato,usuario,apellidop,apellidom,rfc,calle,"
  lcCadena = lcCadena + "numero,interior,colonia,sector,ciudad,telefono,fechanaci,correo,poste,observa1,entrecalle,"
    lcCadena = lcCadena + "tipoinstal,tiposervic,status,cp,contrat,fechaalta,tvadd,conrfc,comenta,fechasuspension,fechainstalacion,fechareconexion,ife,cfe)"
    lcCadena = lcCadena + " VALUES (" + STR(VAREMPRESA) + ","+ STR(VARCONTRATO)+ ",'"    
    lcCadena = lcCadena + VARUSUARIO + "','" + VARAPELLIDOP+"','" + VARAPELLIDOM + "','" + VARRFC + "','"
    lcCadena = lcCadena + VARCALLE + "','" + VARNUMERO + "','" + VARINTERIOR + "','" + VARCOLONIA + "','"
    lcCadena = lcCadena + VARSECTOR + "','" + VARCIUDAD + "','" + VARTELEFONO + "',{"+alltrim(DTOC(varfenac))+"},'" + varcorreo + "','" + VARPOSTE + "','"
    lcCadena = lcCadena + VAROBSERVA1 + "','"+ VARENTRECALLE + "'," + STR(VARTIPOINSTAL) + "," + STR(VARTIPOSERVIC) + ",'"
    lcCadena = lcCadena + VARESTADO + "','" + VARCP + "','"+ VARCONTRAT + "',{" + DTOC(DATE()) + "},.f.,.f.,'',{},{},{}, '" + cTargetFileIFE + "','" + cTargetFileCFE + "' )"
SQLEXEC(nHandle,lcCadena) 


ELSE
=MESSAGEBOX("Error al Conectar",16,"Atención")
 RETURN
ENDIF


Un pequeño ejemplo sobre el uso de INSERT con tablas Mysq usando diferentes tipos de campos para que te des una idea ..  Saludos .. 

mhlezama

unread,
Apr 30, 2017, 11:14:28 AM4/30/17
to Mundo Visual FoxPro
Leí el documento y veo que esta interesante porque te explica que hay varias maneras de conectarse, cuales son las ventajas y desventajas de cada uno de ellos.

Tratando de aprender logré conectarme a una base de datos con una VISTA de VFP, noté que algunas ocasiones me da mensajes tales como:
- se desconectó del servidor
- conflictos en los datos

asumo que esa es la razón por la cual es desventajoso el usar las vistas, para mi lo veo bien porque en los forms o reportes puedo utilizar
los campos de forma directa.

Pero cuando se usa otro tipo de conexion o al utilizar los reportes no sabría como jalar los campos para el reporte o el form

Si talvez me pudiera orientar?  y si lo que dije estoy en lo correcto?

Gracias





El domingo, 23 de abril de 2017, 22:36:38 (UTC-6), HernanCano escribió:

HernanCano

unread,
May 1, 2017, 1:19:16 AM5/1/17
to Mundo Visual FoxPro
*--
*-- Ejemplo de SQL pass-through (MS SQL Server)
*--
LOCAL lnHandle as Integer, laError(1)
*-- Con DSN
lnHandle = SQLCONNECT('Northwind', 'sa', '')
*-- Sin DSN
*lnHandle = SQLSTRINGCONNECT([Driver=SQL Server; Server=localhost; ] + ;
   [Database=Northwind; uid=sa; pwd=])
IF lnHandle > 0
   SQLEXEC(lnHandle, [SELECT * FROM Empleados WHERE EmpleadoId = 1], 'MiCursor')
   BROWSE
   report form 'EL-REPORTE.FRX' preview
   SQLDISCONNECT(lnHandle)
ELSE
   AERROR(laError)
   MESSAGEBOX('No pudo conectarse: ' + laError(2), 48, 'Aviso')
ENDIF
*--
*-- Fin Ejemplo de SQL pass-through (MS SQL Server)
*--

Tip: Después que tengas los datos en un cursor, lanzas el reporte.


Para formularios, puedex utilizar la técnica mostrada en 

Navegación en Formularios ABM en entornos Cliente / Servidor

Se muestra la forma de hacerlo en MariaDB/MySQL, pero ---descontando las cláusulas ENGINE y FORCE INDEX--- puedes aplicarla a otros motores.


El domingo, 30 de abril de 2017, 10:14:28 (UTC-5), mhlezama escribió:
Leí el documento y veo que esta interesante porque te explica que hay varias maneras de conectarse, cuales son las ventajas y desventajas de cada uno de ellos.

Tratando de aprender logré conectarme a una base de datos con una VISTA de VFP, noté que algunas ocasiones me da mensajes tales como:
- se desconectó del servidor
- conflictos en los datos

asumo que esa es la razón por la cual es desventajoso el usar las vistas, para mi lo veo bien porque en los forms o reportes puedo utilizar
los campos de forma directa.

Pero cuando se usa otro tipo de conexion o al utilizar los reportes no sabría como jalar los campos para el reporte o el form

Si tal vez me pudiera orientar?  y si lo que dije estoy en lo correcto?

Gracias

mhlezama

unread,
May 1, 2017, 8:32:51 PM5/1/17
to Mundo Visual FoxPro
Hernan

Logré hacer la conexión de dos maneras:

1. ODBC, en el cual uso comando de visual foxpro
2. SPT, la forma directa y funciona en algo sencillo, la conexion es directa y se puede hacer el browse

Esto lo quiero llevar a un FORM

1. En el form cree un METHOD que se llama CONECTAR, en este método hago la conexión que me enviastes, y conecta perfectamente.
2. Cuando hago la conexión NO HAGO la desconexión.  La desconexión lo hago en un BOTON llamado SALIR.  No sé si es lo correcto.
3. En el INIT ejecuto el método de conectar

Este es el método conectar

PUBLIC lnHandle as Integer, laError(1)
*-- CONEXION Sin DSN

* WEBSITE
lnHandle = SQLSTRINGCONNECT([Driver=MySQL ODBC 5.3 ANSI Driver;SERVER=xxx.xxx.xxx.xxx;UID=emp_registro;PWD=miclave;DATABASE=emp_registro;PORT=3306])

IF lnHandle > 0
  
       WAIT WINDOW 'CONECTADO AL SERVIDOR' NOWAIT
  
    * { crea un cursor llamado
        SQLEXEC(lnHandle,"","misdatos")

       
    * { no lo desconecto, lo hago en un boton llamado salir
ELSE
   AERROR(laError)
   MESSAGEBOX('No pudo conectarse: ' + laError(2), 16, 'Aviso')
ENDIF




4. En el botón INGRESAR hago lo siguiente

* { ingresa datos

    vcodigo   = thisform.txtcodigo.Value
    viempresa  = thisform.txtempresa.Value
    vnombre   = thisform.txtnombre.Value
    vcorreo   = thisform.txtcorreo.Value
    vtelefono = thisform.txttelefono.Value
    vcargo    = thisform.txtcargo.Value
    vservicio = thisform.txtservicio.value

* { en la siguiente linea escribo EMPRESAS que es el nombre de la TABLA, o debo escribir el nombre del CURSOR que es MISDATOS ????

        SQLEXEC(lnhandle, [INSERT INTO empresas (codigo,empresa,nombre,correo,telefono,cargo,servicio);
                 VALUES (vcodigo, vempresa, vnombre, vcorreo, vtelefono, vcargo, vservicio)])


pero no funciona.  No sé si puedes orientarme un poco.  GRACIAS

Oscar Bonet

unread,
May 1, 2017, 8:36:09 PM5/1/17
to mundovisualfoxpro@googlegroups com
desconectalo en el evento destroy del formulario.


____

--

Víctor Hugo Espínola Domínguez

unread,
May 1, 2017, 8:37:20 PM5/1/17
to mundovis...@googlegroups.com
SQLEXEC(lnhandle, [INSERT INTO empresas (codigo,empresa,nombre,correo,telefono,cargo,servicio);
                 VALUES (?m.vcodigo, ?m.vempresa, ?m.vnombre, ?m.vcorreo, ?m.vtelefono, ?m.vcargo, ?m.vservicio)])

Saludos,
Víctor.
Lambaré - Paraguay.


--

mhlezama

unread,
May 1, 2017, 8:44:18 PM5/1/17
to Mundo Visual FoxPro
Lo hice de la siguiente manera






---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfox...@googlegroups.com.
Auto Generated Inline Image 1
Auto Generated Inline Image 2

mhlezama

unread,
May 1, 2017, 8:45:31 PM5/1/17
to Mundo Visual FoxPro
Gracias Victor

Que significado tiene ? y la letra m. ? 

esto para aprender

---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfox...@googlegroups.com.

Oscar Bonet

unread,
May 1, 2017, 8:55:54 PM5/1/17
to mundovis...@googlegroups.com

Así es correcto;

 

Adicional deberías también de colocar en la propiedad del formulario “DataSession” 2= Sesion Privada de datos.  Esto para que los cursores que traiga las consultas no se mezclen con los formularios o ventanas del mismo nombre cuando se abran en la misma sesión.


Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.com
Versión: 2016.0.8013 / Base de datos de virus: 4776/14417 - Fecha de la versión: 01/05/2017

mhlezama

unread,
May 1, 2017, 9:05:05 PM5/1/17
to Mundo Visual FoxPro
No sé como hacerlo

mhlezama

unread,
May 1, 2017, 9:06:19 PM5/1/17
to Mundo Visual FoxPro



Será este???




El lunes, 1 de mayo de 2017, 18:55:54 (UTC-6), Oscar Bonet escribió:
Auto Generated Inline Image 1

mhlezama

unread,
May 1, 2017, 9:07:54 PM5/1/17
to Mundo Visual FoxPro

Será este?




cada formulario debe llevar una conexión con DIFERENTE NOMBRE o puede ser igual?




El lunes, 1 de mayo de 2017, 18:55:54 (UTC-6), Oscar Bonet escribió:
Auto Generated Inline Image 1

Oscar Bonet

unread,
May 1, 2017, 9:17:48 PM5/1/17
to mundovisualfoxpro@googlegroups com
si




---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

mhlezama

unread,
May 1, 2017, 9:27:40 PM5/1/17
to Mundo Visual FoxPro
1. Debo poner el FORM en PRIVADO, listo
2. las conexiones en cada formulario debe ser con nombres de CURSOR diferentes ?
3. En modificar tengo este problema

buscacodigo = thisform.txtcodigo.value
vempresa  = thisform.txtempresa.Value
vnombre   = thisform.txtnombre.value

vcorreo   = thisform.txtcorreo.Value
vtelefono = thisform.txttelefono.Value
vcargo    = thisform.txtcargo.Value
vservicio = thisform.txtservicio.value

    SQLEXEC(lnhandle, [UPDATE lideres SET empresa=vempresa, nombre=vnombre, correo=vcorreo, telefono=vtelefono, cargo=vcargo, servicio=vservicio WHERE codigo=bucacodigo])

Oscar Bonet

unread,
May 2, 2017, 8:18:18 AM5/2/17
to mundovis...@googlegroups.com

Respuestas:

 

1= si

2=no necesariamente;  pueden ser los mismos nombres, para eso es la propiedad datasession = 2   Privados, que hacen que no tengan conflictos por los mismos nombres pues cada formulario se abriria en una sesión de datos privada

 

3= en modificar:

         Cada variable ante ponle el signo ?cVariable    (signo interrogación) es como un apuntador a la variable en memoria.

 

La expresión SQL  que se envía la encierro entre comillas, es decir, lo que envías al SQLEXEC() es una expresión de caracteres  (retira llaves cuadradas)

 

Quedaría así:    SQLEXEC(lnhandle, “ UPDATE lideres SET empresa=?vempresa, nombre=?vnombre, correo=?vcorreo, telefono=?vtelefono, cargo=?vcargo, servicio=?vservicio WHERE codigo=?bucacodigo ” )

Víctor Hugo Espínola Domínguez

unread,
May 2, 2017, 11:59:55 AM5/2/17
to mundovis...@googlegroups.com
'cadena de caracteres', "cadena de caracteres" y [cadena de caracteres] son expresiones válidas.

Saludos,
Víctor.
Lambaré - Paraguay.



---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.


Para acceder a más opciones, visita https://groups.google.com/d/optout.


Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.com
Versión: 2016.0.8013 / Base de datos de virus: 4776/14417 - Fecha de la versión: 01/05/2017

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:

---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

Víctor Hugo Espínola Domínguez

unread,
May 2, 2017, 12:07:05 PM5/2/17
to mundovis...@googlegroups.com
En m.nombre_de_dato m. significa que el dato es una variable de memoria y no un campo de la tabla seleccionada en ese momento.

Lee los artículos del enlace https://comunidadvfp.blogspot.com/search/?q=sqlexec

Saludos,
Víctor.
Lambaré - Paraguay.



---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" 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 mundovisualfoxpro+unsubscribe@googlegroups.com.

mhlezama

unread,
May 2, 2017, 12:32:52 PM5/2/17
to Mundo Visual FoxPro

Oscar, entendí lo que me explicastes y lo puse andar y funciona.  De hecho hice el boton  INGRESAR, MODIFICAR Y BORRAR y todo funciona.
solo que volví hacía atrás porque tengo un problema y es el siguiente

al hacer la conexion hice un CURSOR llamado misdatos, ver abajo:



 
PUBLIC lnHandle as Integer, laError(1)
*-- CONEXION Sin DSN

* WEBSITE
lnHandle = SQLSTRINGCONNECT([Driver=MySQL ODBC 5.3 ANSI Driver;SERVER=xxx.xxx.xxx.xxx;
UID=emp_registro;PWD=miclave;DATABASE=emp_registro;PORT=3306])

IF lnHandle > 0
  
       WAIT WINDOW 'CONECTADO AL SERVIDOR' NOWAIT
  
    * { crea un cursor llamado
        SQLEXEC(lnHandle,"","misdatos")

       
    * { no lo desconecto, lo hago en un boton llamado salir
ELSE
   AERROR(laError)
   MESSAGEBOX('No pudo conectarse: ' + laError(2), 16, 'Aviso')
ENDIF


1. el problema es que estaba usando el LOCATE pero en el cursor y veo que el GRID no se actualiza, ese es uno de los problemas
2. con SQL como se localiza?  es con SELECT *  ?
3. como controlo o como se si el SELECT u otro comando de localizar, encontró la información?



Auto Generated Inline Image 1

mhlezama

unread,
May 2, 2017, 12:53:21 PM5/2/17
to Mundo Visual FoxPro
que bueno saberlo, gracias victor


El martes, 2 de mayo de 2017, 9:59:55 (UTC-6), Víctor Hugo Espínola Domínguez escribió:
'cadena de caracteres', "cadena de caracteres" y [cadena de caracteres] son expresiones válidas.

Saludos,
Víctor.
Lambaré - Paraguay.


El 2 de mayo de 2017, 08:18, Oscar Bonet<dirsi...@cialta.com> escribió:

Respuestas:

 

1= si

2=no necesariamente;  pueden ser los mismos nombres, para eso es la propiedad datasession = 2   Privados, que hacen que no tengan conflictos por los mismos nombres pues cada formulario se abriria en una sesión de datos privada

 

3= en modificar:

         Cada variable ante ponle el signo ?cVariable    (signo interrogación) es como un apuntador a la variable en memoria.

 

La expresión SQL  que se envía la encierro entre comillas, es decir, lo que envías al SQLEXEC() es una expresión de caracteres  (retira llaves cuadradas)

 

Quedaría así:    SQLEXEC(lnhandle, “ UPDATE lideres SET empresa=?vempresa, nombre=?vnombre, correo=?vcorreo, telefono=?vtelefono, cargo=?vcargo, servicio=?vservicio WHERE codigo=?bucacodigo ” )

 

 

 

mhlezama

unread,
May 3, 2017, 12:41:50 PM5/3/17
to Mundo Visual FoxPro
Alguien sabe como resolver esta gran duda que me tengo con LOCATE en MYSQL?
(ver abajo)

Oscar Bonet

unread,
May 3, 2017, 1:23:28 PM5/3/17
to mundovis...@googlegroups.com

Cuando te conectes con SQLEXEC( SELECT * FROM TABLA “,”MiCursor”,,,,      sería así por medio de instrucciones SQL

Pero si deseas hacer consultas al cursor generado, también lo puedes hacer mediante SQL y con el comando nativo locate si lo deseas.

Versión: 2016.0.8013 / Base de datos de virus: 4776/14423 - Fecha de la versión: 02/05/2017

mhlezama

unread,
May 3, 2017, 1:44:32 PM5/3/17
to Mundo Visual FoxPro
Gracias Oscar

el problema que tengo es que despues que borro un registro, y le digo buscar sobre el CURSOR lo encuentra

1. como actualizo el cursor?  debo escribir SELECT en algun otro lado para actualizarlo?

2. Hay alguna manera de saber si el SELECT encontró los datos que busco?  (como IF FOUND() en visual foxrpo?)

Oscar Bonet

unread,
May 3, 2017, 1:59:24 PM5/3/17
to mundovis...@googlegroups.com

Activa

SET DELETE ON  desde el load del formulario.

Este set te sirve para no mostrar los registros marcados como eliminados (en cursores y en tablas nativas). 

No debes preocuparte por el DELETE realizado con SQLEXCE( delete from MiTabla where condicion1=condicion…) porque igualmente te lo elimina de la base de datos y no lo podrás ver más.

Si de actualizar la información en algún grid, debes después de eliminar el ítem o registro, seleccionar el cursor ejecutas esto:

 

select MiCursor

thisform.grid1.refresh

 

Recuerda que grid1 me refiero si así es el nombre del objeto grid que tienes, sino, le pones el nombre que le hallas definido.

Oscar Bonet

unread,
May 3, 2017, 2:03:45 PM5/3/17
to mundovis...@googlegroups.com

Respuesta 2)

Para saber cuántos registros devuelve el resultado de alguna consulta ejemplo en un sqlexec()

Puedes usar esto:

 

Select MiCursor

If reccoun() > 0     && si es mayor que cero es porque trajo algún resultado y n resultados o registros

        

Endif

 

O bien explicado desde la ayuda de foxpro, el comando RECCOUN() es:

Returns the number of records in the current or specified table.o cursor seleccionado

 

RECCOUNT([nWorkArea | cTableAlias])

mhlezama

unread,
May 3, 2017, 5:17:33 PM5/3/17
to Mundo Visual FoxPro

hice los cambios necesarios pero me da un error





cambiaré el buffer del form a OPTIMISTIC


Auto Generated Inline Image 1
Auto Generated Inline Image 2

Oscar Bonet

unread,
May 3, 2017, 5:52:24 PM5/3/17
to mundovis...@googlegroups.com

Por ahí te explicaron que no se deben hacer las dos cosas, es decir, tablas nativas y conexión con sistemas de gestión de bases de datos (SGBD) externos al tiempo.  Solo sería a nivel de uso de los cursores devueltos y tratamiento de solo consultas.

 

Las tablas DBF si manejan el tema de bloqueo nativos y asociados con los objetos de foxpro (formularios); pero si vas a manejar con un SGBD ya es otro cuento.

 

Pienso que debes manejar el tema desde lo básico hasta lo más complejo en la medida avances con el dominio de los temas.

 

Te sugiero domines el tema de acceso de los datos con SQL, (select, insert, update y delete) sin varios usuarios al tiempo.  Ya después busca teorías de manejo de conflictos de varios usuarios actualizando datos al mismo tiempo.  El tema de bloqueo no es fácil de administrar y se debe conocer mucho del negocio o del proceso en cuestión.

mhlezama

unread,
May 3, 2017, 6:02:49 PM5/3/17
to Mundo Visual FoxPro

Lo que me sucedió fue lo siguiente:

1. estoy conectado a un host mysql
2. En el grid utilizo AfterRowColChange, cada vez que me posiciono en un registro el envia las variables para ser editadas en cuadro de texto
    permiti editar desde el grid1 y me dió ese error cuando presionaba el BOTON MODIFICAR. 

    Y es alli cuando me dió el ERROR, creo que es como si hubiese dos usuarios uno editando en el GRID y el otro en los TEXTOS, pero solo hay uno.

3.  En el INIT thisform.conectar(),  y el ACTIVATE thisform.init(),  hay hacer estos dos, noté que cada vez que vuelve el sistema se VUELVE A CONECTAR,
     eso esta bien o se satura la RED.  porque resulta que la desconexión la tengo en el DESTROY. ????

mhlezama

unread,
May 5, 2017, 10:09:10 PM5/5/17
to Mundo Visual FoxPro
Hay momentos que solo consulta el cursor y no actualiza como que se desconecta, que pasa?
Reply all
Reply to author
Forward
0 new messages