que guay es el sql en ads:-)

que guay es el sql en ads:-)

Postby carlos vargas » 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: Select all  Expand view

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: Select all  Expand view

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: Select all  Expand view

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
Last edited by carlos vargas on Sat Sep 10, 2011 11:22 pm, edited 1 time in total.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: que guay es el sql en ads:-)

Postby carlos vargas » Sat Sep 10, 2011 10:39 pm

otro ejemplito:
Code: Select all  Expand view

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)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: que guay es el sql en ads:-)

Postby Patricio Avalos Aguirre » Sun Sep 11, 2011 3: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
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: que guay es el sql en ads:-)

Postby lucasdebeltran » Sun Sep 11, 2011 9: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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: que guay es el sql en ads:-)

Postby Patricio Avalos Aguirre » Wed Sep 14, 2011 6: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
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: que guay es el sql en ads:-)

Postby JavierVital » Thu Sep 15, 2011 2: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.
User avatar
JavierVital
 
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 15 guests