FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour que guay es el sql en ads:-)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
que guay es el sql en ads:-)
Posted: Sat Sep 10, 2011 10:24 PM
amigos, estoy experimentando cambiar ciertas instrucciones a sql en mi app, y esta ganando velocidad y legibilidad, por ejemplo este codigo quedo muy claro:

Code (fw): Select all Collapse
FUNCTION Diferidos_ValidarPrestamo()
   LOCAL lOk  := FALSE
   LOCAL cSql := ""

   IF Empty( cNumPre )
      MsgAlert( "No introdujo el numero de prestamo.", "Verifique" )
   ELSE

      cNumPre := FillZero( cNumPre, 6 )
      oDlgE:update()

      cSql := "SELECT PRE.NUM_PRES, PRE.NUM_CLIE, PRE.PAGADO, CLI.NOMBRE, CLI.CEDULA, CLI.SALDO_ACT, CLI.NUM_RUTA, RUT.NOMBRE AS NOM_RUTA " + ;
              "FROM PRESTAMOS AS PRE, CLIENTES AS CLI, RUTAS AS RUT "                                                                       + ;
              "WHERE PRE.NUM_PRES = %1 AND PRE.PAGADO = FALSE AND PRE.NUM_CLIE = CLI.NUM_CLIE AND CLI.NUM_RUTA = RUT.NUM_RUTA"

      IF ADSRunSQL( "TEMP", cSql, { cNumPre } )
         cNumCli := TEMP->NUM_CLIE
         cNomCli := TEMP->NOMBRE
         cCedCli := TEMP->CEDULA
         cNumRut := TEMP->NUM_RUTA
         cNomRut := TEMP->NOM_RUTA
         nSalCli := TEMP->SALDO_ACT
         IF TEMP->( Eof() )
            MsgAlert( "El numero del prestamo indicado no fue encontrado!", "Verifique" )
         ELSE
            lOk := TRUE
            oDlgE:aControls[1]:oJump := oDlgE:aControls[8]
         ENDIF
         TEMP->( DBCloseArea() )
      ENDIF

      oDlgE:update()

   ENDIF

RETURN lOk


anteriormente tenia que realizar dos busquedas a dos tablas diferentes para tomar los datos, pero ahora con una instruccion sql queda directa, a proposito estoy usando una funcion derivada de otra que encontre por algun lado, la pongo aca por si les gustaria experimentar:
Code (fw): Select all Collapse
FUNCTION ADSRunSQL( cAlias, cSql, aParameters, hConnection, lShow )
   LOCAL cOldAlias  := Alias()
   LOCAL lCreate    := FALSE
   LOCAL nItem      := 0
   LOCAL xParameter

   DEFAULT hConnection := hConn
   DEFAULT lShow       := FALSE

   IF !Empty( cAlias ) .and. !Empty( cSql )

      cSql := StrTran( cSql, ";", "" )

      DBSelectArea( 0 )

      IF !AdsCreateSqlStatement( cAlias, ADS_CDX, hConnection )
         MsgAlert( "Error AdsCreateSqlStatement()" + FINL + "Error: " + cValtoChar( AdsGetLastError() ) )
      ELSE
         IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
            FOR EACH xParameter IN aParameters
               nItem := HB_EnumIndex()
               cSql  := StrTran( cSql, "%" + AllTrim( Str( nItem ) ) , Var2Str( xParameter ) )
            NEXT
         ENDIF
         IF lShow
            MsgInfo( cSql, "SQLDebug")
         ENDIF
         IF !AdsExecuteSqlDirect( cSql )
            ( cAlias )->( DBCloseArea() )
            MsgAlert( "Error AdsExecuteSqlDirect( cSql )" + FINL + "Error:" + cValtoChar( AdsGetLastError() ) + FINL + cSql )
         ELSE
            lCreate := TRUE
         ENDIF
      ENDIF

      IF !Empty( cOldAlias )
         DBSelectArea( cOldAlias )
      ENDIF

   ENDIF

RETURN lCreate

Code (fw): Select all Collapse
FUNCTION Var2Str( xValue )
   LOCAL cType  := ValType( xValue )
   LOCAL cValue := "''"

   DO CASE
   CASE cType == "C"
      cValue := "'" + xValue + "'"
   CASE cType == "N"
      cValue := AllTrim( CStr( xValue ) )
   CASE cType == "L"
      cValue := IIf( xValue, 'True', 'False' )
   CASE cType == "D"
      cValue := "'" + DToC( xValue ) + "'"
   ENDCASE

RETURN cValue

OJO: esta muy inclinada a usar xharbour, pero es facilmente portada a harbour.

el parametro aParameters en la funcion ADSRunSQL es una arreglo con los valores a ser reeplazados en la cadena del parametro cSql en los lugares donde se encuentren %1, %2, ...%n.

por ejemplo

cSql := "select * from clientes where numero=%1 and fecha=%2 and activo=%3"
cNumero := "001"
dFecha := date()
lActivo := .f.
if ADSSql( "TEMP", cSql, { cNumero, dFecha, lActivo }, ....
....

salu2
carlos vargas
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: que guay es el sql en ads:-)
Posted: Sat Sep 10, 2011 10:39 PM
otro ejemplito:
Code (fw): Select all Collapse
PROCEDURE FlujoRuta_SeleccionarRuta()

   RUTA->( DBFSeleccionar( oDlgE      ,;
                           "NOMBRE"   ,;
                           "Nombre de ruta de cobro",;
                           cNumRuta   ,;
                           {|| cNumRuta := RUTA->NUM_RUTA, ;
                               cNomRuta := RUTA->NOMBRE,   ;
                               cNomCobr := COBR->NOMBRE,   ;
                               oDlgE:Update(),             ;
                               oDlgE:MySetFocus( 10 ) } )  )

   IF !Empty( cNumRuta )
      IF ADSRunSQL( "TEMP", "SELECT SUM(ABONO) AS TOTAL FROM DIFERIDOS WHERE FECHA=%1 AND NUM_RUTA=%2", { dFecha, cNumRuta } )
         aValores[ 05 ] := TEMP->TOTAL
         TEMP->( DBCloseArea() )
      ENDIF
   ENDIF

   FlujoRuta_CalcularTotal()

   oDlgE:Update()

RETURN
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: que guay es el sql en ads:-)
Posted: Sun Sep 11, 2011 03:54 AM

Hola

muy interesante carlos

es la potencia que tiene ADS, hay varias cosas
que hay que ir aprendiendo

triger
procedimientos almacenado
publicaciones, etc

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 1303
Joined: Tue Jul 21, 2009 08:12 AM
Re: que guay es el sql en ads:-)
Posted: Sun Sep 11, 2011 09:39 PM

Hola,

Por si os sirve

http://oron.com/5kay31gxxs0c

Salu2

Muchas gracias. Many thanks.



Un saludo, Best regards,



Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]



Implementando MSVC 2010, FWH64 y ADO.



Abandonando uso xHarbour y SQLRDD.
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: que guay es el sql en ads:-)
Posted: Wed Sep 14, 2011 06:42 PM

Gracias lucas por la informacion

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: que guay es el sql en ads:-)
Posted: Thu Sep 15, 2011 02:59 PM

Patricio, aprobechando el hilo
de casualidad no tendras una funcion para agregar
tablas o quitar tablas de un dd, funcionable,
hice uno con lo que muestra la ayuda del ads
pero no me funciona.

Saludos.

Continue the discussion