Page 3 of 5

Re: TDolphin Clase para manejar MySql

PostPosted: Fri Sep 24, 2010 6:45 pm
by Daniel Garcia-Gil
Hola

El punto es que no se que verisones del compilador estes usando tanto para PRG como para C, si usas borland (5.5 / 5.582), microsoft( 2003, 2008, 2010), 32 o 64 bits, o si trabajas en Mac, por eso dejo a la libre desicion del usuario construir la libreria
En el blog dejo los links para descargar harbour, xharbour, disponibles para borland y MS (32/64) y la dll de Mysql con la respectiva libreria de importacion

Aqui explico como descargar los fuentes, http://tdolphin.blogspot.com/2010/06/comanzando-starting.html
Construir la libreria para borland: http://tdolphin.blogspot.com/2010/07/construir-libreria-build-lib.html
Construir la libreria para MS (32/64):http://tdolphin.blogspot.com/2010/08/tdolphin-para-microsoft-3264-bits.html

Re: TDolphin Clase para manejar MySql

PostPosted: Fri Sep 24, 2010 9:55 pm
by sysctrl2
Daniel , estoy haciendo pruebas con el method seek
espero salga la imagen que quiero mostrarte:

http://img237.imageshack.us/img237/5712/dibujo1g.jpg

te dejo el codigo completito, utilizand el CONEECT.INI de SAMPLES de dolphin.

Code: Select all  Expand view
#include <Fivewin.ch>
#include "hbcompat.ch"
#include "tdolphin.ch"
#include <XBrowse.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )

* ---------------------------------------------------------*
* testfw3.prg                                              *
* ejemplo que muestra el uso de busquedas con tdolphin     *
* y xbrowse
* by, Cesar Cortes Cruz                                    *
* sin +- fivewin es mejor
* ---------------------------------------------------------*

Function Main()
   
   WITH OBJECT SysCtrl()      
      :New()
   END OBJECT        
   
return nil

CLASS SysCtrl
   DATA oBox, oGrid, oMain, oCon, oQry AS OBJECT
   DATA cUser INIT ":: Usuario ::"
   METHOD New()
   METHOD Conecta()
   METHOD CreaPrueba()
   METHOD MakeDialogo()
   METHOD AddReg()
   method MakeBottoms()
   method Dlg1()
   METHOD ChkFolio( oGet, cNo_folio, oDlg )
     
ENDCLASS

METHOD New() CLASS SysCtrl
   
   //Activated Case sensitive
   D_SetCaseSensitive( .t. )
   
   * ----------------------------------- *
   * conectamos con el servidor          *
   * ----------------------------------- *
   IF ( ::oCon := ::Conecta() ) == NIL
      msgstop('No se pudo realizar una conecxion con el servidor', ::cUser )
      RETURN NIL
   ENDIF      
   
   * -------------------------------------------- *
   * si tuvimos exito con la conexion             *
   * creamos la tabla PRUEBA para nuestro ejemplo *
   * -------------------------------------------- *  
   ::CreaPrueba()
   
   * -------------------------------------------- *
   * creamos el dialogo para nuestros controles   *
   * -------------------------------------------- *      
   ::MakeDialogo()
   
   * -------------------------------------------- *
   * cerramos la conexion                         *
   * -------------------------------------------- *
   
   ::oCon:End()
   
return Self

METHOD Conecta() CLASS SysCtrl
   LOCAL hIni      := HB_ReadIni( ".\connect.ini" )
   LOCAL oServer   := NIL
   LOCAL cServer   := hIni["mysql"]["host"],;
         cUser     := hIni["mysql"]["user"],;
         cPassword := hIni["mysql"]["psw"],;
         nPort     := val(hIni["mysql"]["port"]), ;
         cDBName   := hIni["mysql"]["dbname"], ;
         nFlags    := val(hIni["mysql"]["flags"])
   LOCAL oErr
   
   TRY
   
      oServer = TDolphinSrv():New( cServer, ;
                                cUser, ;
                                cPassword, ;
                                nPort,;
                                nFlags,;
                                cDbName)
   CATCH oErr
     RETURN NIL
   END
   
RETURN oServer

METHOD CreaPrueba() CLASS SysCtrl
   local cQry
   
   * -------------------------------------------- *
   * creamos la tabla PRUEBA                      *
   * -------------------------------------------- *

   cQry := "CREATE TABLE IF NOT EXISTS prueba ( "
   cQry += "cliente_id INT UNSIGNED NOT NULL AUTO_INCREMENT,"  
   cQry += "no_folio             varchar(10) default ' ', "  
   cQry += "no_suscriptor        varchar(10) default ' ', "
   cQry += "fecha        date NOT NULL, "
   cQry += "nombre     varchar(60) default ' ', "
   
   cQry += "PRIMARY KEY (cliente_id)"
   cQry += ") ENGINE = InnoDB"
   
   ::oCon:Execute( cQry )  
   
Return nil

METHOD MakeDialogo() CLASS SysCtrl
   local oSelf := Self
   local nBottom, nRight
   * --------------------------------------- *
   * creamos nuestro query                   *
   * ordenado por el campo NO_FOLIO          *
   * --------------------------------------- *
   
   ::oQry = ::oCon:Query( "SELECT * FROM prueba ORDER BY no_folio" )
   
   ::oQry:zap() && limpiamos la tabla.
   
   * --------------------------------------- *
   * agregamos unos registros                *
   * a la tabla PRUEBA                       *
   * --------------------------------------- *
   ::AddReg()
   
   
   DEFINE DIALOG ::oBox SIZE 700,300
   ::oBox:cTitle := 'BUSQUEDAS CON TDOLPHIN'
   
   ::MakeBottoms()
   
   // nBottom := (::oBox:nBottom / 2) - 100
   nRight  := (::oBox:nRight / 2 )  

   @ 0, 0 XBROWSE ::oGrid
   
   ::oGrid:nTop    := 00
   ::oGrid:nLeft   := 100+2
   ::oGrid:nBottom := 150
   ::oGrid:nRight  := nRight  
   
   SetDolphin( ::oGrid, ::oQry )
     
   ::oGrid:CreateFromCode()
 
   ::oBox:oClient = ::oGrid
   
   ACTIVATE DIALOG ::oBox CENTERED
   
   
   * ---------------------------------------- *
   * cerramos el query                        *
   * -----------------------------------------*
   ::oQry:End()  
RETURN NIL

METHOD AddReg() CLASS SysCtrl
   
   * ----------------------------------------- *
   * damos de alta 5 registros                 *
   * ----------------------------------------- *
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '303030'
   ::oQry:no_suscriptor := "200"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 1"
   ::oQry:save()
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '404040'
   ::oQry:no_suscriptor := "300"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 2"
   ::oQry:save()  
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '505050'
   ::oQry:no_suscriptor := "400"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 4"
   ::oQry:save()  
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '2000S'
   ::oQry:no_suscriptor := "500"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 5"
   ::oQry:save()      
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '606060'
   ::oQry:no_suscriptor := "600"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "CESAR CORTES CRUZ"
   ::oQry:save()            
   
   
return nil


method MakeBottoms() CLASS SysCtrl
   local oBtn := array(5)
   
   @ 10, 10 BUTTON oBtn[1] PROMPT "METHOD Seek() "  SIZE 70, 12 OF ::oBox ;
       ACTION (  ::Dlg1()     ) PIXEL

   @ 14, 20 BUTTON oBtn[2] PROMPT "&Regresar" SIZE 40, 12 OF ::oBox  ACTION ( ::oBox:end() ) CANCEL
   
return nil


method Dlg1() CLASS SysCtrl
   local oDlg
   local oGet := array(10)
   local cNo_folio := space(10)
   local oBtn
   DEFINE DIALOG oDlg title 'BUSCAR POR EL CAMPO ( NO_FOLIO )'
   
   @ 10, 10 SAY "No. Folio : " OF oDlg pixel
   @ 10, 70 GET oGet[ 1 ] VAR cNo_folio of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE ;
   valid ::ChkFolio( @oGet, @cNo_folio, oDlg )
   
   @ 50, 50 BUTTON oBtn PROMPT "Aceptar"  SIZE 60, 12 OF oDlg ;
       ACTION (  oDlg:end()     ) PIXEL  
   
   ACTIVATE DIALOG oDlg CENTERED
   
return nil


METHOD ChkFolio( oGet, cNo_folio, oDlg ) CLASS SysCtrl
   LOCAL nSeek
   
   
   nSeek = ::oQry:Seek( cNo_folio , 2 )
   
   if nSeek == 0
       ? "No existe"
   else
       ? ::oQry:no_folio, ::oQry:nombre
   endif
   
   oDlg:setfocus()
   
RETURN .T.




#include "setbrw.prg"




saludos..

Re: TDolphin Clase para manejar MySql

PostPosted: Fri Sep 24, 2010 10:01 pm
by sysctrl2
Image

Uploaded with ImageShack.us


ek query, esta ordenado por la columna NO_FOLIO , pero el seek me devuelve 0

saludos..

Re: TDolphin Clase para manejar MySql

PostPosted: Fri Sep 24, 2010 10:05 pm
by sysctrl2
Daniel estoy seguro que algo estoy haciendo mal,
el registro que estoy buscando esta en la lista,
pero al buscarlo no lo encuentra.

Gracias por tu apollo.

saludos.

Re: TDolphin Clase para manejar MySql

PostPosted: Sat Sep 25, 2010 1:10 am
by Daniel Garcia-Gil
Cesar

Puedes usarlo de esta forma

nSeek = ::oQry:Seek( cNo_folio, 2, , , .T.) //lSoft := .T.

pero hice una muy pequeña correccion a la clase, efectivamente algo estaba fallando en la busqueda exacta ( lSoft := .F. )

Gracias por el feedback, el ejemplo esta muy claro y efectivo para exponer el problema (asi debe ser)

Re: TDolphin Clase para manejar MySql

PostPosted: Sun Sep 26, 2010 7:59 pm
by Kleyber
Hola Daniel,

He bajado la clase y te pregunto: puedo crear la lib con una version mas antigua de xHarbour como la 1.1.0? O desde que versión de xHarbour puedo generarla?

Saludos,

Re: TDolphin Clase para manejar MySql

PostPosted: Sun Sep 26, 2010 8:11 pm
by Daniel Garcia-Gil
Kleyber

Podrias intentarlo, solo he usado versiones desde junio hasta la fecha

Re: TDolphin Clase para manejar MySql

PostPosted: Mon Sep 27, 2010 4:51 pm
by sysctrl2
Holas Daniel, ahora si ya funciona,
vamos a seguir probando, con los demas methodos, locate y find, cualquier problemita
aqui lo estaremos reportando.
Seria bueno que dejaras TESTFW3.PRG en samples para que los demas colegas
que aun seguimos con DBF demos el salto a sql con tdholphin.

saludos..

Re: METHOD Seek, locate, find TDOLPHIN y FWH

PostPosted: Tue Sep 28, 2010 6:22 pm
by sysctrl2
TestFw3.prg
ejemplo que muestra el uso de los metodos, seek, locate, find, con tdolphin,
partiendo desde un xBrowse y utilizando un mismo QUERY para todo.

Tambien se muestra como agregar o modificar datos a nuestra tabla PRUEBA,
usando un control GET y el method VALID, para evitar la duplicidad de datos,

adjunto el codigo completito usando connect.ini de la carpeta SAMPLES de tdolphin.

compilar con: buildx testfw3

saludos.

Code: Select all  Expand view
#include <Fivewin.ch>
#include <hbcompat.ch>
#include <tdolphin.ch>
#include <XBrowse.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )

* ---------------------------------------------------------*
* testfw3.prg                                              *
* uso de methods Seek(), Locate(), Find(), Save()          *
* con tDolphin y  xbrowse                                  *
*                                                          *
* by, Cesar Cortes Cruz                                    *
* sin +- fivewin es mejor
* ---------------------------------------------------------*

Function Main()
   
   WITH OBJECT SysCtrl()      
      :New()
   END OBJECT        
   
return nil

CLASS SysCtrl
   DATA oBox, oGrid, oMain, oCon, oQry AS OBJECT
   DATA cUser INIT ":: Usuario ::"
   METHOD New()
   METHOD Conecta()
   METHOD CreaPrueba()
   METHOD MakeDialogo()
   METHOD AddReg()
   method MakeBottoms()
   method Dlg1()
   METHOD ChkFolio( oGet, cNo_folio, oDlg )
   METHOD Guardar()
   method Dlg2()
   METHOD ChkFolio2( oGet, cNo_folio, oDlg )
   method Dlg3()
   METHOD ChkFolio3( oGet, cNo_folio, oDlg )      
ENDCLASS

METHOD New() CLASS SysCtrl
   
   SET( _SET_DATEFORMAT,"dd/mm/yyyy" )
   
   //Activated Case sensitive
   D_SetCaseSensitive( .t. )
   
   Set_MyLang( "esp" ) && seleccionamos el lenguaje
   
   * ----------------------------------- *
   * conectamos con el servidor          *
   * ----------------------------------- *
   IF ( ::oCon := ::Conecta() ) == NIL
      msgstop('No se pudo realizar una conecxion con el servidor', ::cUser )
      RETURN NIL
   ENDIF      
   
   * -------------------------------------------- *
   * si tuvimos exito con la conexion             *
   * creamos la tabla PRUEBA para nuestro ejemplo *
   * -------------------------------------------- *  
   ::CreaPrueba()
   
   * -------------------------------------------- *
   * creamos el dialogo para nuestros controles   *
   * -------------------------------------------- *      
   ::MakeDialogo()
   
   * -------------------------------------------- *
   * cerramos la conexion                         *
   * -------------------------------------------- *
   
   ::oCon:End()
   
return Self

METHOD Conecta() CLASS SysCtrl
   LOCAL hIni      := HB_ReadIni( ".\connect.ini" )
   LOCAL oServer   := NIL
   LOCAL cServer   := hIni["mysql"]["host"],;
         cUser     := hIni["mysql"]["user"],;
         cPassword := hIni["mysql"]["psw"],;
         nPort     := val(hIni["mysql"]["port"]), ;
         cDBName   := hIni["mysql"]["dbname"], ;
         nFlags    := val(hIni["mysql"]["flags"])
   LOCAL oErr
   
   TRY
   
      oServer = TDolphinSrv():New( cServer, ;
                                cUser, ;
                                cPassword, ;
                                nPort,;
                                nFlags,;
                                cDbName)
   CATCH oErr
     RETURN NIL
   END
   
RETURN oServer

METHOD CreaPrueba() CLASS SysCtrl
   local cQry
   
   * -------------------------------------------- *
   * creamos la tabla PRUEBA                      *
   * -------------------------------------------- *

   cQry := "CREATE TABLE IF NOT EXISTS prueba ( "
   cQry += "cliente_id INT UNSIGNED NOT NULL AUTO_INCREMENT,"  
   cQry += "no_folio             varchar(10) default ' ', "  
   cQry += "no_suscriptor        varchar(10) default ' ', "
   cQry += "fecha        date NOT NULL, "
   cQry += "nombre     varchar(60) default ' ', "
   
   cQry += "PRIMARY KEY (cliente_id)"
   cQry += ") ENGINE = InnoDB"
   
   ::oCon:Execute( cQry )  
   
Return nil

METHOD MakeDialogo() CLASS SysCtrl
   local oSelf := Self
   local nBottom, nRight
   * --------------------------------------- *
   * creamos nuestro query                   *
   * ordenado por el campo NO_FOLIO          *
   * --------------------------------------- *
   
   ::oQry = ::oCon:Query( "SELECT * FROM prueba ORDER BY no_folio" )
   
   ::oQry:zap() && limpiamos la tabla.
   
   * --------------------------------------- *
   * agregamos unos registros                *
   * a la tabla PRUEBA                       *
   * --------------------------------------- *
   ::AddReg()
   
   
   DEFINE DIALOG ::oBox SIZE 700,300
   ::oBox:cTitle := 'BUSQUEDAS CON TDOLPHIN'
   
   ::MakeBottoms()
   
   // nBottom := (::oBox:nBottom / 2) - 100
   nRight  := (::oBox:nRight / 2 )  

   @ 0, 0 XBROWSE ::oGrid
   
   ::oGrid:nTop    := 00
   ::oGrid:nLeft   := 100+2
   ::oGrid:nBottom := 150
   ::oGrid:nRight  := nRight  
   
   SetDolphin( ::oGrid, ::oQry )
     
   ::oGrid:CreateFromCode()
 
   ::oBox:oClient = ::oGrid
   
   ACTIVATE DIALOG ::oBox CENTERED
   
   
   * ---------------------------------------- *
   * cerramos el query                        *
   * -----------------------------------------*
   ::oQry:End()  
RETURN NIL

METHOD AddReg() CLASS SysCtrl
   
   * ----------------------------------------- *
   * damos de alta 5 registros                 *
   * ----------------------------------------- *
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '303030'
   ::oQry:no_suscriptor := "200"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 1"
   ::oQry:save()
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '404040'
   ::oQry:no_suscriptor := "300"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 2"
   ::oQry:save()  
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '505050'
   ::oQry:no_suscriptor := "400"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 4"
   ::oQry:save()  
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '2000S'
   ::oQry:no_suscriptor := "500"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "NOMBRE 5"
   ::oQry:save()      
   
   ::oQry:GetBlankRow( .F. )  
   ::oQry:no_folio      := '606060'
   ::oQry:no_suscriptor := "600"
   ::oQry:fecha         := date()
   ::oQry:nombre        := "CESAR CORTES CRUZ"
   ::oQry:save()            
   
   
return nil

method MakeBottoms() CLASS SysCtrl
   local oBtn := array(5)
   
   @ 10, 10 BUTTON oBtn[1] PROMPT "METHOD Seek() "  SIZE 70, 12 OF ::oBox ;
       ACTION (  ::Dlg1()     ) PIXEL
       
   @ 30, 10 BUTTON oBtn[2] PROMPT "METHOD Locate() "  SIZE 70, 12 OF ::oBox ;
       ACTION (  ::Dlg2()     ) PIXEL
       
   @ 50, 10 BUTTON oBtn[3] PROMPT "METHOD Find() "  SIZE 70, 12 OF ::oBox ;
       ACTION (  ::Dlg3()     ) PIXEL
       
   @ 70, 10 BUTTON oBtn[4] PROMPT "&Exit" SIZE 70, 12 OF ::oBox  ACTION ( ::oBox:end() ) CANCEL PIXEL
   
return nil

method Dlg1() CLASS SysCtrl
   local oDlg
   local oGet := array(10)
   local cNo_folio := space(10)
   local oBtn
   
   
   && creamos un registro en blanco
   ::oQry:GetBlankRow( .F. )
   
   DEFINE DIALOG oDlg SIZE 450,200  title 'BUSCAR POR EL CAMPO ( NO_FOLIO ) METHOD SEEK()'
   
   @ 10, 10 SAY "No. Folio : " OF oDlg pixel
   @ 10, 70 GET oGet[ 1 ] VAR cNo_folio of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE ;
   valid ::ChkFolio( @oGet, @cNo_folio, oDlg )
   
   @ 20, 10 SAY "No. Suscriptor : " OF oDlg pixel
   @ 20, 70 GET oGet[ 2 ] VAR ::oQry:no_suscriptor of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 30, 10 SAY "Fecha : " OF oDlg pixel
   @ 30, 70 GET oGet[ 3 ] VAR ::oQry:fecha of oDlg SIZE 40, 10  PICTURE "d" PIXEL UPDATE
   
   @ 40, 10 SAY "Nombre : " OF oDlg pixel
   @ 40, 70 GET oGet[ 4 ] VAR ::oQry:nombre of oDlg SIZE 150, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 70, 60 BUTTON oBtn PROMPT "Aceptar"  SIZE 60, 12 OF oDlg ;
       ACTION ( ::Guardar() ,oDlg:end()     ) PIXEL  
   
   ACTIVATE DIALOG oDlg CENTERED
   
return nil


* --------------------------------------------------- *
* dependiendo de la busqueda si no existe             *
* lo damos de alta en caso contrario                  *
* solo lo editamos                                    *
* --------------------------------------------------- *


METHOD Guardar() CLASS SysCtrl
   local oWait
   WaitOn(space(40), @oWait)
   oWait:say(1,1, 'Guardando datos')
   oWait:say(3,1, 'espere un momento ...')
   oWait:say(5,1, 'Gracias ...')
   
   ::oQry:save()
   
   WaitOff(@oWait)
   
   ::oGrid:Refresh()
   ::oGrid:Setfocus()
   ::oBox:Update()
   
   
return nil


METHOD ChkFolio( oGet, cNo_folio, oDlg ) CLASS SysCtrl
   LOCAL nSeek
   
   nSeek = ::oQry:Seek( cNo_folio, 2, , , .T.) // lSoft := .T.
   
   if nSeek == 0
      msginfo('SI NO EXISTE' + chr(13) +;
      'entonces lo AGREGAMOS', 'Usuario ...'      )
      ::oQry:GetBlankRow( .F. )
      ::oQry:no_folio := cNo_folio
      ::oQry:fecha := date()
      ::oQry:lAppend := .t.
   else
      msginfo('El registro YA EXISTE' + chr(13) +;
      'se lo presentamos al usuario' + chr(13) +;
      'Para una posible EDICION', 'Usuario ...'      )  
      ::oQry:lAppend := .f.
   endif
   
   oDlg:update()
   
RETURN .T.



* ---------------------------------------------------- *
* buscando con el method LOCATE()                      *
* ---------------------------------------------------- *

method Dlg2() CLASS SysCtrl
   local oDlg
   local oGet := array(10)
   local cNo_folio := space(10)
   local oBtn
   
   
   && creamos un registro en blanco
   ::oQry:GetBlankRow( .F. )
   
   DEFINE DIALOG oDlg SIZE 450,200  title 'BUSCAR POR EL CAMPO ( NO_FOLIO ) METHOD LOCATE()'
   
   @ 10, 10 SAY "No. Folio : " OF oDlg pixel
   @ 10, 70 GET oGet[ 1 ] VAR cNo_folio of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE ;
   valid ::ChkFolio2( @oGet, @cNo_folio, oDlg )
   
   @ 20, 10 SAY "No. Suscriptor : " OF oDlg pixel
   @ 20, 70 GET oGet[ 2 ] VAR ::oQry:no_suscriptor of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 30, 10 SAY "Fecha : " OF oDlg pixel
   @ 30, 70 GET oGet[ 3 ] VAR ::oQry:fecha of oDlg SIZE 40, 10  PICTURE "d" PIXEL UPDATE
   
   @ 40, 10 SAY "Nombre : " OF oDlg pixel
   @ 40, 70 GET oGet[ 4 ] VAR ::oQry:nombre of oDlg SIZE 150, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 70, 60 BUTTON oBtn PROMPT "Aceptar"  SIZE 60, 12 OF oDlg ;
       ACTION ( ::Guardar() ,oDlg:end()     ) PIXEL  
   
   ACTIVATE DIALOG oDlg CENTERED
   
return nil

METHOD ChkFolio2( oGet, cNo_folio, oDlg ) CLASS SysCtrl
   LOCAL nSeek
   
   nSeek = ::oQry:Locate( { cNo_folio }, {"no_folio"} )
   
   if nSeek == 0
      msginfo('SI NO EXISTE' + chr(13) +;
      'entonces lo AGREGAMOS', 'Usuario ...'      )
      ::oQry:GetBlankRow( .F. )
      ::oQry:no_folio := cNo_folio
      ::oQry:fecha := date()
      ::oQry:lAppend := .t.
   else
      msginfo('El registro YA EXISTE' + chr(13) +;
      'se lo presentamos al usuario' + chr(13) +;
      'Para una posible EDICION', 'Usuario ...'      )  
      ::oQry:lAppend := .f.
   endif
   
   oDlg:update()
   
RETURN .T.



* ---------------------------------------------------- *
* buscando con el method FIND()                        *
* ---------------------------------------------------- *

method Dlg3() CLASS SysCtrl
   local oDlg
   local oGet := array(10)
   local cNo_folio := space(10)
   local oBtn
   
   
   && creamos un registro en blanco
   ::oQry:GetBlankRow( .F. )
   
   DEFINE DIALOG oDlg SIZE 450,200  title 'BUSCAR POR EL CAMPO ( NO_FOLIO ) METHOD FIND()'
   
   @ 10, 10 SAY "No. Folio : " OF oDlg pixel
   @ 10, 70 GET oGet[ 1 ] VAR cNo_folio of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE ;
   valid ::ChkFolio3( @oGet, @cNo_folio, oDlg )
   
   @ 20, 10 SAY "No. Suscriptor : " OF oDlg pixel
   @ 20, 70 GET oGet[ 2 ] VAR ::oQry:no_suscriptor of oDlg SIZE 60, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 30, 10 SAY "Fecha : " OF oDlg pixel
   @ 30, 70 GET oGet[ 3 ] VAR ::oQry:fecha of oDlg SIZE 40, 10  PICTURE "d" PIXEL UPDATE
   
   @ 40, 10 SAY "Nombre : " OF oDlg pixel
   @ 40, 70 GET oGet[ 4 ] VAR ::oQry:nombre of oDlg SIZE 150, 10  PICTURE "@!k" PIXEL UPDATE
   
   @ 70, 60 BUTTON oBtn PROMPT "Aceptar"  SIZE 60, 12 OF oDlg ;
       ACTION ( ::Guardar() ,oDlg:end()     ) PIXEL  
   
   ACTIVATE DIALOG oDlg CENTERED
   
return nil

METHOD ChkFolio3( oGet, cNo_folio, oDlg ) CLASS SysCtrl
   LOCAL nSeek
   
   nSeek = ::oQry:Find( { cNo_folio }, {"no_folio"} )
   
   if nSeek == 0
      msginfo('SI NO EXISTE' + chr(13) +;
      'entonces lo AGREGAMOS', 'Usuario ...'      )
      ::oQry:GetBlankRow( .F. )
      ::oQry:no_folio := cNo_folio
      ::oQry:fecha := date()
      ::oQry:lAppend := .t.
   else
      msginfo('El registro YA EXISTE' + chr(13) +;
      'se lo presentamos al usuario' + chr(13) +;
      'Para una posible EDICION', 'Usuario ...'      )  
      ::oQry:lAppend := .f.
   endif
   
   oDlg:update()
   
RETURN .T.




* -------------------------------------------------- *
* FUNCIONES ADICIONALES                              *
* -------------------------------------------------- *

function waitOn( cCaption, oWait, cTitle )  //simula un waiton de grump
   LOCAL nWidth
   local lVal := .t.
   local oBrush

   LOCAL   bAction  := { || .t. }
   default cTitle := "Usuario, un momento por favor"
   DEFINE BRUSH oBrush COLOR RGB( 192, 216, 255 )   //rosa


   IF cCaption == NIL
      DEFINE DIALOG oWait ;
         FROM 0,0 TO 12, Len( cTitle ) + 4 ;
         STYLE nOr( DS_MODALFRAME, WS_POPUP ) BRUSH oBrush TRANSPARENT
   ELSE
      DEFINE DIALOG oWait ;
         FROM 0,0 TO 12, Max( Len( cCaption ), Len( cTitle ) ) + 4 ;
         TITLE cTitle ;
         STYLE DS_MODALFRAME BRUSH oBrush TRANSPARENT
   ENDIF

   oWait:cMsg   := cCaption

   nWidth := oWait:nRight - oWait:nLeft

   //@ 01, 1 BUTTON " &Cancelar " OF oWait SIZE 60, 12 ;
   //ACTION ( lVal := .f., oWait:End() )

   ACTIVATE DIALOG oWait CENTER ;
      ON PAINT oWait:Say( 1, 0, xPadC( oWait:cMsg, nWidth ) ) ;
      NOWAIT
   sysRefresh()
return (lVal)

function WaitOff( oWait )
   IF valtype(oWait) <> 'U'  /* waiton has to be called first! */
      oWait:end()
      oWait := NIL
   ENDIF
   sysRefresh()
RETURN NIL






#include "setbrw.prg"

Re: TDolphin Clase para manejar MySql

PostPosted: Tue Sep 28, 2010 7:44 pm
by Daniel Garcia-Gil
Gracias Cesar

Subido al SVN de Dolphin

Re: TDolphin Clase para manejar MySql

PostPosted: Tue Sep 28, 2010 8:04 pm
by sysctrl2
excelente Daniel,
vamos avanzando ..

gracias..

BUSQUEDA INCREMENTAL CON TDOLPHIN

PostPosted: Sat Oct 02, 2010 12:53 am
by sysctrl2
Colegas, alguien tiene algun ejemplo de busqueda incremental con tedolphin y xbrowse ?

saludos..

Re: TDolphin Clase para manejar MySql

PostPosted: Sat Oct 02, 2010 2:57 pm
by Raymundo Islas M.
Cesar,

No he tenido oportunidad de probar TDolphin para ver como lo maneja, pero normalmente ya que tienes tu recordset creado y con datos, solo es usar alguna de las propiedades del mismo para que te muestre lo que quieras, en este caso seria : filter

oRS:filter := "xcampo LIKE " + " " 'xvalor' " <-- para filtrar ojo con las comillas dobles y las sencillas !
oRS:filter := adFilterNone <-- Para limpiar el filtrado


Para no complicarme la vida con las comillas, hice una funcion que te regresa X valor ya con los apostrofes incluidos, y el manejo se facilita :

oRS:filter := "xcampo LIKE " + myfunc( xvalor ) y me hace lo mismo que la linea anterior similar


Saludos

Re: TDolphin Clase para manejar MySql

PostPosted: Sat Oct 02, 2010 3:52 pm
by Daniel Garcia-Gil
Cesar

La busqueda incremental la hace automaticamente dolphin cuando creas el browse, siempre y cuando este ordenada la columna

Puedes revisar testfw2.prg

te recuerdo que en la version actual de fivewin esta soportado nativamente Dolphin para el xbrowse

Re: TDolphin Clase para manejar MySql

PostPosted: Sat Oct 02, 2010 6:27 pm
by sysctrl2
Gracias Daniel,
efectivamente, el ejemplo testfw2.prg funciona la busqueda incremental,

pero si compilas TESTFW3.PRG que se publico reciente mente y que ya esta en SAMPLES

la qry esta ordenado por el campo NO_FOLIO y no hace la busqueda,

tambien intente cambiar el orden por ' ORDER BY NOMBRE ASC '

pero tampoco hace la busqueda, que falta ?

sera que debo de crear el indice en la tabla previamente?

saludos