Hola Manuel Medina,
AfpSistemas tiene razón, para cadenas largas es mejor utilizar un comando TEXT.... ENDTEXT
Te dejo un ejemplo ( ojala te sirva)
las instrucciones sql ( encapsuladas dentro de una transacción) para que si se produce un error entre medias, no guarde unas cosas si y otras no, en su lugar no guarde nada.
lo ideal es que cuando se produzca un error llames a AERROR() y guardes el mensaje de error, para que al final puedas mostrar el motivo por el que se ha producido el error
para que este ejemplo funcione bien,
cuando creas tu conexión,
debes configurar tu sessión de la siguiente forma para que no se guarden los datos automaticamente, sino que se guarden cuando hagas commit
llResult = SQLEXEC(
coneccion
', "set autocommit=0")
*- al principio del código puedes definir tu variable como local, para que no se pueda ver en otros procesos
LOCAL llResultado,
lcSQLCommand
llResultado = SQLEXEC(coneccion,l
"start transaction") > 0 && "start transaction" se utiliza en MySQL y "begin transaction" se utiliza en SQL Server
*- solo si es .T. se siguen ejecutando las instrucciones
IF llResult AND SQLSETPROP(
coneccion
,'Transactions',2) > 0 && para que no haga un autoUpdate automáticamente , lo ponemos en modo Manual
TEXT TO lcSQLCommand TEXTMERGE NOSHOW PRETEXT 3
INSERT INTO articulos(CODIGO,DESCRIP,PADRE,DEPARTA,codigop,descripp,costo,e1)
VALUES (?thisform.codigo.value,?thisform.descrip.value,?thisform.padre.value,?thisform.departa.value,?thisform.codigop.value,?thisform.descripp.value,?thisform.costo.value,?thisform.e1.value)
ENDTEXT
llResultado = SQLEXEC(coneccion,lcSQLCommand) > 0
ENDIF
IF llResultado
*- Aqui mas instrucciones
ENDIF
*- si todo bien hacemos commit
IF llResultado
wait window "Se ha guardado correctamente" nowait && evito poner este mensaje , solo pongo el mensaje de error si es que se ha producido alguno
llResultado = SQLEXEC(coneccion, "COMMIT") > 0
ENDIF
IF NOT llResultado
=messagebox( "Se ha producido un error " ,48, "Error")
= SQLEXEC(coneccion, "ROLLBACK") > 0
ENDIF
ENDIF
SQLSETPROP(
coneccion
,'Transactions',1) && lo dejamos como estaba antes ( modo automático)