Blog sobre programación en VFP, Actualizado por Jorge Mota en Guatemala ;)



Desarrollo & Ideas & Sin Categoría 12 de Junio del 2007 03:08 pm

Formateando datos para usar con SQL PassTrough (SPT)

, , , , , ,

Pues como se puede ver en estos artículos podemos usar el ? para que el Fox formatée correctamente los valores, el debuggear esos scripts sql son muchas veces bastante difíciles, sobre todo cuando nos conectamos aVFP por medio de ODBC y nos dice “Tipo de dato incorrecto” / “Data type Mismatch” y no sabemos por donde buscar.

Lo ideal también puede ser almacenar el script en un .sql o .txt para su posterior ejecución, allí tenemos que lidiar con el formato a enviar a cada cadena.

Esta función FormatoDato, sirve para datos VFP o Sql Server (podría servir para otros motores, excepto con tipos Date o Datetime, ya que usa el formato de fechas de Sql Server)

Para otros motores de datos, tendrá que modificar el tratamiento de Fechas.

La función:

Function FormatoValor(luValor, lSql) As String
	Local luReturn
	luTipo = Vartype(luValor)
	Do Case
		Case luTipo = [C]
			luReturn = [']+Alltrim(luValor)+[']
		Case Inlist(luTipo,[I], [N], [Y])
			lcNum = Alltrim(Transform(luValor))
			If [.] $ lcNum
				luReturn = Transform(luValor)
			Else
				luReturn = Alltrim(Transform(luValor))
			Endif
		Case luTipo = [D]
			If !lSql
				If Empty(luValor)
					luReturn =[{}]
				Else
					luReturn = [Date(] + Alltrim(Transform(Year(luValor)))+[,]+Alltrim(Transform(Month(luValor)))+[,]+Alltrim(Transform(Day(luValor)))+[)]
				EndIf
			Else
				If Empty(luValor)
					luReturn =[Null]
				Else
					luReturn = [{d '] + Alltrim(Transform(Year(luValor)))+[-]+Alltrim(Transform(Month(luValor)))+[-]+Alltrim(Transform(Day(luValor)))+['}]
				EndIf
			Endif
		Case luTipo = [T]
			If Empty(luValor)
				luReturn = [Null]
			Else
				luReturn = [{ ts ']+Alltrim(Transform(Year(luValor)))+[-]+Alltrim(Transform(Month(luValor)))+[-]+Alltrim(Transform(Day(luValor)))+[ ]+Alltrim(Transform(Hour(luValor)))+[:]+Alltrim(Transform(Minute(luValor)))+[:]+Alltrim(Transform(Sec(luValor)))+['}]
			Endif
		Case luTipo = [X]
			luReturn = [Null]
		Case luTipo = [L]
			luReturn = luValor
		Otherwise
			luReturn=[']+Alltrim(Transform(luValor))+[']
	Endcase
	Return Transform(luReturn)
Endfunc

También puede descargarla desde acá: http://fox.desdeguate.com/descargas/vfp/formatodato.prg

Un ejemplo sería

Set textmerge on to Memvar cSql noshow
\ insert into tabla (CampoC, CampoT, CampoN) values (< >,< >,< >)
set textmerge to

Lo que daría como resultado para vfp
insert into tabla (CampoC, CampoT, CampoN) values (’ValorCampo’,date(2006,05,06),10.50)

sí usaramos el segundo parámetro:
insert into tabla (CampoC, CampoT, CampoN) values (’ValorCampo’,{d ‘2006-05-06′ },10.50)

También puede agregar su lógica de selección de motor a la función para que todo el trabajo sea transparente!.

Saludos

, , , , , ,

Sí vives en México puedes tener un seguro de vida gratis por hasta 750,000 pesos y ganar dinero al mismo tiempo! clic acá para más información.

2 personas han dicho algo en “Formateando datos para usar con SQL PassTrough (SPT)”

  1. on 04 Nov 2007 at 13:15 1.RSI Sistemas dijo …

    Muy bueno el contenido del post, gracias!

  2. on 07 May 2008 at 11:53 2.Angelo Segovia CHILE dijo …

    Excelente.

Trackback para este post | Suscribete a los comentarios de este post

Vea también:

Deja un comentario, di algo


Quienes visitaron esto, vieron:

  • N/A