El Blog de Rafa Cano

20 febrero, 2006

FOXPRO: Tratar campos FechaHora (DateTime) como Fecha (Date) :: PortalFox :: Nada corre como un zorro: "Tratar campos FechaHora (DateTime) como Fecha (Date)
Enviado por: rcano el 13 Feb 2006 - 01:05 AM
Bases de Datos El tema era que quería tratar los datos de tipo T (FechaHora) como los de tipo D (Fecha), ya que atacaba a una B.D. que no tenía tipo de dato Fecha, la solución como siempre en la ayuda ;)


Yo utilizo los objetos CursorAdapter, pues lo que he hecho ha sido usar las propiedades: UseCursorSchema con valor .T., y la propiedad CursorSchema con el valor de los campos del SELECT a ejecutar en el mismo orden de aparición de los campos.

Ej:

oCursor.Alias = 'MiAlias'

oCursor.DataSourceType = 'ODBC' && Tipo ODBC por ejemplo.

oCursor.DataSource = ghndODBC && handle de conexión Odbc.

oCursor.SelectCmd = 'SELECT Id, CampoCar, CampoFechaHora ' + ;
' FROM Tabla WHERE Id = ?pnId'

oCursor.CursorSchema = 'Id I, CampoCar C(30), CampoFechaHora D'

oCursor.UseCursorSchema = .T.

oCursor.CursorFill()


Con esto y si no me he equivocado en el código obtendríamos un cursor con el tipo Fecha en vez del tipo FechaHora. Esta misma solución me ha servido para pasar campos del tipo coma flotante (Float) a campos numéricos con un número determinado de posiciones decimales.


FOXPRO: Hacer un cursor creado mediante SPT actualizable. :: PortalFox :: Nada corre como un zorro: "

Hacer un cursor creado mediante SPT actualizable.
Enviado por: rcano el 24 Nov 2003 - 01:03 AM
Bases de Datos Es una manera de evitar las ordenes insert, update, y delete y utilizar tableUpdate() y tableRevert()


Suponemos que ya tenemos hecha la conexión SQL

.....

m.lcSQL = 'SELECT CLienteID, Nombre, Apell1, Apell2 FROM Clientes WHERE Nombre LIKE 'A%''

m.llRetorno = (SQLEXEC(m.lnHnd, m.lcSQL, 'L_Clientes') > -1)

IF m.llRetorno

CrearCursorActualizable('L_Clientes', 'Clientes', 'ClienteId')

BROWSE

TABLEUPDATE(1, .T., 'L_Clentes')

ENDIF

RETURN

FUNCTION CrearCursorActualizable

LPARAMETERS tcAlias, tcTabla, tcKeyList

LOCAL llRetorno, i, lcCampos, lcCamposUp

LOCAL ARRAY laEstruct(1)



m.tcAlias = IIF(EMPTY(m.tcAlias), '', ALLTRIM(TRANSFORM(m.tcAlias)))

m.llRetorno = !EMPTY(m.tcAlias) AND USED(m.tcAlias)

IF !m.llRetorno

RETURN .F.

ENDIF

m.tcTabla = IIF(EMPTY(m.tcTabla), '', ALLTRIM(TRANSFORM(m.tcTabla)))

m.tcKeyList = IIF(EMPTY(m.tcKeyList), '', ALLTRIM(TRANSFORM(m.tcKeyList)))



m.llRetorno = m.llRetorno AND CURSORSETPROP('Buffering', 5)

"

FOXPRO: Funcion que detecta a que base de datos pertenece una tabla DBF :: PortalFox :: Nada corre como un zorro: "
Funcion que detecta a que base de datos pertenece una tabla DBF
Enviado por: rcano el 27 Mar 2001 - 06:36 PM
Bases de Datos Hace poco preguntaron como saber a que base de datos pertenece un fichero dbf determinado.




Esta función devuelve la cadena vacia si no se encuentra, si el fichero dbf es una tabla libre, y el nombre y la ruta del DBC si pertenece a una base de datos.




FUNCTION DameDBC()

PARAMETERS tcNombreTabla

LOCAL lnCampos, lnManejador, lnArea

lnArea = SELECT()

SELECT 0

USE (tcNombreTabla) AGAIN

lnCampos = FCOUNT()

USE

lnManejador = FOPEN(tcNombreTabla)

IF lnManejador > 0

FSEEK(lnManejador, 32 + 1 + lnCampos * 32)

lcCadena = FREAD(lnManejador, 263)

if left(lcCadena,1) == CHR(0)

lcCadena = ''

ELSE

lcCadena = LEFT(lcCadena, AT(CHR(0), lcCadena) - 1)

ENDIF

FCLOSE(lnManejador)

ENDIF

SELECT (lnArea)

RETURN lc"