Insert en SQL desde VFP9

Hola unysoft, si me ayudas con esto:
Estoy insertando registros en una tabla de una base de datos SQL desde vfp9, esta es parte de mi programa:
_sql="INSERT INTO PPTOSLD (EJ,CCOSTO,CTA,P_MOF_1,,AREA,COD_LOCAL,STAT) VALUES('"+pptosld.ej+"','"+pptosld.ccosto+"','"+pptosld.cta+"',ALLTRIM(STR(pptosld.p_mof_1,14,2))'"+pptosld.AREA+"','0','A')"
=sqlexec(_bd_dataw,_sql,"PPTOSLD_N")
Esto inserta bien los nuevos registros, pero cuando inserto un registro que ya existe según los indices (ej+ccosto+cta+área) como es correcto no lo graba, pero lo que necesito es saber si la instrucción me avisa de esta duplicidad, por que el programa no me avisa.
Espero tus comentarios

2 Respuestas

Respuesta
1
Tienes toda la razón de preocuparte por este tema:
Cuando el programa está compilado en el ejecutable y tratas de insertar un registro con campo clave duplicado te sale un error de "duplicate key", pero no tienes otra opción más que cancelar la ejecución. Algo muy poco profesional.
Para este caso puedes hacer dos cosas:
1) Si tienes una rutina onerror puedes programar allí lo que debe hacerse cuando se produce este caso.
2) Antes de grabar un registro verificar que el campo clave no se encuentre duplicado. Para ello utiliza el comando:
Local lVariable
lVariable="calor clave de registro"
IF !SEEK(lVariable, "mitabla", "etiqindiceprincipal")
insert into ...
else
Messagebox("Este registro ya existe")
Endif
RELEASE lVariable
En mi caso personal siempre he optado por esta segunda opción ya que me permite controlar el error antes de que se produzca.
Suerte.
De nuevo David:
Perdón, en el caso de sql no hay ningún mensaje de error, sólo no graba el registro, tal como te sucede. No me había dado cuenta de que estabas trabajando sobre sql.
Con mayor razón vas a tener que cerciorarte de que el registro no exista antes de intentar grabarlo.
Local lVariable
lVariable="valor clave de registro"
IF !SEEK(lVariable, "micursor", "etiqindiceprincipal")
insert into ...
else
Messagebox("Este registro ya existe")
Endif
RELEASE lVariable
Perdón por el desliz.
Respuesta
1
Pues, el sqlexec() te devuelve un numero, el cual si registro es mayor a 0 y sino es -1
Entonces lo que puedes hacer eso lo siguiente
if sqlexec(_bd_dataw,_sql) > 0
messagebox('guardo')
else
Messagebox('dato ya registrado')
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas