FoxPro/Visual FoxPro - Problemas con el SQLEXEC()

 
Vista:
sin imagen de perfil
Val: 69
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Problemas con el SQLEXEC()

Publicado por Jesus (121 intervenciones) el 29/12/2013 01:19:03
Estimados amigos de nuevo molestando ahora tengo este problema q al momento q quiero Grabar o Actualizar datos desde el Vfp9 al Sql2000 Server me sale este mensaje de Error: "Se necesita el parametro de la instruccion SQL para las llamadas SQLEXEC() no preparadas"

Cuando deseo Grabarr datos utilizo este codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Select Tmp_Eos
Go Top
Do While !Eof()
 
 = TABLEUPDATE(.T.)
 Xsql4 ="Insert Into Age_Eos(Gen_Doc, Cat_Doc, Dni_Doc, Dat_Doc, Ruc_Doc,  Cur_Doc, Htr_Doc, Phr_Doc, Imp_Doc, Tot_Doc) Values('"+ALLTRIM(Thisform.Gen_Doc.Value)+"','"+Tmp_Eos.Cat_Doc+"',;
 '"+Tmp_Eos.Dni_Doc+"','"+Tmp_Eos.Dat_Doc+"','"+Tmp_Eos.Ruc_Doc+"','"+Tmp_Eos.Cur_Doc+"',;
'"+Tmp_Eos.Htr_Doc+"','"+Tmp_Eos.Phr_Doc+"','"+ALLTRIM(STR(Tmp_Eos.Imp_Doc,9,2))+"',;
'"+ALLTRIM(STR(Thisform.Tot_Doc.Value,9,2))+"')"
 
 If Sqlexec(CnxEos,Xsql4)>0
 Else
   a=Aerror(Mat)
   Messagebox(Mat(2),55,'Error al Grabar') 
 ENDIF
 
  Sele Tmp_Eos
  Skip
ENDDO


Cuando deseo actualizar datos utilizo este codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
= TABLEUPDATE(.T.)
Xsql3="UPDATE Age_Eos SET Age_Eos.Dni_Doc ='"+Allt(Age_Eos.Dni_Doc)+"',;
Age_Eos.Dat_Doc ='"+Allt(Age_Eos.Dat_Doc)+"' WHERE Age_Eos.Gen_Doc ='"+Allt(Age_Eos.Gen_Doc)+"'"
=SQLEXEC(CnxAst,Xsql3)
 
 IF SQLEXEC(CnxAst,Xsql3) > 0
   *** Actualizados con exito
   *** Messagebox("Datos actualizados con éxito")
ELSE
  IF AERROR(laError) > 0
     Messagebox("Error al actualizar el registro:"+laError[2])
  ELSE
     Messagebox("Error inesperado!!")
  ENDIF
ENDIF

Gracias por su pronta Ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas con el SQLEXEC()

Publicado por Saul (728 intervenciones) el 30/12/2013 05:04:14
Hola Jesus, mira como lo hago yo.
es un poquito mas claro, no solo para otros programadores que vean tu codigo, si no incluso para ti,
cuando quieras hacer algunas modificaciones en futuro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
mGen_Doc = ALLTRIM(Thisform.Gen_Doc.Value)
mCat_Doc = Tmp_Eos.Cat_Doc
mDni_Doc = Tmp_Eos.Dni_Doc
mDat_Doc = Tmp_Eos.Dat_Doc
mRuc_Doc = Tmp_Eos.Ruc_Doc
mCur_Doc = Tmp_Eos.Cur_Doc
mHtr_Doc = Tmp_Eos.Htr_Doc
mPhr_Doc = Tmp_Eos.Phr_Doc
mImp_Doc = ALLTRIM(STR(Tmp_Eos.Imp_Doc,9,2))
mTot_Doc = ALLTRIM(STR(Thisform.Tot_Doc.Value,9,2))
 
 
		lcSQLcommand   = ""
			TEXT TO lcSQLcommand NOSHOW
				  	INSERT INTO Age_Eos (Gen_Doc,
				  						 Cat_Doc,
				  						 Dni_Doc,
				  						 Dat_Doc,
				  						 Ruc_Doc,
				  						 Cur_Doc,
				  						 Htr_Doc,
				  						 Phr_Doc,
				  						 Imp_Doc,
				  						 Tot_Doc)
				    			VALUES (?mGen_Doc,
				  						?mCat_Doc,
				  						?mDni_Doc,
				  						?mDat_Doc,
				  						?mRuc_Doc,
				  						?mCur_Doc,
				  						?mHtr_Doc,
				  						?mPhr_Doc,
				  						?mImp_Doc,
				  						?mTot_Doc)
					ENDTEXT
			    cmd = SQLEXEC(CnxEos,lcSQLcommand)
 
				IF cmd > 0 	 && Intenta confirmar los cambios
					WAIT WINDOW  'Guardando Depósito Base de Datos !!!'
				ELSE
					IF AERROR(laError)> 0
						Messagebox("No guardo ningún dato se ha producido un Error: "+laError[2])
					ENDIF
				ENDIF


Tengo varias observaciones mas para ti.

1.- No se porque cambias de tipo esta variable, deberia ser identica a SQL SERVER, que me inmagino es numerica
ALLTRIM(STR(Tmp_Eos.Imp_Doc,9,2)

2.- Tienes como que dos conexciones a SQL SERVER una para INSERTAR Sqlexec(CnxEos
y Otras para ACTULIZAR SQLEXEC(CnxAst,Xsql3)

3.- Esta instruccion no se para que la haces
Select Tmp_Eos
Go Top
Do While !Eof()
= TABLEUPDATE(.T.)

Si lo que pretendes es que guarte en Tmp_Eos tus datos, solamente que sea un grid de donde traes todos los
datos, pero no aun asi, porque el TABLEUPDATE(.T.) que guarda unicamente una linea a la vez.

Ahoria si lo que quieres es que guarda todos los datos de Tmp_Eos a tu Tabla SQL no nocesitas el TABLEUPDATE(.T.) cada vez que recorres la tabla.

Saludos

Sha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 69
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Problemas con el SQLEXEC()

Publicado por Jesus (121 intervenciones) el 31/12/2013 05:02:39
Estimado Saul
Reprogramare mi codigo como tu me estas ilustrando:
con respecto a tus Observaciones:

1.- No se porque cambias de tipo esta variable, deberia ser identica a SQL SERVER, que me inmagino es numerica
ALLTRIM(STR(Tmp_Eos.Imp_Doc,9,2)
Rtpa: efectivamente en el Sql Server es Real (numerico) pero cuando lo cadena iba '"+Tmp_Eos.Imp_Doc+"'
me da un mensaje de error y no graba nada.

2.- Tienes como que dos conexciones a SQL SERVER una para INSERTAR Sqlexec(CnxEos
y Otras para ACTULIZAR SQLEXEC(CnxAst,Xsql3)
Rpta: aki si un error de Digitacion sorry amigo la conexion es CnxEos

3.- Esta instruccion no se para que la haces
Select Tmp_Eos
Go Top
Do While !Eof()
= TABLEUPDATE(.T.)
Rpta:
Lo q pasa es q se desea grabar varios registro esto se almacen en un Grid y uso la Tabla Tmp_Eos para q aki se graben todos los registros temporalmente alli. por eso uso un Do While !Eof() para q pase todos los registro grabados en el Grid a la tabla en SQL Server

Oo como hago amigo de antemano mil gracias por tu apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar