VFP MySql UPDATE

Vi la ayuda que brindaste a un amigo donde colocas un código para insert, asumí que podía ser lo mismo para Update sin embargo al momento de realizar la actualización a uno de mis datos no graba nada, no entiendo cuál puede ser el motivo, este es mi código
 xSql = "UPDATE PERSONAL SET"
 xSql = xSql + "cod_hora="+str(personal2.cod_hora)+","
 xSql = xSql + "fech_naci="+DTOC(Thisform.Olecontrol1.Object.value)+","
 xSql = xSql + "ci="+(personal2.ci)+","
 xSql = xSql + "pasw="+(personal2.pasw)+","
 xSql = xSql + "APP1="+ALLTRIM(personal2.app1)+","
 xSql = xSql + "APM="+ALLTRIM(personal2.apm)+","
 xSql = xSql + "nombre1="+ALLTRIM(personal2.nombre1)+","
 xSql = xSql + "Nombre2="+ALLTRIM(Personal2.Nombre2)+","
 xSql = xSql + "Pasw="+ALLTRIM(Personal2.pasw)+","
 xSql = xSql + "Salario="+str(Personal2.Salario)+","
 xSql = xSql + "Direccion="+(personal2.direccion)
=SQLEXEC(lnHandle,xSql)
Espero me puedas ayudar lo más antes posible y claro agradecido de antemano.

1 respuesta

Respuesta
1
La información que me brinda no es suficiente, sin embargo si te puedo decir que:
1. Pasw la estas grabando "dos veces"
2. Estas regrabando toda la base de datos pues no estas usando la clausula WHERE
3. Necesito saber los tipos de datos, para saber si esta bien organizada la instrucción
4. En el caso de los campos carácter, debes encerrarlos ente comillas sencilla pues si los dejas sin ellas al visualizar el comando notaras que lo esta trabajando como una variable, usa antes del "=sqkexec" la siguiente instrucción, wait window xSql, así puedes mirar la instrucción y notar posibles errores.
Prueba y me dices.
Bueno al parecer la consulta esta buena, pero nada no graba te envío el tipo de campo de mi tabla.
cod_hora                 Entero 5
Fecha_naci               fecha
ci varchar
pasw varchar
app1                          varchar                    
app2                        varchar
nombre1                  varchar
nombre2                    varchar
salario                         desimal (esta no se si esta bien utilizado pues un sueldo puede ser 3,000.50 o 3,000.00)
direccion                     varchar
cuando utilizo por ejemplo graba sin problemas
*=SQLEXEC (lnHandle, "UPDATE personal SET SW=?THISFORM.TEXT14.VALUE")
Gracias de antemano, y muchas gracias por responder
Por que lo que veo a los ampos carácter les falta las comillas, resulta que usas por ejemplo
asumamos que personal2. Ci tenga "ENRIQUE"
"ci="+(personal2.ci)+"," lo qyue se conivierte en xSql en: ci=ENRIQUE, lo que es un error pues ENRIQUE debe ser un string no una variable entonces habría que usar "ci='"+(personal2.ci)+"'," con lo que se obtendría ci='ENRIQUE' lo ue si es un cimando de asignación, otra pregunta, sobre que base de datos estas trabajando pues la instrucción debe ir en el formato de la base de datos no de Visualfoxpro.
Por favor que obtuviste con el mensaje WAIT WINDOW xSql, por favor enviame esa linea que muetsra en pantalla, y de todas formas prueba esto:
xSql = "UPDATE PERSONAL SET"
xSql = xSql + "ci='PRUEBA'"
=SQLEXEC(lnHandle,xSql)
Si funciona, prueba con
xSql = "UPDATE PERSONAL SET"
xSql = xSql + "ci="+(personal2.ci)+","
=SQLEXEC(lnHandle,xSql)
si no funciona prueba
xSql = "UPDATE PERSONAL SET"
xSql = xSql + "ci='"+(personal2.ci)+"',"
=SQLEXEC(lnHandle,xSql)
Y así vas agragándole instrucciones hasta llegar al que tiene el problema,
Perdona esta respuesta pero hay que hacerlo ensayo y error.
Primero muchas gracia por la ayuda y por dedicarme tu tiempo
No me funciona ninguno de lo que me pediste probar pero cuando utilizo el WAIT WINDOWS xsQL me sale que la cadena es muy larga sin embargo saque de otra forma y el resultado es el siguiente.
UPDATE PERSONAL SETcod_hora=     88785,fech_naci=10/07/29,ci=12376534  ,pasw=QRON2009   ,APP1=LARREA,APM=NINA,nombre1=SANDRO,Nombre2=DREIX,Salario=      8000,Direccion=soria Galvarro Lira y oblitas Nro 340, telf. 5240237- cel 71887333                    
El ci original es 123765 pero no graba nada.
Es la primera vez que trabajado con Mysql+VFP 9 por eso que no puedo, si tengo mucha experiencia en fox y tablas nativas.
Gracias de antemano
UPDATE PERSONAL SETcod_hora=     88785,fech_naci=10/07/29,ci=12376534  ,pasw=QRON2009   ,APP1=LARREA,APM=NINA,nombre1=SANDRO,Nombre2=DREIX,Salario=      8000,Direccion=soria Galvarro Lira y oblitas Nro 340, telf. 5240237- cel 71887333
Analiza lo siguiente,
SETcod_hora esta unido debes separarlo
cod_hora= 88785 verifica si esto es correcto
fech_naci=10/07/29 esto no creo que pase pero como te dije antes el formato no debe ser visual foxpro sino el de la base de datos que usas
ci=12376534 tengo entendido que ci es carácter no numérico debería ser ci='12376534' o ci=[12376534] o en el formato de la base de datos
pasw=QRON2009 iguakl que la anterior para el sistema QRON2009 esto es una variable que no ncuentra, etc
Corrige estas cositas desde donde armas xSql y sigue analizando en cada cambio el WAIT WINDOW sQl, que le le va mostrando que va armando.
Avisame cualquier cosita.
Funciono al fin gracias, en uno de los ejemplos que me enviaste tenia una comita demás
xSql = "UPDATE PERSONAL SET"
xSql = xSql + "ci='"+(personal2.ci)+"',"
por eso no me funciono lo borre y zas aleluya, ahora mi problema es con mi fecha es lo unico que no se como hacer que modifique, utilizo un Olecontrol1 para colocar fechas como debo proceder con ese tipo de datos..?
Gracias
Disculpa otra pregunta y com outilizo el Where pues me sera mecesario utilizar esto, cuando ya tenga registrado varios funcionarios
Gracias
Ok, resulta que cuando vas a actualizar la base de datos, muy de vez en cuando lo vas a hacer sobe todos los registro de la tabla y eso en casos super especiales y no sobre todos los campos, sino por el contrario vas a actualizar un registro único, entonces debes decirle al sistema cual, eso se hace mediente la clausula WHERE, podria ser así
update personal set asd=234 where codigo = 123
entonces actualice cuando codigo sea igual a 123, obviamente este where va con la misma estructura del sql de la base de datos
xSql = xSql + "Direccion="+(personal2.direccion)
xSql = xSql + " Where campocodigo = ' "+(personal2.Codigo+" ' "
Por ejemplo.
De todas formas lo difícil ya pasó, eso ya es mamey para usted.
Éxitos
No olvides finalizar la pregunta si lo consideras necesario
dOS PREGUNTAS :
1ro como modifico la fecha utilizo un Olecontrol para asignar la fecha
2do no funciona cuando le agrego la linea de where te envio las ultimas dos lineas
xSql = xSql + "direccion='"+(personal2.Direccion)+"',"
xSql = xSql + " Where CI='"+(personal2.CI)+"'"
Aumento esa linea y no pasa nada.
Gracias nuevamente
quitale la coma(,) a xSql = xSql + "direccion='"+(personal2.Direccion)+"'," como ya no hay mas asignaciones no debes usar coma,
xSql = xSql + " Where CI='"+(personal2.CI)+"'" en mi concepto esta bien, pero la verdad mira los comandos de la base de datos que usas para almacenar la información.
Prueba o de la coma.
Éxitos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas