Problemas con SQLEXEC

Estimado Amigo DavSoft gracias a tu ayuda ya hice que Sql server y Vfp puedan comunicar a través de ODBC pero quiero explicarte como lo estoy trabajando y le me digas si esta bien.
1. En Sql Server ya esta exportada mi Base de datos y tablas con su información.
2. En mi Proyecto tengo un programa que es el que arranca todo el sistema allí puse un procedimiento así
Procedure Conx_Sql
STORE SQLCONNECT('COASAD', 'ASIST', SISTEMAS') TO Xpunta
IF Xpunta <= 0
= MESSAGEBOX('NO SE PUEDE HACER LA CONEXIÓN', 16, 'SQL Connect Error')
ELSE
= SQLEXEC(Xpunta,"SELECT * FROM Acc_Ast","Acc_Ast")
= SQLEXEC(Xpunta,"SELECT * FROM Asistencia_Doc","Asistencia_Doc")
= SQLEXEC(Xpunta,"SELECT * FROM Carga_Hor","Carga_Hor")
= SQLEXEC(Xpunta,"SELECT * FROM Datos_Doc","Datos_Doc")
= SQLEXEC(Xpunta,"SELECT * FROM Datos_Cur","Datos_Cur")
= SQLEXEC(Xpunta,"SELECT * FROM Tmp_Ast","Tmp_Ast")
ENDIF
3. Cuando ejecuto el programa corre el bien la pantalla de acceso al sistema y se que esta jalando los datos del servidor correctamente por que lo he comprobado, pero tengo tengo en todos mis pantallas (8) cargado aun el entorno de trabajo o Data Enviromen de mis tablas y no se si sacarlos o no como consultar.
4. Hasta allí pesaba que todo esta casi bien pero empecé a probar con la pantalla Carga Horaria y cuando quiero añadir o actualizar algún dato allí es mi problema no me graba nada o no se donde colocar bien este procedimiento (lo puse en el botón Grabar de mi pantalla).
= SQLEXEC(Xpunta,'INSERT INTO CARGA_HOR FROM MEMVAR','CARGA_HOR')
Y de allí no se que hacer por favor amigo ayuda dime que hacer
Respuesta
1

Que tal te dejo el ejemplo de como lo hago y me da cero problemas anda perfecto

En prg llamado procedimientos hago esto:

public CN

FUNCTION _conectando

CN=SQLSTRINGCONNECT("Driver={MySQL ODBC 5.3 unicode Driver};SERVER=localhost;UID=root;DATABASE=bdatos;PORT=3306")
RETURN CN
ENDFUNC

** despues ponele en otro prg llamado consultas esto:

SET PROCEDURE TO procedimientos.prg
_conector=_conectando()
cmd= SQLEXEC(_conector, "select * from usuario","cur_usuario")
IF cmd>0
BROWSE
ENDIF

**ojala te sirva

1 respuesta más de otro experto

Respuesta
1
Creo que la opción FROM MENVAR en sqlserver no esta disponible, PERO NO ESTOY SEGURO ya que no utilizo este motor, pero debes recordar que lo que envíes al motor debes enviarlo a su idioma y no la de fox, por ejemplo para insertar registros en una tabla de sqlserver desde fox debería ser así:
=sqlexec(xApunta,"INSERT INTO clientes (CODIGO,NOMBRE) VALUES ('"+ valor1 +"','"+ valor2 +"')" )
Y listo, esa es un ejemplo de sintaxis en una tabla llamadac clientes con dos campos.
Creo que el error esta en tu FRO MENVAR, si sacaste eso de la documentación de sqlserver me callo, pero no se si eso funciona ahí, te daré un truco que utilizo para saber que error me responde el motor SQL así sabemos cual es el problema y es así
if sqlexec(xApunta,"comando aqui")>0
   wait wind 'ok, grabado '
else
       a=aerror(matriz)
       Messagebox(matriz(2), 55,'Error')
Endif
Con esto sabrás que te dice el motor.
Voy a probar tus procedimientos y te vuelvo a molestar pero dime con respeto a:
Que en todos mis pantallas (8) están cargados aun el entorno de trabajo de Visual foxpro o Data Enviromen de mis tablas y no se si sacarlos o no o como consulto los datos y dime en donde aplico las consultas, borrar, insertar, etc con SQLEXEC en que momento o en que parte de mis formualarios oriéntame por favor por que este es mi 1er programa utilizando Cliente-Servidor y me estoy hacien nudos y me están presionando con este proyecto. Por favor
El entorno de datos de tu form hay que dejarlo al olvido, ya no son necesarios, ahora tus tablas ya no son DBF sino en SQL SERVER, entonces el tema es lo siguiente. Debes inmaginarte que sigues trabajando con dbf a partir de la siguiente linea de sqlexec, por ej.
=sqlexec(xApunta,"select * from clientes","misClientes")
Se le misClientes
Go top
do while !eof()
    xCodigo = codigo
    xNombre = nombre
    Se le misClientes
    Skip
Enddo
Fíjate que el sqlexec() creo un cursor temporal de memoria de lectura escritura llamada en este caso misClientes, entonces a partir de ahí ya es puro fox, siempre el sqlexec() las consultas te arrojaran algún resultado en algún cursor que vos le indiques, si no le indicas el nombre del cursor se llamara sqlresult por defecto, pero las cosas que cambies en este cursor no se guardaran en la base de datos, o sea si haces cambios con ella es solo temporal, para guardar los datos usaras sqlexec(xAPUNTA,"update table ...")
Es simple, pero es un nuevo concepto, por ejemplo en un textbox que se ingresa un código de cliente y debes buscarlo, si encuentra pasa sino avisa seria algo así.
En el evento valid() del textbox por ejemplo así.
if sqlexec(xControl,"select * from clientes where codigo = "+this.value)>0
      if reccount('sqlresult')=0
              wait wind 'El codigo ingresado no es valido '
                return(0)
      else
             return(1)
     endif
else
            Wait wind 'error al consultar la base de datos'
Endif
Esa es la idea amigo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas