Problemas al grabar con SqlExec

Estimado amigo de nuevo molestandote pero me he vuelto a estancar en estes problema y te pido por favor q me vuelvas a ayudar. Al comenzar mi aplciacion yo he declarado asi
STORE SQLCONNECT('COASAD', 'ADM', 'SISTEMS') 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","Asi_Doc")
ENDIF
En mi Formulario de acceso al sistema (aquí guardo datos cuando un usuario accede al sistema) en el botón grabar he colocado lo siguiente:
Select Asi_Doc          ** Curso temporal creado
Append Blank
Repla Asi_Doc.Gen_Doc With Thisform.Gen_Doc.Value
Repla Asi_Doc.Cod_Doc With V_usuario
Repla Asi_Doc.Dat_Doc With v_datos
Repla Asi_Doc.Fec_Ing With Xdate
Repla Asi_Doc.Hor_Ing With Thisform.Hor_Ing.Value
Select Asi_Doc      ** Aqui verifico si graba los datos digitados y lo esta haciendo
Brow
=SQLEXEC(Xpunta,"INSERT INTO Asistencia_Doc(Gen_Doc, Cod_Doc, Dat_Doc, Fec_Ing, Hor_Ing");
Values("Asi_Doc.Gen_Doc, Asi_Doc.Cod_Doc, Asi_Doc.Dat_Doc, Asi_Doc.Fec_Ing, Asi_Doc.Hor_Ing")
Aquí viene el problema por que cuando entro al SQL Server 2000 (Administrador Corporativo) y busco mi Base de datos y la tabla Asistencia_Doc no esta grabando nada dime amigo que es lo que estoy haciendo mal o es que tengo que esperar cierto tiempo después de cerra mi aplicación para poder ver los resultados o no se amigo por favor ayudame.

1 Respuesta

Respuesta
1
Debes hacer un tratamiento de errores para que sepas que esta pasando, primero debes saber si tu insert esta ejecutándose, por ejemplo
if sqlexec(xApunta,"insert into ... ")>0
else
          *- Aquí entra por algún error, entonces veremos de que se esta quejando sql server para saberlo hacemos lo siguiente.
             a=aerror(mat)
            Messagebox(mat(2), 55,'Error al Grabar')
Endif
Con esto obtendrás un mensaje de error retornado por sql server, así cuando te conectaste verificaste que te devuelva un valor positivo aquí también debes hacerlo, ahora bien espero que con esto puedas saber cual es el problema.
Coloque este código:
If Sqlexec(Xpunta,"INSERT INTO Asi_Doc(Gen_Doc")>0
else
  a=aerror(mat)
  messagebox(mat(2),55,'Error al Grabar')
endif
Cuando lo ejecuto me sale este mensaje y créeme que no entiendo
Error de Conectividad: [Microsoft] [ODBC SQL Server Driver] [SQL Server] Linea 1: Sintaxis incorrecta cerca de 'Gen_Doc'
Perfecto, es lo que esperabamos, tienes un error de sintaxis, recuerda que la sintaxis correcta deberia ser asi
insert into asi_doc(gen_cod,cod_doc)  values ('Hola',150)
Esto se supone que hola y 150 están en alguna variable, entonces deberías concatenar los datos antes de enviar, recuerda que mysql no sabe que es o quien es asi_doc. Gen_doc, recuerda que eso es una variable de fox, mysql solo quiere los datos finales, así como te escribí en la linea anterior, por de pronto debes concatenar los valores tal que quede igual a lo que escribí, utiliza str() para valores numéricos, por ejemplo si tienes una variable que contiene un valor numérico 150 y quieres enviar a mysql lo debes enviar como si fuera una palabra, por lo tango supongamos que tebganis dos variables.
xGen_cod='hola'
xCod_doc = 150
entonces seria asi
=sqlexec(xApunta,"insert into asi_doc(gen_cod,cod_doc) values ("+xGen_cod+", "+str(xCod_doc)+")" )
y listo, generalmente las instrucciones los guardo dentro de una variable y luego lo envio, es la unica forma de controlar lo que envio, si cometo algun error es muy facil de corregir, asi
xSql ="insert into asi_doc(gen_cod,cod_doc) values ("+xGen_cod+", "+str(xCod_doc)+")"
if sqlexec(xApunta,xSql)>0
else
      messagebox(xSql,55,"Error en este comando")
Endif
Con esto empezarás a depurar tu programa de apoco, siempre debes cargar todo en una variable y luego lo envías, es mejor
un saludo
Estimado amigo ya aplicaque lo que indicaste en tu ejemplo y lo he declarado así:
En la pantalla de arranque he declarado xpunta yXsql como Public pero no le puesto ningún valor. Luego en la pantalla de verificación de acceso puse esto
Xsql ="Insert Into Asistencia_Doc(Gen_Cod, Cod_Doc, Dat_Doc, Fec_Ing, Hor_Ing);
Values ("+Thisform.Gen_Doc.Value+", "+V_usuario+", "+V_datos+", "+Xdate+", "+Thisform.Hor_Ing.Value+")"
If SqlExec(Xpunta,xSql)>0
Else
Messagebox(xSql, 55,"Error en este comando")
Endif
Pero me sale este nuevo mensaje de error:
Insert Into Asistencia_Doc(Gen_Cod,Cod_Doc,Dat_Doc,fec_Ing,Hor_Ing) Values (Acc-Oct2008-001,JLINARES, JESUS LINARES ZARATE, 15/10/2008, 17:00:58). y la verdad no se ahora q estoy haciendo mal por favor te pido me tengas paciencia y me ayudes
No pude leer tu mensaje de error, pero creo que el problema esta con los datos caracteres y fecha, debes enviarlo con comillas simples o dobles según el caso, así
"values ('"+xDato+" ', ' "+dtoc(laFecha)+"', ") y asi sucesivamente, asi al mysql le llega con comillas los datos de fecha y los demas tambien, prueba nuevamente con el aerror()
A ver que exactamente no le gusta a tu motor.
Estimado amigo sabes ya me encuentro muy apenado por que te sigo molestando como mi problema sabes ya aplique lo que me dijiste de la siguiente manera:
Xsql ="Insert Into Asistencia_Doc(Gen_Cod, Cod_Doc, Dat_Doc, Fec_Ing, Hor_Ing);
Values (' "+Thisform.Gen_Doc.Value+" ', ' "+V_usuario+" ', ' "+V_datos+" ', ' "+Xdate+" ', ' "+Thisform.Hor_Ing.Value+" ')"
If SqlExec(Xpunta,xSql)>0
Else
Messagebox(xSql, 55,"Error en este comando")
Endif
Me sale el ERROR EN ESTE COMANDO:
Insert Into Asistencia_Doc(Gen_Cod,Cod_Doc,Dat_Doc,fec_Ing,Hor_Ing) Values (Acc-Oct2008-001,JLINARES, JESUS LINARES ZARATE, 15/10/2008, 17:00:58).
Dime sera por que estoy trabajando con SQL 2000 SERVER Y NO CON MYSQL o los comandos son iguales. La verdad ya no se que hacer espero tu apoyo amigo Experto
No trabajo con sql server, pero no debe variar mucho, ahora bien, agrega las lineas que te recomendé y envía el mensaje que retorna el motor
a=aerror(mat)
Messagebox(mat(2))
En vez del otro, ya sabemos el comando que enviaste, ahora necestamos saber que error te retorno el SQL SERVER.
Ahí estará más claro, por que no vi los apostrofes (') en tu comando luego del error.
Estimado amigo ahora coloque este código como te entendí
Xsql ="Insert Into Asistencia_Doc(Gen_Cod, Cod_Doc, Dat_Doc, Fec_Ing, Hor_Ing);
Values (' "+Thisform.Gen_Doc.Value+" ', ' "+V_usuario+" ', ' "+V_datos+" ', ' "+Xdate+" ', ' "+Thisform.Hor_Ing.Value+" ')"
if sqlexec(xpunta,Xsql)>0
Else
a=aerror(mat)
messagebox(mat(2), 55,'Error al Grabar')
Endif
Ahora me sale este Error de Conectividad: [Microsoft] [ODBC SQL Server Driver ] [SQL Server ] El nombre de Columna 'Gen_Cod' no es valida
Este error dice que no existe tal campo, ¿es así realmente?
Si tenias razón disculpame estaba mal escrito pero cuando lo correji ahora me sales este error: Conectividad: [Microsoft] [ODBC SQL Server Driver ] [SQL Server ] no se puede insertar el valor NULL en la Columna 'Ord_Nro' Tabla 'COASAD.dbo.asistencia.doc'. La columna no admite valores NULL. Insert falla.
Dime necesariamente se tienen que llenar los otros campos o no por lo que me sale este error no entiendo. Ayuda por favor.
Te contesto con lo que se de mysql, ese campo cuando lo definiste le dijiste que permita valores null o no, en este caso no, pero como no le enviaste nada el intento almacenar valor null, no se si sql server tiene valores autoincrementados, si no lo tiene debes calcular el valor siguiente y lo insertas, por que tengo entendido que ese campo es una llave primaria, creo que debes volver a la mesa de dibujo, o sea, al diseño de tu base de datos y verifica la estructura de esa tabla, por ahí esta la solución.
Estimado amigo si tenias razón en Sql 2000 Server mi Tabla no esta activo que admite Valores nulo los active y POR FIN GRABA LA INFORMACIÓN QUE ESTA DIGITANDO al SQL SERVER. Deberás muchísimas gracias y mil disculpa por haber molestado a cada rato y por varios días

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas