TDolphin Clase para manejar MySql

User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TDolphin Clase para manejar MySql

Post 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/co ... rting.html
Construir la libreria para borland: http://tdolphin.blogspot.com/2010/07/co ... d-lib.html
Construir la libreria para MS (32/64):http://tdolphin.blogspot.com/2010/08/td ... -bits.html
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: TDolphin Clase para manejar MySql

Post 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

#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..
Cesar Cortes Cruz
SysCtrl Software
Mexico

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

Re: TDolphin Clase para manejar MySql

Post by sysctrl2 »

Image

Uploaded with ImageShack.us


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

saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

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

Re: TDolphin Clase para manejar MySql

Post 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.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TDolphin Clase para manejar MySql

Post 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)
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Kleyber
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: TDolphin Clase para manejar MySql

Post 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,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TDolphin Clase para manejar MySql

Post by Daniel Garcia-Gil »

Kleyber

Podrias intentarlo, solo he usado versiones desde junio hasta la fecha
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: TDolphin Clase para manejar MySql

Post 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..
Cesar Cortes Cruz
SysCtrl Software
Mexico

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

Re: METHOD Seek, locate, find TDOLPHIN y FWH

Post 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

#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"
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TDolphin Clase para manejar MySql

Post by Daniel Garcia-Gil »

Gracias Cesar

Subido al SVN de Dolphin
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: TDolphin Clase para manejar MySql

Post by sysctrl2 »

excelente Daniel,
vamos avanzando ..

gracias..
Cesar Cortes Cruz
SysCtrl Software
Mexico

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

BUSQUEDA INCREMENTAL CON TDOLPHIN

Post by sysctrl2 »

Colegas, alguien tiene algun ejemplo de busqueda incremental con tedolphin y xbrowse ?

saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: TDolphin Clase para manejar MySql

Post 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
FWH 10.6 + xHarbour + Borland 582
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TDolphin Clase para manejar MySql

Post 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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: TDolphin Clase para manejar MySql

Post 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
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
Post Reply