Visual Foxpro 9 y SQL server

Estoy trabajando en un proyecto y necesito insertar registros de fox en una base de datos sql ya tengo creada a conexión
y todo funciona bien solo que cuando intento guardar desde una ventana
con muchos datos excedo el limite de caracteres permitidos y la consulta
se me cae, lo que hice fue concatenar los campos en un editbox para poder armarla por ejemplo
por='"'
y="'"
thisform.edit1.value = thisform.edit1.value + " SQLEXEC (Nhandle," + por + "INSERT INTO CLT_CLIENTES(CLT_ID_CLIENTE,CLT_NOMBRE,CLT_DIRECCION,CLT_CIUDAD,CLT_PAIS,CLT_TELEFONO,CLT_FECHA_INGRESO,CLT_NOTAS,CLT_CODIGO,CLT_FECHA_NACE) "
thisform.edit1.value = thisform.edit1.value + " VALUES("
thisform.edit1.value = thisform.edit1.value + y + ALLTRIM(STR(RECNO())) + y +","+ y + ALLTRIM(TMPimporcli.NOMBRE)+ y +","+ y + ALLTRIM(TMPimporcli.DIRECCIÓN)+ y +","+ y + ALLTRIM(vclt_ciudad)+ y +","+ y + ALLTRIM(vclt_PAIS)+ y +","+ y + ALLTRIM(vclt_TELEFONO)+ y +","+ y + DTOC(vclt_fecha_ingreso) + y +","+ y + ALLTRIM(vclt_notas) + y +","+ y + ALLTRIM(vclt_CODIGO) + y +","+ y + ALLTRIM(TMPimporcli.FECHANACE)+y
thisform.edit1.value = thisform.edit1.value + ")"
thisform.edit1.value = thisform.edit1.value + x
thisform.edit1.value = thisform.edit1.value + ")"
Yo logro ver en el editbox la consulta completa pero no la puede ejecutar. ¿Algún idea?

2 Respuestas

Respuesta
1

Disculpa la tardanza en contestar. :( Estuve fuera de la ciudad! :( Si es muy larga la cadena, trata de utilizar signos de "+" para "amarrar" varias lineas menores de cadenas ya así formar una sola por cada proceso. La cadena del INSERT separala en 2 o 3 con signos "+". Proba y me avisas! :)

Respuesta
1

Normalmente tengo algún lio con el limite de caracteres pero lo soluciono de las siguientes 2 maneras:

1. Defino una variable cualquiera para mi siempre es cSql y en esa variable lo que hago es escribir mi sql de la siguiente manera

cSql="INSERT INT "+; "CLT_CLIENTES(CLT_ID_CLIENTE,CLT_NOMBRE,CLT_DIRECCION,CLT_CIUDAD,CLT_PAIS"+; ",CLT_TELEFONO,CLT_FECHA_INGRESO,CLT_NOTAS,CLT_CODIGO,CLT_FECHA_NACE.............continua la inserción sql.......)"

Luego solo hago el sqlexec R=sqlexec(Nhandle, cSql) y listo nótese que cada vez que se acaba un tramo de cadena (osea desde " hasta ") añado (+;) con eso lo que le estoy diciendo a fox es que la cadena string no a terminado.

2. Genero variables para cada valor que debo insertar en el insert

var=thisform.text1.value

var1=thisform.text2.value

var2=thisform.text3.value

var3=thisform.text4.value

cSql="INSERT INTO CLT_CLIENTES( CAMPO1, CAMPO2, CAMPO3, CAMPO4) VALUES ("+;

"(?VAR,?VAR1,?VAR2,?VAR3)"

R=sqlexec(Nhandle,cSql)

¿Nótese qué coloco un? Antes de cada variable, esto es con el fin de que fox en la cadena string me ponga el valor que está dentro de la variable, también funcionar colocando

cSql="INSERT INTO CLT_CLIENTES( CAMPO1, CAMPO2, CAMPO3, CAMPO4) VALUES ("+;
"(?Thisform.text1.value,?thisform.text2.value,?thisform.text3.value,?thisform.text4.value)"
R=sqlexec(Nhandle,cSql)

Al final lo que puede estar pasándote es que tienes una linea de código que está demasiado larga para eso puedes partirla con el (+;) y ajustar esa misma linea

No se si fui claro pero si necesitas algo mas solo escribeme

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas