Addons para Dolphin

Addons para Dolphin

Postby carlos vargas » Thu Nov 07, 2013 8:31 pm

Amigos, estoy en proceso de migrar una app que actualmente usa ADS Server a MYSQL usando Dolphin
y les comentos que me esta yendo de maravilla, la velocidad de la app en browses es abismal, estoy como al 20% y estoy entusiasmado, mucho.
le dejos algunas cosillas que he agregado a dolphin para hacerme mas facil la vida. adicionalmente les comento que estoy usando la dll cliente de MariaSQL
libmariadb.dll en lulgar de libmysql.lib

Code: Select all  Expand view


 oServer:Execute2( "UPDATE USUARIOS SET HISTORICO=CONCAT(HISTORICO, %1 ) WHERE IDENTIDAD=%2", { cLog, cUserIden  } )
 


Code: Select all  Expand view


   TRY
      oQryCiud := oServer:Query2( "SELECT NUM_CIUD, NOMBRE FROM CIUDADES ORDER BY NOMBRE" )
      IF !Empty( cFiltro )
         oQryFeri := oServer:Query2( "SELECT * FROM vCATFERI WHERE NUM_CIUD=%1 OR NUM_CIUD=0 ORDER BY FECHA", { 10 } )
      ELSE
         oQryFeri := oServer:Query2( "SELECT * FROM vCATFERI ORDER BY FECHA" )
      ENDIF
      oQryCiud:FillDbf( "TBLCIUD", "TEMP1" )
      oQryCiud:END()
   CATCH oError
      IIf( HB_IsObject( oQryCiud ), oQryCiud:END(), NIL )
      IIf( HB_IsObject( oQryFeri ), oQryFeri:END(), NIL )
      ShowError( oError )
      RETURN
   END
 


Code: Select all  Expand view

...

PROCEDURE MisExtenciones

   EXTEND CLASS TDOLPHINQRY WITH METHOD FillDbf //toma la consulta y la pasa una tabla
   EXTEND CLASS TDOLPHINSRV WITH METHOD Query2 //query con parametros
   EXTEND CLASS TDOLPHINSRV WITH METHOD Execute2 //execute con parametros

RETURN

/*-------------------------------------------------------------------------------------------------*/

FUNCTION FillDbf( cTable, cAlias, bOnStart, bOnEnd )
   LOCAL Self       := HB_QSelf()
   LOCAL lCreated   := FALSE
   LOCAL aStructure := {}
   LOCAL x, cOldAlias := Alias()

   DEFAULT cTable := "SQLRESULT", cAlias := cTable, bOnStart := {|| NIL }, bOnEnd := {|| NIL }

   Eval( bOnStart, Self )

   IF SELECT( cAlias ) > 0
      (cAlias)->( DBCloseArea() )
   ENDIF

   nCountF := ::FCount()

   FOR x := 1 TO nCountF
      AAdd( aStructure, { ::FieldName(x), ::FieldType(x), ::FieldLen(x), FieldDec(x) } )
   NEXT

   TRY
      DBCreate( cTable, aStructure, "DBFCDX", TRUE, cAlias )
      ::GoTop()

      DO WHILE !::Eof()
         (cAlias)->( DBAppend() )
         FOR x := 1 TO nCountF
            (cAlias)->( FieldPut(x, ::FieldGet(x) ) )
         NEXT
         ::Skip()
      ENDDO

      ::GoTop()
      (cAlias)->( DBGoTop() )
      lCreated   := TRUE
   CATCH
      lCreated   := FALSE
   END

   IF !Empty(cOldAlias)
      DBSelectArea( cOldAlias )
   ENDIF

   Eval( bOnEnd, Self )

RETURN lCreated

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Query2( cQuery, aParameters, lShow )
   LOCAL Self := HB_QSelf()
   LOCAL xParameter
   LOCAL cQuery2

   DEFAULT aParameters := NIL, lShow := FALSE

   IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
      IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
         FOR EACH xParameter IN aParameters
            cQuery := StrTran( cQuery, "%" + Num2Str( HB_EnumIndex() ), Var2Str( xParameter ) )
         NEXT
         cQuery2 := cQuery
      ENDIF
   ELSE
      cQuery2 := cQuery
   ENDIF

   IF lShow
      MsgInfo( cQuery2 )
   ENDIF

RETURN ::Query( cQuery2 )

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Execute2( cQuery, aParameters, lShow )
   LOCAL Self := HB_QSelf()
   LOCAL xParameter
   LOCAL cQuery2

   DEFAULT aParameters := NIL, lShow := FALSE

   IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
      IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
         FOR EACH xParameter IN aParameters
            cQuery := StrTran( cQuery, "%" + Num2Str( HB_EnumIndex() ), Var2Str( xParameter ) )
         NEXT
         cQuery2 := cQuery
      ENDIF
   ELSE
      cQuery2 := cQuery
   ENDIF

   IF lShow
      MsgInfo( cQuery2 )
   ENDIF

   ::Execute( cQuery2 )

RETURN


/*-------------------------------------------------------------------------------------------------*/

FUNCTION Var2Str( xValue )
   LOCAL cValue := "''"

   DO CASE
   CASE HB_IsString( xValue )
      cValue := "'" + xValue + "'"
   CASE HB_IsNumeric( xValue )
      cValue := Num2Str( xValue )
   CASE HB_IsLogical( xValue )
      cValue := IIf( xValue, '1', '0' )
   CASE HB_IsDate( xValue )
      cValue := "'" + Transform( DToS( xValue ), "@R 9999-99-99" ) + "'"
   ENDCASE

RETURN cValue

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Num2Str( nNum )
RETURN AllTrim( CStr( nNum ) )

/*-------------------------------------------------------------------------------------------------*/

 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1691
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Addons para Dolphin

Postby carlos vargas » Thu Nov 07, 2013 8:51 pm

Grande Daniel, excelente trabajo con dolphin.

Este es un modulo que acabo de finalizar, lo muestro para que se den una idea
Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/

#include "encabezado.ch"

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados()
   PRIVATE oError
   PRIVATE oDlg, oBrw, oToolbar, oPopUp1, oBtnFilter
   PRIVATE oQryFeri, oQryCiud
   PRIVATE cFiltro, lFiltrado
   PRIVATE bColCiudad

   cFiltro   := ""
   lFiltrado := FALSE

   IF !oSesion:EsAdmin()
      cFiltro := ""
   ELSE
      cFiltro := "NUM_CIUD=%1 OR NUM_CIUD=0"
      cFiltro := StrFormat( cFiltro, Var2Str( oSesion:GetNumCiudad() ) )
   ENDIF

   TRY
      oQryCiud := oServer:Query2( "SELECT NUM_CIUD, NOMBRE FROM CIUDADES ORDER BY NOMBRE" )
      IF !Empty( cFiltro )
         oQryFeri := oServer:Query2( "SELECT * FROM vCATFERI WHERE " + cFiltro + " ORDER BY FECHA" )
      ELSE
         oQryFeri := oServer:Query2( "SELECT * FROM vCATFERI ORDER BY FECHA" )
      ENDIF
      oQryCiud:FillDbf( "TBLCIUD", "TEMP1" )
      oQryCiud:END()
   CATCH oError
      IIf( HB_IsObject( oQryCiud ), oQryCiud:END(), NIL )
      IIf( HB_IsObject( oQryFeri ), oQryFeri:END(), NIL )
      ShowError( oError )
      RETURN
   END

   bColCiudad := {|| IIf( oQryFeri:RecCount() > 0, IIf( oQryFeri:NACIONAL, "N/D", oQryFeri:NOMCOR ), "" ) }

   DEFINE DIALOG oDlg NAME "DLG_FERIADOSC" OF oMainWnd ICON GetIcon() FONT oFontD

   REDEFINE XBROWSE oBrw ID 101 OF oDlg ALIAS "FERI" ON DBLCLICK Feriados_Editar( FALSE ) FONT oFontD

   ADD TO oBrw DATA oQryFeri:FECHA      TITLE "Fecha"              SIZE 090 CENTER PICTURE "@D"
   ADD TO oBrw DATA oQryFeri:MOTIVO     TITLE "Motivo del feriado" SIZE 270
   ADD TO oBrw DATA oQryFeri:NACIONAL   TITLE "Nacional"           SIZE 054
   ADD TO oBrw DATA bColCiudad          TITLE "Ciudad"             SIZE 054

   WITH OBJECT oBrw
      :SetDolphin( oQryFeri, .F. )
      :MyConfig()
      :aCols[ 03 ]:SetCheck( { "BMS_CHECKON","BMS_CHECKOFF" } )
      :bKeyDown      := {|nKey| Feriados_ProcesaTecla( nKey ) }
      :lHScroll      := FALSE
      :nHeaderHeight := 36
   END

   ACTIVATE DIALOG oDlg ON INIT Feriados_Toolbar()

   TEMP1->( DBCloseArea() )

   oQryFeri:END()

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Toolbar()

   MENU oPopUp1 POPUP 2010
      MENUITEM "&1.-Mostrar feriados de un año"   ACTION Feriados_Filtrar( 1 )
      MENUITEM "&2.-Mostrar todos los feriados"   ACTION Feriados_Filtrar( 2 )
   ENDMENU

   DEFINE BUTTONBAR oToolBar OF oDlg SIZE 60, 60 2010

   DEFINE BUTTON NAME "TB_CLOSE"      OF oToolBar ACTION oDlg:END()               PROMPT "&Salir"
   DEFINE BUTTON NAME "TB_ADD"        OF oToolBar ACTION Feriados_Editar( TRUE  ) PROMPT "&Nuevo"     GROUP
   DEFINE BUTTON NAME "TB_EDIT"       OF oToolBar ACTION Feriados_Editar( FALSE ) PROMPT "&Editar"
   DEFINE BUTTON NAME "TB_DELETE"     OF oToolBar ACTION Feriados_Borrar()        PROMPT "&Borrar"
   DEFINE BUTTON NAME "TB_PRINTER"    OF oToolBar ACTION Feriados_Listar()        PROMPT "&Imprimir"
   DEFINE BUTTON NAME "TB_HOLYDAYADD" OF oToolBar ACTION Feriados_Agregar()       PROMPT "&Generar"   GROUP
   DEFINE BUTTON NAME "TB_FILTERADD"  OF oToolBar ACTION Feriados_Filtrar(2)      PROMPT "&Filtrar"   GROUP MENU oPopUp1

   SET MSGBAR OF oDlg TO "INS=Nuevo, DEL=Borrar, ENTER=Editar, F3=Imprimir, F4=Generar/Año, F5=Filtrar/Quitar, F9=Refrescar" 2010

   oDlg:SetControl( oBrw )

   WITH OBJECT oToolBar
      :bRClicked := {|| NIL }
      :bLClicked := {|| NIL }

      :aControls[ 1 ]:cToolTip := "Cierra modulo"
      :aControls[ 2 ]:cToolTip := "Agrega un nuevo registro"
      :aControls[ 3 ]:cToolTip := "Edita datos del registro actual"
      :aControls[ 4 ]:cToolTip := "Elimina datos del registro actual"
      :aControls[ 5 ]:cToolTip := "Lista datos para ser impresos"
      :aControls[ 6 ]:cToolTip := "Agrega los feriados de un año automaticamente"
      oBtnFilter := :aControls[ 7 ]
   END

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_ProcesaTecla( nKey )

   DO CASE
   CASE nKey == VK_INSERT
      Feriados_Editar( TRUE  )
   CASE nKey == VK_RETURN
      Feriados_Editar( FALSE )
   CASE nKey == VK_DELETE
      Feriados_Borrar()
   CASE nKey == VK_F3
      Feriados_Listar()
   CASE nKey == VK_F4
      Feriados_Agregar()
   CASE nKey == VK_F5
      IF !lFiltrado
         Feriados_Filtrar( 1 )
      ELSE
         Feriados_Filtrar( 2 )
      ENDIF
   CASE nKey == VK_F9
      Refrescar_Browse( oBrw )
   ENDCASE

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Filtrar( nOpcion )
   LOCAL nAno

   DO CASE
   CASE nOpcion=1
      nAno := 0
      IF !MsgGet( "Mostrar feriados del año", "Introdusca el año que desea filtrar", @nAno, "9999", "TB_HOLYDAY" )
         oBrw:SetFocus()
         RETURN
      ELSE
         IF nAno <= 0
            oBrw:SetFocus()
            RETURN
         ENDIF
      ENDIF
      IF oSesion:EsAdmin()
         cFiltro := "YEAR(FECHA)=" + Var2Str( nAno )
      ELSE
         cFiltro := "NUM_CIUD=%1 OR NUM_CIUD=0 AND YEAR(FECHA)=" + Var2Str( nAno )
      ENDIF
      WITH OBJECT oBtnFilter
         :FreeBitmaps()
         :LoadBitmaps( "TB_FILTERDEL" )
         :cTooltip := "Elimina filtro, muestra todos los feriados"
         :Refresh()
      END
      lFiltrado := TRUE
   CASE nOpcion=2
      IF oSesion:EsAdmin()
         cFiltro := ""
      ELSE
         cFiltro := "NUM_CIUD=%1 OR NUM_CIUD=0"
      ENDIF
      WITH OBJECT oBtnFilter
         :FreeBitmaps()
         :LoadBitmaps( "TB_FILTERADD" )
         :cTooltip := "Filtra los feriados de un año en particular"
         :Refresh()
      END
      lFiltrado := FALSE
   ENDCASE

   oQryFeri:SetWhere( cFiltro, TRUE )

   oBrw:GoTop()
   oBrw:Refresh()
   oBrw:SetFocus()

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Borrar()
   LOCAL lBorrar := TRUE

   IF oQryFeri:eof()
      MsgAlert( "No existen feriados registrados, nada que borrar." )
   ELSE
      IF MsgNoYes( "Desea borrar datos del feriado seleccionado?" )
         TRY
            IF lBorrar
               oServer:Execute2( "DELETE FROM FERIADOS WHERE FECHA=%1", { oQryFeri:FECHA } )
               oQryFeri:LoadQuery()
            ENDIF
         CATCH oError
            ShowError( oError )
         END
         oBrw:Refresh()
      ENDIF
   ENDIF
   oBrw:SetFocus()

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Editar( lNuevo )
   PRIVATE oDlgE
   PRIVATE oFecha, oNomCiud
   PRIVATE dFecha, cMotivo, lNacional, nNumCiud, cNomCiud

   IF TEMP1->( RecCount() ) == 0
      MsgAlert( "No hay ciudades/oficinas definidas, no puede continuar." )
      oBrw:SetFocus()
      RETURN
   ENDIF

   IF lNuevo
      dFecha    := Date()
      cMotivo   := Space( 40 )
      lNacional := TRUE
      nNumCiud  := 0
      cNumCiud  := ""
   ELSE
      IF oQryFeri:eof()
         MsgAlert( "No existen feriados registrados, nada que editar." )
         oBrw:SetFocus()
         RETURN
      ENDIF
      dFecha    := oQryFeri:FECHA
      cMotivo   := oQryFeri:MOTIVO
      lNacional := oQryFeri:NACIONAL
      nNumCiud  := oQryFeri:NUM_CIUD
      cNomCiud  := oQryFeri:CIUDAD
   ENDIF

   DEFINE DIALOG oDlgE NAME "DLG_FERIADOSE" OF oDlg ICON GetIcon() FONT oFontD

   REDEFINE GET oFecha VAR dFecha ;
      ID 101 OF oDlgE ;
      PICTURE "@D" ;
      BITMAP "BMS_CALENDAR" ;
      WHEN lNuevo  ;
      VALID Feriados_ValidarFecha() ;
      ACTION ( dFecha := MsgDate( dFecha, "Seleccione fecha", oFecha ) )

   REDEFINE GET cMotivo ;
      ID 102 OF oDlgE ;
      PICTURE "@!"

   REDEFINE CHECKBOX lNacional ;
      ID 103 OF oDlgE ;
      ON CHANGE IIf( lNacional, ( nNumCiud:=0, cNomCiud:="", oNomCiud:Refresh() ), NIL )

   REDEFINE GET oNomCiud VAR cNomCiud ;
      ID 104 OF oDlgE ;
      WHEN FALSE ;
      UPDATE

   REDEFINE BUTTON ;
      ID 105 OF oDlgE ;
      WHEN !lNacional ;
      ACTION Feriados_SeleccionarCiudad()

   REDEFINE BUTTON ;
      ID 201 OF oDlgE ;
      ACTION IIf( Feriados_Grabar( lNuevo ), oDlgE:END(), NIL )

   REDEFINE BUTTON ;
      ID 202 OF oDlgE ;
      ACTION oDlgE:END() ;
      CANCEL

   ACTIVATE DIALOG oDlgE

   oBrw:SetFocus()

RETURN

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Feriados_ValidarFecha()
   LOCAL lOk       := FALSE
   LOCAL lRepetido := FALSE

   IF Empty( dFecha )
      MsgAlert( "Debe definir la fecha del feriado." )
   ELSE
      TRY
         oQryTmp := RunSQL( "SELECT COUNT(*) AS CONTADOR FROM FERIADOS WHERE FECHA=%1 AND NUM_CIUD=%2 AND NACIONAL=%3", { dFecha, nNumCiud, FALSE } )
         IF oQryTmp:CONTADOR > 0
            MsgAlert( "Ya se ha registrado un feriado con la fecha indicada, verifique." )
            lRepetido := TRUE
         ELSE
            lOk := TRUE
         ENDIF
         oQryTmp:END()
      CATCH oError
         IIf( HB_IsObject( oQryTmp ), oQryTmp:END(), NIL )
         ShowError( oError )
      END
   ENDIF

RETURN lOk


/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_SeleccionarCiudad()
   LOCAL bEval := {|| nNumCiud := TEMP1->NUM_CIUD, cNomCiud := TEMP1->NOMBRE, oNomCiud:Refresh() }

   TEMP1->( DBFSeleccionar( oDlgE, "NOMBRE", "Ciudad/Oficina", nNumCiud, bEval ) )

RETURN

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Feriados_Grabar( lNuevo )
   LOCAL cWhere
   LOCAL lGrabado := FALSE

   IF Empty( dFecha ) .or. Empty( cMotivo )
      MsgAlert( "Datos incompletos, no se puede actualizar datos." )
      RETURN lGrabado
   ENDIF

   TRY
      oServer:BeginTransaction()
      IF lNuevo
         oServer:Insert( "FERIADOS", { "NUM_CIUD", "FECHA", "MOTIVO", "NACIONAL" }, ;
                                     { nNumCiud  , dFecha  , cMotivo, lNacional  }  )
      ELSE
         cWhere := "FECHA=" + Var2Str( dFecha )
         oServer:Update( "FERIADOS", { "NUM_CIUD", "FECHA", "NOMBRE", "NACIONAL" }, ;
                                     { nNumCiud  , dFecha  , cMotivo, lNacional  }, cWhere  )
      ENDIF
      oServer:CommitTransaction()
      lGrabado := TRUE
   CATCH oError
      oServer:RollBack()
      ShowError( oError )
   END

   IF lGrabado
      oQryFeri:LoadQuery()
      IIf( lNuevo, oBrw:Refresh(), oBrw:RefreshCurrent() )
   ELSE
      oBrw:GoTop()
   ENDIF

RETURN lGrabado

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Agregar()
   LOCAL aFeriados, aDia
   LOCAL dFecha, nAnoAct
   LOCAL nAno, nSiglo, nG, nK, nI, nJ, nL, nDiaSS, nMesSS
   LOCAL nFound := 0

   nAnoAct := Year( Date() )
   IF !MsgGet( "Agregar feriados de año", "Introdusca el año que desea procesar", @nAnoAct, "9999", "TB_HOLYDAYADD" )
      oBrw:SetFocus()
      RETURN
   ELSE
      IF nAnoAct <= 0
         oBrw:SetFocus()
         RETURN
      ENDIF
   ENDIF

   aFeriados := {}

   dFecha := DMY2DATE( 1, 1, nAnoAct )

   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados , { dFecha, "PRIMER DIA DEL AÑO" } )
   ENDIF

   nAno   := nAnoAct
   nSiglo := Int( nAno / 100 )
   nG     := Mod( nAno,  19  )
   nK     := Int( ( nSiglo - 17 ) / 25 )
   nI     := Mod( ( nSiglo - int( nSiglo / 4 ) - int( (nSiglo - nK ) / 3 ) + 19* nG + 15 ), 30 )
   nI     := nI - Int( nI / 28 ) * ( (1 - Int( nI / 28 ) * ( Int( 29 / ( nI+1 ) ) * ( Int( ( 21 - nG ) / 11 ) ) ) ) )
   nJ     := Mod( ( nAno + Int( nAno / 4 ) + nI + 2 - nSiglo + Int( nSiglo / 4 ) ), 7 )
   nL     := nI - nJ
   nMesSS := 3 + Int( ( nL + 40 ) / 44 )
   nDiaSS := nL + 28 - 31 * Int ( nMesSS / 4 )


   dFecha := DMY2DATE( nDiaSS, nMesSS, nAnoAct ) - 3
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "JUEVES DE SEMANA SANTA" } )
   ENDIF

   dFecha := DMY2DATE( nDiaSS, nMesSS, nAnoAct ) - 2
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "VIERNES DE SEMANA SANTA" } )
   ENDIF

   dFecha := DMY2DATE( 01, 05, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "DIA DE LOS TABAJADORES" } )
   ENDIF

   dFecha := DMY2DATE( 19, 07, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "DIA DE LA REVOLUCION" } )
   ENDIF

   dFecha := DMY2DATE( 14, 09, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "BATALLA DE SAN JACINTO" } )
   ENDIF

   dFecha := DMY2DATE( 15, 09, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "INDEPENDENCIA DE NICARAGUA" } )
   ENDIF

   dFecha := DMY2DATE( 08, 12, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "DIA DE LA CONCEPCION DE MARIA" } )
   ENDIF

   dFecha := DMY2DATE( 25, 12, nAnoAct )
   IF oQryFeri:Locate( {dFecha}, { "FECHA" } )
      AAdd( aFeriados, { dFecha, "DIA DE NACIMIENTO DE NIÑO JESUS" } )
   ENDIF

   IF Len( aFeriados ) > 0
      TRY
         oServer:BeginTransaction()
         FOR EACH aDia IN aFeriados
            oServer:Insert( "FERIADOS", { "FECHA", "MOTIVO", "NACIONAL", "NUM_CIUD" }, ;
                                        { aDia[1], aDia[2] , TRUE      , 0          }  )
         NEXT
         oServer:CommitTransaction()
      CATCH oError
         oServer:RollBack()
         ShowError( oError )
      END
   ENDIF

   oQryFeri:LoadQuery()

   oBrw:GoTop()
   oBrw:Refresh()
   oBrw:SetFocus()

RETURN

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Feriados_Listar()

RETURN

/*-------------------------------------------------------------------------------------------------*/
/*EOF*/
/*-------------------------------------------------------------------------------------------------*/
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1691
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Addons para Dolphin

Postby sysctrl2 » Thu Nov 07, 2013 10:39 pm

Hola Carlos, gracias por compartir,

cual es la diferencia de oServer:Query2 y oServer:Query ?
o oServer:Execute2 y oServer:Execute,

saludos. Cesar.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 971
Joined: Mon Feb 05, 2007 7:15 pm

Re: Addons para Dolphin

Postby carlos vargas » Thu Nov 07, 2013 11:11 pm

me permiten definir parametros
ejemplo
con Execute
Code: Select all  Expand view

oServer:Execute( "update tabla set campostr=" + 'Hola' + ", camponum=" + alltrim( str( 120 ) ) + " where campofecha=" + dtos( dfecha )   )
 

con Execute2
Code: Select all  Expand view

oServer:Execute2( "update tabla set campostr=%1, camponum=%2 where campofecha=%3", { 'Hola', 120, dfecha }   )
 


igual, para query y query2, lo cual es mas facil, no lo crees?

cierto que hay metodos como update e insert, pero esto me facilita a mi un poco la lectura.

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1691
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Addons para Dolphin

Postby sysctrl2 » Fri Nov 08, 2013 12:33 am

Entendido, solo es para simplificar los string !

otra forma como yo no me hago pelotas con los string es la siguiente:
Code: Select all  Expand view

#DEFINE C_SIMPLE CHR( 39 ) // comillas simples
#DEFINE c_simple CHR( 39 ) // comillas simples

cQry := "SELECT codigo,descripcion"
cQry += " FROM productos"
cQry += " WHERE codigo=" + C_SIMPLE + cstr( cCodigo ) + C_SIMPLE
cQry += " ORDER BY codigo"

oArtics := oServer:Query( cQry )
? oArtics:nRecCount
 


saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 971
Joined: Mon Feb 05, 2007 7:15 pm

Re: Addons para Dolphin

Postby Daniel Garcia-Gil » Fri Nov 08, 2013 4:56 pm

Carlos

Gracias por la idea, ya esta implementada en los fuentes de TDolphin, le añadi una caracteristica adicional a tu idea, es poder hacer el uso de hash de la misma forma como usas el array
hasta los momentos la restriccion es que todos los paramatros deben ir entre comillas, es decir, deben ser string

aqui dejo el ejemplo
Code: Select all  Expand view

//usando hash
cQuery  = "select student.student_id, student.name, grade_event.date, score.score, grade_event.category "
cQuery += "from grade_event, score, student where grade_event.date = &fecha and "
cQuery += "grade_event.event_id = score.event_id and score.student_id = student.student_id"

oQry = TDolphinQry():New( cQuery, oServer, {"fecha" => "'2008-09-23'" } )

//usando array
cQuery  = "select student.student_id, student.name, grade_event.date, score.score, grade_event.category "
cQuery += "from grade_event, score, student where grade_event.date = &1 and "
cQuery += "grade_event.event_id = score.event_id and score.student_id = student.student_id"

oQry = TDolphinQry():New( cQuery, oServer, {"'2008-09-23'" } )
 


descargar ultima version de tdolphin https://bitbucket.org/danielgarciagil/tdolphin/get/master.zip
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Addons para Dolphin

Postby carlos vargas » Fri Nov 08, 2013 5:25 pm

daniel, gracias.

has visto esto?

viewtopic.php?f=6&t=27610

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1691
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 44 guests