Error de Conectividad sql2000 server

Estimado amigo disculpa que te vuelva a molestar pero tengo este problema y espero que me ayudes. Sabes cuando intento grabar datos al servidor desde vfp me sale este mensajer: "ERROR DE CONECTIVIDAD: [MICROSOFT]...[SQL SERVER] Comilla no cerrada antes de la cadena de caracteres 'PAPEL CARBON NEGRO PARA MAQUINA/MANUAL/T/A4.....'.
Mi programación es este:
Select Tmp_Stk
Go top
Do While !Eof()
  Xcnx2="Insert Into Ord_Alm(Gen_Ord, Sit_Ord, Tip_Ord, Est_Ord, Fec_Ord, Nom_Prv, Dep_Ord, Ref_Ord, For_Ord, Ent_Ord, Gar_Ord,;
  Fte_Ord, Cod_Prd, Par_Prd, Cpt_Prd, Can_Prd, Umd_Prd, Pun_Prd, Imp_Prd, Sub_Prd, Igv_Prd, Tot_Prd, Mar_Prd, Ser_Prd);
  Values ('"+Allt(Tmp_Stk.Gen_Ing)+"','"+Allt(Tmp_Stk.Sit_Ord)+"','"+Allt(Tmp_Stk.Tip_Ing)+"','"+Allt(Tmp_Stk.Est_Ord)+"','"+Allt(Tmp_Stk.Fec_Ing)+"',;
  '"+Allt(Tmp_Stk.Nom_Prv)+"','"+Allt(Tmp_Stk.Sol_Ing)+"','"+Allt(Tmp_Stk.Ref_Ing)+"','"+Allt(Tmp_Stk.For_Ing)+"','"+Allt(Tmp_Stk.Ent_Ing)+"',;
  '"+Allt(Tmp_Stk.Gar_Ing)+"','"+Allt(Tmp_Stk.Fte_Ing)+"','"+Allt(Tmp_Stk.Cod_Prd)+"','"+Allt(Tmp_Stk.Par_Prd)+"','"+Allt(Tmp_Stk.Cpt_Prd)+"',;
  '"+Tmp_Stk.Can_Ing+"','"+Allt(Tmp_Stk.Umd_Prd)+"','"+Tmp_Stk.Pun_Prd+"','"+Tmp_Stk.Imp_Prd+"','"+Tmp_Stk.Sub_Ing+"','"+Tmp_Stk.Igv_Ing+"',;
  '"+Tmp_Stk.Tot_Ing+"','"+Allt(Tmp_Stk.Mar_Prd)+"','"+Allt(Tmp_Stk.Ser_Prd)+"')"
  If Sqlexec(CnxStk,Xcnx2)>0
  Else
    a=Aerror(Mat)
    Messagebox(Mat(2), 55,'Error al Grabar')
  Endif
  Sele Tmp_Stk
  Skip
EndDo
**************************************
Pero cuando borro el campo Cpt_Prd (q es el q registra el detalle del producto) allí si graba
Este campo lo tengo declarado en la tabla de mi sql como Char 254
Amigo ya no se que hacer

2 Respuestas

Respuesta
1
Si me mandas la cadena de caracteres que se carga en la variable Xcnx2, sera para mí más fácil ayudarte.
Con toda certeza es un problema al concatenar los valores, puede ser muy factible que alguno de los campos que intentas insertar tenga una comilla simple entre palabras o, una coma, eso hace que la query tenga un campo más para intentar insertar prueba evaluar cada variable antes de colocarla en la consulta y quitarle las comillas y las comas..
Por lo que te entiendo La cadena de caracteres que se carga en Xcnx2 es el procedimiento que ya te envíe:
*** estos son los campos q estan en el servidor
Xcnx2="Insert Into Ord_Alm(Gen_Ord, Sit_Ord, Tip_Ord, Est_Ord, Fec_Ord, Nom_Prv, Dep_Ord, Ref_Ord, For_Ord, Ent_Ord, Gar_Ord,;
  Fte_Ord, Cod_Prd, Par_Prd, Cpt_Prd, Can_Prd, Umd_Prd, Pun_Prd, Imp_Prd, Sub_Prd, Igv_Prd, Tot_Prd, Mar_Prd, Ser_Prd);
*** y aqui son los campos de la tabla temporal q se va a enviar al servidor
  Values ('"+Allt(Tmp_Stk.Gen_Ing)+"','"+Allt(Tmp_Stk.Sit_Ord)+"','"+Allt(Tmp_Stk.Tip_Ing)+"','"+Allt(Tmp_Stk.Est_Ord)+"','"+Allt(Tmp_Stk.Fec_Ing)+"',;
  '"+Allt(Tmp_Stk.Nom_Prv)+"','"+Allt(Tmp_Stk.Sol_Ing)+"','"+Allt(Tmp_Stk.Ref_Ing)+"','"+Allt(Tmp_Stk.For_Ing)+"','"+Allt(Tmp_Stk.Ent_Ing)+"',;
  '"+Allt(Tmp_Stk.Gar_Ing)+"','"+Allt(Tmp_Stk.Fte_Ing)+"','"+Allt(Tmp_Stk.Cod_Prd)+"','"+Allt(Tmp_Stk.Par_Prd)+"','"+Allt(Tmp_Stk.Cpt_Prd)+"',;
  '"+Tmp_Stk.Can_Ing+"','"+Allt(Tmp_Stk.Umd_Prd)+"','"+Tmp_Stk.Pun_Prd+"','"+Tmp_Stk.Imp_Prd+"','"+Tmp_Stk.Sub_Ing+"','"+Tmp_Stk.Igv_Ing+"',;
  '"+Tmp_Stk.Tot_Ing+"','"+Allt(Tmp_Stk.Mar_Prd)+"','"+Allt(Tmp_Stk.Ser_Prd)+"')"
Y en mi pantalla de arranque lo tengo declarado como Public to Xcnx2 y inicializando así:
Xcnx2=""
Bueno creo que esto me pides
Ayuda por fa
Lo que te pedí es el valor que tiene la variable Xcn2="" en el momento de ejecutar la query,
despues que le asignas todos los valores('"+Allt(Tmp_Stk.Gen_Ing)+"','"+Allt(Tmp_Stk.Sit_Ord)+"','"+Allt(Tmp_Stk.Tip_Ing)+"','"+Allt(Tmp_Stk.Est_Ord)+"','"+Allt(Tmp_Stk.Fec_Ing)+"',;
  '"+Allt(Tmp_Stk.Nom_Prv)+"','"+Allt(Tmp_Stk.Sol_Ing)+"','"+Allt(Tmp_Stk.Ref_Ing)+"','"+Allt(Tmp_Stk.For_Ing)+"','"+Allt(Tmp_Stk.Ent_Ing)+"',;
  '"+Allt(Tmp_Stk.Gar_Ing)+"','"+Allt(Tmp_Stk.Fte_Ing)+"','"+Allt(Tmp_Stk.Cod_Prd)+"','"+Allt(Tmp_Stk.Par_Prd)+"','"+Allt(Tmp_Stk.Cpt_Prd)+"',;
  '"+Tmp_Stk.Can_Ing+"','"+Allt(Tmp_Stk.Umd_Prd)+"','"+Tmp_Stk.Pun_Prd+"','"+Tmp_Stk.Imp_Prd+"','"+Tmp_Stk.Sub_Ing+"','"+Tmp_Stk.Igv_Ing+"',;
  '"+Tmp_Stk.Tot_Ing+"','"+Allt(Tmp_Stk.Mar_Prd)+"','"+Allt(Tmp_Stk.Ser_Prd)+"')"
queda todo dentro de esta variable. Osea cuando llegas a esta linea
If Sqlexec(CnxStk,Xcnx2)>0 me gustaría ver lo que tienes despues de concatenar todas las variables.
¿Vale?..
Esto es todo el código que utilizo con el cual intento enviar data al Servidor:
Select Tmp_Stk
Go top
Do While !Eof()
    Xcnx2="Insert Into Ord_Alm(Gen_Ord, Sit_Ord, Tip_Ord, Est_Ord, Fec_Ord, Nom_Prv,  Dep_Ord, Ref_Ord, For_Ord, Ent_Ord, Gar_Ord,;
  Fte_Ord, Cod_Prd, Par_Prd, Cpt_Prd, Can_Prd, Umd_Prd, Pun_Prd, Imp_Prd, Sub_Prd, Igv_Prd, Tot_Prd, Mar_Prd, Ser_Prd);
  Values ('"+Allt(Tmp_Stk.Gen_Ing)+"','"+Allt(Tmp_Stk.Sit_Ord)+"','"+Allt(Tmp_Stk.Tip_Ing)+"','"+Allt(Tmp_Stk.Est_Ord)+"','"+Allt(Tmp_Stk.Fec_Ing)+"',;
  '"+Allt(Tmp_Stk.Nom_Prv)+"','"+Allt(Tmp_Stk.Sol_Ing)+"','"+Allt(Tmp_Stk.Ref_Ing)+"','"+Allt(Tmp_Stk.For_Ing)+"','"+Allt(Tmp_Stk.Ent_Ing)+"',;
  '"+Allt(Tmp_Stk.Gar_Ing)+"','"+Allt(Tmp_Stk.Fte_Ing)+"','"+Allt(Tmp_Stk.Cod_Prd)+"','"+Allt(Tmp_Stk.Par_Prd)+"','"+Allt(Tmp_Stk.Cpt_Prd)+"',;
  '"+Allt(Tmp_Stk.Can_Ing)+"','"+Allt(Tmp_Stk.Umd_Prd)+"','"+Allt(Tmp_Stk.Pun_Prd)+"','"+Allt(Tmp_Stk.Imp_Prd)+"','"+Allt(Tmp_Stk.Sub_Ing)+"','"+Allt(Tmp_Stk.Igv_Ing)+"',;
  '"+Allt(Tmp_Stk.Tot_Ing)+"','"+Allt(Tmp_Stk.Mar_Prd)+"','"+Allt(Tmp_Stk.Ser_Prd)+"')"
  If Sqlexec(CnxStk,Xcnx2)>0
  Else
    a=Aerror(Mat)
    Messagebox(Mat(2), 55,'Error al Grabar')
  Endif
  Sele Tmp_Stk
  Skip
EndDo
Indicandote q la variable Xcnx2 la tengo declarada al comienzo del proyecto en PRG de la siguiente manera:
*----------- Variables De Sistema --------------*
PUBLIC Xpunta2, CnxStk, Xcnx2
CnxStk=""
Xcnx2=""
Xcnx3=""
Vale pero yo me refiero y disculpame por no haberme explicado bien. Al valor que esta tomando en tiempo de ejecución es decir esa variable almacena la cadena sql que se va a ejecutar, pues justo en el momento que ocurre el error esta tomando el valor que origina el fallo en el insert que quieres hacer. Te pido esto para poder ver los valores que quieres insertar y así poder ver que campo te esta fallando.
Eso claro esta si puedes interrumpir el programa cuando ocurre el error.
¿Puedes colocar algo para capturar las excepciones en esta función?.
Puedes también si tienes acceso a ejecutar una traza en el servidor de base de datos en la opción Analizador de consultas y veras todos los comandos que se ejecutan en tu base de datos online, y justo cuando ocurre el error esa ultima sentencia que te aparezca en la pantalla del analizador de consultas de SQL Server es la que te esta dando el problema.
Sabes amigo tenias razón era un error de concatenación y declaración de mi variable y que por el apremio y precion del trabajo no me había percatado deberás muchas gracias.
Respuesta
1
El error es muy claro, te esta faltando alguna comilla, yo buscaría bien entre tantas comillas pues no seria raro que se te este quedando alguna por ahí.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas