Buen dia.
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.
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.
#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 )
//------------------------------------------------------------------------------