INSERT y UPDATE (lo que yo uso)

INSERT y UPDATE (lo que yo uso)

Postby goosfancito » Fri Sep 30, 2016 11:52 am

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.

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 )

//------------------------------------------------------------------------------


   
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: INSERT y UPDATE (lo que yo uso)

Postby nageswaragunupudi » Sat Oct 01, 2016 2:45 am

Code: Select all  Expand view
  ELSEIF ( xTipo == "D" )
      IF Empty( xValor )
         xValor := "'0000-00-00'"
      ELSE
         xValor := "'" + Transform( DTOS( xValor ), "@R 9999-99-99" ) + "'"
      ENDIF
   ELSE
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10470
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 49 guests