Me hice esta pequeña rutina porque estoy teniendo problemas con los insert y update de la tdolphin,
falta ver lo de las fechas pero quien quiera colaborar aca esta el codigo
gracias.
- Code: Select all Expand view
#include "fivewin.ch"
#include "debug.ch"
#include "tdolphin.ch"
CLASS TD FROM TDOLPHINSRV
METHOD insertar( cTabla, aDatos )
METHOD preparar( cTabla, aDatos, aCampos, aValores )
METHOD actualizar( cTabla, aDatos, xCampo, xValor )
METHOD convertir( xValor, xTipo )
END CLASS
//------------------------------------------------------------------------------
METHOD insertar( cTabla, aDatos )
LOCAL this, ;
aCampos, ;
aValores, ;
cQry, ;
cCampo
this := qself()
aCampos := { }
aValores := { }
::preparar( cTabla, aDatos, @aCampos, @aValores )
cQry := "INSERT INTO " + cTabla + "("
FOR EACH cCampo IN aCampos
cQry += cCampo + ","
NEXT
cQry := Left( cQry, Len( cQry ) - 1 )
cQry += ") VALUES ("
FOR EACH cCampo IN aValores
cQry += cCampo + ","
NEXT
cQry := Left( cQry, Len( cQry ) - 1 )
cQry += ")"
::Execute( cQry )
RETURN ( NIL )
//------------------------------------------------------------------------------
METHOD preparar( cTabla, aDatos, aCampos, aValores )
LOCAL aST, ;
nItem, ;
xTipo, ;
xValor
aST := ::tablestructure( cTabla )
FOR nItem := 1 TO Len( aDatos )
xTipo := aST[ AScan( aST, { | a | a[ 1 ] == aDatos[ nItem ][ 1 ] } ) ][ 09 ]
xValor := ::convertir( aDatos[ nItem ][ 02 ], xTipo )
AAdd( aCampos, aDatos[ nItem ][ 01 ] )
AAdd( aValores, xValor )
NEXT
RETURN ( NIL )
//------------------------------------------------------------------------------
METHOD actualizar( cTabla, aDatos, xCampo, xValor )
LOCAL this, ;
aCampos, ;
aValores, ;
cQry, ;
cCampo, ;
xTipo, ;
nItem, ;
aSt
this := qself()
aCampos := { }
aValores := { }
aSt := ::tablestructure( cTabla )
xTipo := aSt[ AScan( aSt, { | a | a[ 1 ] == xCampo } ) ][ 09 ]
xValor := ::convertir( xValor, xTipo )
::preparar( cTabla, aDatos, @aCampos, @aValores )
cQry := "UPDATE " + cTabla + " SET "
FOR nItem := 1 TO Len( aCampos )
cQry += aCampos[ nItem ] + "=" + aValores[ nItem ] + ","
NEXT
cQry := Left( cQry, Len( cQry ) - 1 )
cQry += " WHERE " + xCampo + "=" + xValor
::Execute( cQry )
RETURN ( NIL )
//------------------------------------------------------------------------------
METHOD convertir( xValor, xTipo )
IF xTipo == "N"
IF ValType( xValor ) == "N"
xValor := "'" + AllTrim(Str(xValor)) + "'"
ELSE
xValor := "'" + xValor + "'"
ENDIF
ELSEIF xTipo == "L"
xValor := xValor
IF ( ValType( xValor ) == "N" )
IF xValor == 0
xValor := "'0'"
ELSEIF xValor == 1
xValor := "'1'"
ENDIF
ELSEIF ( ValType( xValor ) == "C" )
IF Upper( AllTrim( xValor ) ) == ".F."
xValor := "'0'"
ELSEIF Upper( AllTrim( xValor ) ) == ".T."
xValor := "'1'"
ELSEIF xValor == "0"
xValor := "'0'"
ELSEIF xValor == "1"
xValor := "'1'"
ENDIF
ENDIF
ELSEIF ( xTipo == "D" )
xValor := '"' + Transform( xValor, "@R 9999-99-99" ) + '"'
ELSE
xValor := '"' + xValor + '"'
ENDIF
RETURN ( xValor )
//------------------------------------------------------------------------------