Page 1 of 1
DBCOMBO CON QUERY MYSQL
Posted: Wed Apr 02, 2014 4:39 am
by joseluisysturiz
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...
Re: DBCOMBO CON QUERY MYSQL
Posted: Wed Apr 02, 2014 5:05 pm
by FranciscoA
Jose Luis, mira se esto te sirve de algo;
Code: Select all
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.
Re: DBCOMBO CON QUERY MYSQL
Posted: Thu Apr 03, 2014 3:43 am
by joseluisysturiz
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...
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...
Re: DBCOMBO CON QUERY MYSQL
Posted: Thu Apr 03, 2014 4:17 am
by jcenteno
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)->(RECNO())
// Make first record blank (so you can have an empty field)
(::cAlias)->(DBGOBOTTOM())
(::cAlias)->(DBSKIP())
AADD( ::aItems, (::cAlias)->(FIELDGET( nItem )) )
AADD( ::aList, (::cAlias)->(FIELDGET( nList )) )
(::cAlias)->(DBGOTOP())
DO WHILE ! (::cAlias)->(EOF())
AADD( ::aItems, (::cAlias)->(FIELDGET( nItem )) )
AADD( ::aList, (::cAlias)->(FIELDGET( nList )) )
(::cAlias)->(DBSKIP())
ENDDO
(::cAlias)->(DBGOTO( nOldRecNo ))
ELSE
msgAlert("TDBCombo:Fill() - Fieldname "+::cFldList+" not found.")
ENDIF
ENDIF
ELSE
::aItems := {}
::aList := {}
IF (nItem := ::cAlias:FIELDPOS( AllTrim(::cFldItem) )) > 0
IF (nList := ::cAlias:FIELDPOS( AllTrim(::cFldList) )) > 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("TDBCombo:Fill() - Fieldname "+::cFldList+" not found.")
ENDIF
ENDIF
ENDIF
RETURN NIL
Saludos
Re: DBCOMBO CON QUERY MYSQL
Posted: Fri Apr 04, 2014 6:24 pm
by carlos vargas
al inicio de tu programa
Code: Select all
...
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: Select all
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
Re: DBCOMBO CON QUERY MYSQL
Posted: Sat Apr 05, 2014 2:53 am
by joseluisysturiz
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...