FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TDOLPHIN oCon:query( cEstructura )
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
TDOLPHIN oCon:query( cEstructura )
Posted: Thu Mar 17, 2011 11:34 PM
Holas Daniel, aqui siguiendo con las pruebas.. con TESTFW3.PRG

puedes compilar el siguiente codigo?

en el method CREAPRUEBA()
el sistema se bloquea en la linea de codigo:

::query( cQry )

pero curiosamente si lo hago con:

::Execute( cQry ) funciona bien,

segun tengo entendido que ambos codigos funcionan para los mismo,

saludos..






Code (fw): Select all Collapse
//#include <hbcompat.ch>
#include <tdolphin.ch>
#include <XBrowse.ch>
#include <Fivewin.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 := "DROP TABLE IF EXISTS prueba"
   //::execute( cQry )

   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"
   
   // ::Execute( cQry )   
   
   ::oCon:query( 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 := (::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 "
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: TDOLPHIN oCon:query( cEstructura )
Posted: Fri Mar 18, 2011 12:02 AM

Cesar

No son lo mismo....

el metodo Query espera un resultado para hacer el llenado del recorset
el metodo execute envia la sentencia y retorna TRUE/FALSE como resultado del exito de la sentencia

deberias usar Execute

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: TDOLPHIN oCon:query( solucionado )
Posted: Fri Mar 18, 2011 06:29 PM

perfecto Daniel gracias,

seguimos aprendiendo.

saludos..

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "

Continue the discussion