FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour DBCOMBO CON QUERY MYSQL
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
DBCOMBO CON QUERY MYSQL
Posted: Wed Apr 02, 2014 04:39 AM

Saludos, me gustaria saber si se puede usar un DBCOMBO con un Query de MYSQL asi como se usa con una DBF, lo intente pero segun lo que vi en la clase, se hace con DBF o con ARRAY, si alguien tiene un sample, estare agradecido, gracias y saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: DBCOMBO CON QUERY MYSQL
Posted: Wed Apr 02, 2014 05:05 PM
Jose Luis, mira se esto te sirve de algo;
Code (fw): Select all Collapse
oCatalogo:= oServer:Query( "SELECT * FROM catalogo ORDER BY codicont" )

oCatalogo:Gotop()
If oCatalogo:LastRec() != 0
   oQuery:= oServer:Query( "SELECT * FROM catalogo WHERE CHAR_LENGTH(TRIM(codicont)) = '"+cvaltochar(LEN(NIV1))+"' ORDER BY codicont" )
   While !oQuery:eof()
     aadd(cItems,alltrim(oQuery:Codicont)+"   "+oQuery:nombre)
     oQuery:Skip()
   Enddo
   oQuery:End()
Else
   MsgInfo("No hay registros en el catalogo")
Endif

  REDEFINE ComboBox oCbx VAR cVar ID 109 OF oDlg ITEMS cItems ;
          ON CHANGE ( oCatalogo:=oServer:Query("SELECT * FROM catalogo WHERE codicont LIKE '"+substr(cVar,1,len(NIV1))+"%' ORDER BY codicont;") ,;
                      oLbx:SetMySql(oCatalogo,.f.),;
                      oCatalogo:Refresh(),; 
                      oLbx:Refresh() )

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: DBCOMBO CON QUERY MYSQL
Posted: Thu Apr 03, 2014 03:43 AM

Francisco, gracias por responder, pero lo que me dices es con COMBOBOX que usa un solo campo y lo que quiero es con DBCOMBO uso 2 campo, 1 que es lo qe muestro y otro que es lo que voy a guardar en mi tabla, ejemplo: codigo de producto y nombre producto, con DBCOMBO puedo mostrar la lista de nombres y cuando guardo en mi tabla, solo guardo el codigo. He manejado el DBCOMBO con 2 array y funciona de maravilla, cuando se usa con DBF funciona como quisiera que se usara con QUERY, gracias, saludos... :shock:

REDEFINE DBCOMBO aGetFP[9] VAR aVarFP[11] ID 109 OF oDlgFP UPDATE ; // BANCOS EMPRESA/NACIONALES
ITEMS aCtasBcos1 ; // LO QUE GUARDARE(codigo)
LIST aCtasBcos2 ; // LO QUE MOSTRARE AL USUARIO(nombre)
ON CHANGE( IF( aGetFP[9]:nAt > 0, aVarFP[7] := aCtasBcos2[aGetFP[9]:nAt], ) ) ; // TOMO NOMBRE BCO.
WHEN ( aVarFP[10] <> 1 ) // DIFERENTE A EFECTIVO

Un ejemplo cn array...

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 23
Joined: Thu Dec 10, 2009 06:07 AM
Re: DBCOMBO CON QUERY MYSQL
Posted: Thu Apr 03, 2014 04:17 AM

Prueba modificando la clase:

METHOD Fill() CLASS TDBCombo

// Refill aItems and aList from cAlias->cFldItem and cAlias->cFldList

LOCAL nOldRecNo
LOCAL nItem, nList

::aItems := {}
::aList := {}

IF ! HB_IsObject( ::cAlias )

IF ::cAlias == ""
* IF Empty( ::cAlias )
// There's no workarea defined, so do nothing.
RETURN NIL
END IF

IF SELECT( ::cAlias ) == 0
MsgAlert( "TDBCombo:Fill() - Alias '" + ::cAlias + "' does not exist." )
RETURN NIL
END IF

  • ::aItems := {} && jc 27/08/2013
  • ::aList := {} && jc 27/08/2013

IF (nItem := (::cAlias)->(FIELDPOS( ::cFldItem ))) > 0
IF (nList := (::cAlias)->(FIELDPOS( ::cFldList ))) > 0

     nOldRecNo := (::cAlias)-&gt;(RECNO())

     // Make first record blank (so you can have an empty field)
     (::cAlias)-&gt;(DBGOBOTTOM())
     (::cAlias)-&gt;(DBSKIP())
     AADD( ::aItems, (::cAlias)-&gt;(FIELDGET( nItem )) )
     AADD( ::aList, (::cAlias)-&gt;(FIELDGET( nList )) )

     (::cAlias)-&gt;(DBGOTOP())

     DO WHILE ! (::cAlias)-&gt;(EOF())
        AADD( ::aItems, (::cAlias)-&gt;(FIELDGET( nItem )) )
        AADD( ::aList, (::cAlias)-&gt;(FIELDGET( nList )) )
        (::cAlias)-&gt;(DBSKIP())
     ENDDO

     (::cAlias)-&gt;(DBGOTO( nOldRecNo ))

  ELSE
     msgAlert(&quot;TDBCombo:Fill() - Fieldname &quot;+::cFldList+&quot; not found.&quot;)
  ENDIF

ENDIF

ELSE

    ::aItems := {}
    ::aList := {}
    IF (nItem := ::cAlias:FIELDPOS( AllTrim(::cFldItem) )) &gt; 0
        IF (nList := ::cAlias:FIELDPOS( AllTrim(::cFldList) )) &gt; 0

            nOldRecNo := ::cAlias:RECNO()

            // Make first record blank (so you can have an empty field)
            ::cAlias:GOBOTTOM()
            ::cAlias:SKIP()
            AADD( ::aItems, ::cAlias:FIELDGET( nItem ) )
            AADD( ::aList, ::cAlias:FIELDGET( nList ) )

            ::cAlias:GOTOP()

            DO WHILE ! ::cAlias:EOF()
        AADD( ::aItems, ::cAlias:FIELDGET( nItem ) )
        AADD( ::aList, ::cAlias:FIELDGET( nList ) )
        ::cAlias:SKIP()
            ENDDO

            ::cAlias:GOTO( nOldRecNo )

        ELSE
            msgAlert(&quot;TDBCombo:Fill() - Fieldname &quot;+::cFldList+&quot; not found.&quot;)
        ENDIF
    ENDIF


ENDIF

RETURN NIL

Saludos

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: DBCOMBO CON QUERY MYSQL
Posted: Fri Apr 04, 2014 06:24 PM
al inicio de tu programa
Code (fw): Select all Collapse
...
EXTEND CLASS TDOLPHINQRY WITH METHOD FillDbf
...

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
      IF SELECT( cAlias ) > 0
         (cAlias)->( DBCloseArea() )
      ENDIF
      lCreated   := FALSE
   END

   IF !Empty(cOldAlias)
      DBSelectArea( cOldAlias )
   ENDIF

   Eval( bOnEnd, Self )

RETURN lCreated
...


Code (fw): Select all Collapse
   TRY
      oQryClie := oServer:Query2( "SELECT NUM_CLIE, NOMBRE FROM CLIENTES WHERE NUM_RUTA=%1", { nRutaActual } )
      oQryClie:FillDBF( "CLIE", "CLIE" )  //
      oQryClie:END()
   CATCH oError
      ShowError( oError, { oQryClie } )
      RETURN
   END

ya tienes en una tabla local los datos, listo para usarse con el dbcombo2

salu2
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: DBCOMBO CON QUERY MYSQL
Posted: Sat Apr 05, 2014 02:53 AM

Ok Carlos, el detalle es que igual es como si lo hiciese con array, lo que buscaba era hacerlo en forma directa con el Query asi como se hace con la DBF, igual probare tu sugerencia, gracias, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!

Continue the discussion