Consulta con DBCombo

Consulta con DBCombo

Postby TOTOVIOTTI » Thu Apr 11, 2013 12:28 pm

Amigos,
es posible en un DBCOMBO, visualizar más de un campo? Por ejemplo:

REDEFINE DBCOMBO oCom VAR mCOM ID 108 OF oDlg;
ALIAS ALUMNOS ITEMFIELD "CODIGO" LISTFIELD "NOMBRE","CODIGO" UPDATE NOBLANK o algo así?

Estuve viendo que existe el parámetro LIST, pero no sé como usarlo y si sirve para
lo que yo quiero.

Muchas gracias.
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Consulta con DBCombo

Postby TOTOVIOTTI » Thu Apr 11, 2013 7:46 pm

Alguien me podría tirar una ayudita?
Al menos para saber si se puede saber si se puede o no hacer esto...
Muchas gracias
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Consulta con DBCombo

Postby RSalazarU » Thu Apr 11, 2013 9:59 pm

Hoal Roberto:

Yo lo hago asi:

Code: Select all  Expand view
AEVAL(oCom:aList,{|cItem,nItem| oCom:aList[nItem]:=IF(EMPTY(oCtrl:aList[nItem]),SPACE(10), RTRIM(oCom:aItems[nItem]+" "+oCom:aList[nItem] ) })
 


Y si usas ADS, podrias hacer algo asi como:
Code: Select all  Expand view

   SQL_Ejecuta( "SELECT codigo,RTRIM(codigo)+' '+nombre nombre FROM sucursal WHERE movimiento=TRUE ORDER BY codigo;",,,"SQLALIAS")
 


y colocar "SQLALIAS" en el alias del DbCombo.

Atentamente,

Rolando
Cochabamba, Bolivia.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Consulta con DBCombo

Postby joseluisysturiz » Thu Apr 11, 2013 10:05 pm

Por lo entendido y puesto a prueba, solo se puede usar array de una sola dimension, los array aITEMS y aLIST deben ser del mismo tamaño, aList debe ser de tipo CHAR, en cambio aItems puede ser de tipo CHAR o NUMERICO, aList es el array con los datos a mostrar al usuario, lo que se desplegara y aItem contiene el valor o codigo asociado al valor mostrado, al usar el objeto DBCOMBO dede recurso debes asegurarte que no este configurado el SORT, es decir, desactivarlo para que pueda haber coincidencia en los valores de los array o DBF, espero haber aclarado alguna duda, saludos... :shock:

TEXTO DESDE LA CLASE DBCOMBO(dbcombo.prg)
Notes

The TDBCombo class provides a combo-box which displays one field from
a table (such as DeptName) and returns another (such as DeptID). Table can
be indexed and/or filtered, just set them before calling DBCombo.

To use dbcombo as a resource, define the resource as a combobox. Make sure the ComboBox
is not configured to sort aList, or DBCombo will not return the matching element of aItems.
Then REDEFINE the combobox control as a DBCOMBO.

aList must be character. aItems can be character or numeric.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Consulta con DBCombo

Postby TOTOVIOTTI » Fri Apr 12, 2013 6:23 pm

Gracias amigos,
hice algo parecido a lo que me dice Rolando.
Modifiqué la clase para que me permita visualizar 2 datos.
Gracias
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Consulta con DBCombo

Postby joseluisysturiz » Fri Apr 12, 2013 8:30 pm

Podrias compartir los cambios en la clase, tambien mi interesa es que muestre 2 campos al usuario, en mi casi codigo y nombre, gracias y saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Consulta con DBCombo

Postby quique » Sat Apr 13, 2013 4:30 am

Tal vez esto te sirva, pero funciona con DBFs, los valores son una combinación de los que usa combobox y twbrowse, espero no sea tan difícil entenderle, sorry, perdí el archivo que tenía con ejemplo.

Code: Select all  Expand view

#xcommand REDEFINE COMBROWSE [ <oCbx> VAR ] <cVar> ;
            [ ALIAS <cAlias> ] ;
            [ ID <nId> ] ;
            [ <dlg:OF,WINDOW,DIALOG> <oWnd> ] ;
            [ <help:HELPID, HELP ID> <nHelpId> ] ;
            [ ON CHANGE <uChange> ] ;
            [ VALID   <uValid> ] ;
            [ <color: COLOR,COLORS> <nClrText> [,<nClrBack>] ] ;
            [ <update: UPDATE> ] ;
            [ MESSAGE <cMsg> ] ;
            [ WHEN <uWhen> ] ;
            [ BITMAPS <acBitmaps> ] ;
            [ ON DRAWITEM <uBmpSelect> ] ;
            [ STYLE <nStyle> ] ;
            [ PICTURE <cPicture> ];
            [ ON EDIT CHANGE <uEChange> ] ;
            [ FIELDS <aFields,...>] ;
            [ FIELDGET <cFieldGet> ] ;
      => ;
         [ <oCbx> := ] qComBrowse():ReDefine( <nId>, bSETGET(<cVar>),;
            <cAlias>, <oWnd>, <nHelpId>, <{uValid}>, [{|Self|<uChange>}],;
            <nClrText>, <nClrBack>, <cMsg>, <.update.>, <{uWhen}>,;
            <acBitmaps>, [{|nItem|<uBmpSelect>}], <nStyle>, <cPicture>,;
            [<{uEChange}>], [{||{<aFields>}}], <{cFieldGet}> )

#xcommand @ <nRow>, <nCol> COMBROWSE [ <oCbx> VAR ] <cVar> ;
            [ ALIAS <cAlias> ] ;
            [ SIZE <nWidth>, <nHeight> ] ;
            [ <dlg:OF,WINDOW,DIALOG> <oWnd> ] ;
            [ <help:HELPID, HELP ID> <nHelpId> ] ;
            [ ON CHANGE <uChange> ] ;
            [ VALID <uValid> ] ;
            [ <color: COLOR,COLORS> <nClrText> [,<nClrBack>] ] ;
            [ <pixel: PIXEL> ] ;
            [ FONT <oFont> ] ;
            [ <update: UPDATE> ] ;
            [ MESSAGE <cMsg> ] ;
            [ WHEN <uWhen> ] ;
            [ <design: DESIGN> ] ;
            [ BITMAPS <acBitmaps> ] ;
            [ ON DRAWITEM <uBmpSelect> ] ;
            [ STYLE <nStyle> ] ;
            [ PICTURE <cPicture> ];
            [ ON EDIT CHANGE <uEChange> ] ;
            [ FIELDS <aFields,...>] ;
            [ FIELDGET <cFieldGet> ] ;
      => ;
         [ <oCbx> := ] qComBrowse():New( <nRow>, <nCol>, bSETGET(<cVar>),;
            <cAlias>, <nWidth>, <nHeight>, <oWnd>, <nHelpId>,;
            [{|Self|<uChange>}], <{uValid}>, <nClrText>, <nClrBack>,;
            <.pixel.>, <oFont>, <cMsg>, <.update.>, <{uWhen}>,;
            <.design.>, <acBitmaps>, [{|nItem|<uBmpSelect>}], <nStyle>,;
            <cPicture>, [<{uEChange}>], [{||{<aFields>}}], <{cFieldGet}> )

 


Code: Select all  Expand view

// Por:   Enrique Guerra (Quique)
// email: quique@quiquesoft.com

#INCLUDE "fivewin.ch"

CLASS qComBrowse from tComboBox
   data aColSizes, aHeaders, cField, uValue1, uValue2, cAlias, aActions
   data aFields            // campos a mostrar en el browse
   data bFieldGet          // campo que se selecciona
   data cIndice            // índice que tiene el archivo ::cAlias para recuperarlo en caso de que se cambie durante el browse
   data oBrw               // referencia al browse
   data oDBF               // se utiliza si el browse se hace a un objeto TARRAY u otro para DBFs
   DATA lBrowse   init .f. //protected // indica si el browse está activo
   data lSet      init .f. //protected // para evitar la recursividad en SET
   data nBrwLeft  init 0   // posición izquierda del browse
   data nBrwWidth          // ancho del browse

   METHOD new( nRow, nCol, bSetGet, cAlias, nWidth, nHeight, oWnd, nHelpId, bChange, ;
      bValid, nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, ;
      acBitmaps, bDrawItem, nStyle, cPict, bEChange, aFields, bFieldGet ) ;
      CONSTRUCTOR
   METHOD reDefine( nId, bSetGet, cAlias, oWnd, nHelpId, bValid, bChange, nClrText, ;
      nClrBack, cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange, ;
      aFields, bFieldGet ) CONSTRUCTOR
   METHOD lButtonDown( nRow, nCol, nKeyFlags )
   METHOD keyDown( nKey, nFlags )
   message set method _set( xNewItem )
   method closeBrowse()
ENDCLASS
//-------------------------------------------------------------------------------------
METHOD new( nRow, nCol, bSetGet, cAlias, nWidth, nHeight, oWnd, nHelpId, bChange, ;
      bValid, nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, ;
      acBitmaps, bDrawItem, nStyle, cPict, bEChange, aFields, bFieldGet ) ;
      class qComBrowse
   ::aFields   := aFields
   ::bFieldGet := bFieldGet
   IF valType( cAlias ) = "O"
      ::oDBF   := cAlias
      ::cAlias := if( ::oDBF:classname() == "TARRAY", "ARRAY", ::oDBF:cAlias )
   elseIf cAlias == nil
      ::cAlias := alias()
   else
      ::cAlias := cAlias
   ENDIF
   super:new( nRow, nCol, bSetGet, , nWidth, 0, oWnd, nHelpId,, bValid, ;
      nClrText, nClrBack, lPixel, oFont, cMsg, lUpdate, bWhen, lDesign, acBitmaps, ;
      bDrawItem, nStyle, cPict, bEChange )
//   IF ::oGet <> nil
//      ::oGet:bValid := bValid
//   ENDIF
   ::set( eval( bSetGet ) )
   ::bChange   := bChange
RETURN self
//-------------------------------------------------------------------------------------
METHOD reDefine( nId, bSetGet, cAlias, oWnd, nHelpId, bValid, bChange, nClrText, ;
      nClrBack, cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange, ;
      aFields, bFieldGet ) class qComBrowse
   ::aFields   := aFields
   ::bFieldGet := bFieldGet
   IF valType(cAlias) = "O"
      ::oDBF   := cAlias
      ::cAlias := if( ::oDBF:classname() ="TARRAY", "ARRAY", ::oDBF:cAlias )
   else
      ::cAlias := cAlias
   ENDIF
   super:reDefine( nId, bSetGet, , oWnd, nHelpId, bValid,, nClrText, nClrBack, ;
      cMsg, lUpdate, bWhen, acBitmaps, bDrawItem, nStyle, cPict, bEChange )
//   ::oGet:bValid := bValid
   ::set( eval( bSetGet ) )
   ::bChange   := bChange
return self
//-------------------------------------------------------------------------------------
METHOD lButtonDown( nRow, nCol, nKeyFlags ) class qComBrowse
local nFieldSay, bLine, bValid := ::bValid
local oDlg, this := self, aCor
IF ::bLClicked = nil .OR. Eval( ::bLClicked, nRow, nCol, nKeyFlags, self )
   IF !::lBrowse
      ::setFocus()
      ::lBrowse     := .t.
      ::bValid      := nil
//      ::oGet:bValid := nil
      DEFINE DIALOG oDlg STYLE nOR( WS_VISIBLE, WS_POPUP ) OF ::oWnd
      ::oBrw        := tWBrowse():new( , , , , ::aFields, ::aHeaders, ;
                                          ::aColSizes, oDlg, ::cField, ::uValue1, ::uValue2,, ;
                                          { || ::set(), ::closeBrowse() }, ::bRClicked, ::oFont, ::oCursor, ;
                                          ::nClrText, ::nClrPane, ::cMsg, .F., ::cAlias, .t.,, .F.,, ::bLClicked, ;
                                          ::aActions/*, ::bSeek, ::lSeekEOF*/ )
      IF ::oDBF <> nil
         if ::oDBF:classname() = "TARRAY"
            ::oBrw:setArray( ::oDBF:aDatos )
            ::oBrw:bLine := ::aFields
         endIf
         ::oBrw:bGotop    := { || ::oDBF:gotop() }
         ::oBrw:bGoBottom := { || ::oDBF:goBottom() }
         ::oBrw:bSkip     := { | nSkip | ::oDBF:skip( nSkip ) }
      elseIf ( ::cAlias )->( indexOrd() ) > 1
         if ( ::cAlias )->( dbSeek() )
            ::oBrw:upStable()
         else
            ::oBrw:goTop()
         endIf
      ENDIF
      ::oBrw:bChange    := { || ::set() }
      ::oBrw:oWnd:bLostFocus := { || ::closeBrowse() }
      ::oBrw:bValid     := { || ::bValid := bValid, /*::oGet:bValid := bValid, */.t. }
      IF( ::cAlias <> "ARRAY", ::cIndice := ( ::cAlias )->( ordSetFocus() ) , )
      oDlg:setControl( ::oBrw )
      activate dialog oDlg nomodal;
         on init (   aCor := getWndRect( this:hWnd ), ;
                     oDlg:Move( aCor[ 1 ] + 20, aCor[ 2 ] + this:nBrwLeft, if( this:nBrwWidth = nil, this:nWidth, this:nBrwWidth ), ;
                                          min( 160, aCor[ 1 ] + this:oWnd:nHeight - aCor[ 1 ] - 39 ) ) )
   ENDIF
ENDIF
return .t.
//-------------------------------------------------------------------------------------
METHOD keyDown( nKey, nFlags ) class qComBrowse
if nKey=VK_DOWN
   if ::oDBF=nil
      (::cAlias)->(dbSkip())
      IF(eof(),dbGoBottom(),)
   else
      ::oDBF:skip()
      IF(::oDBF:eof(),::oDBF:goBottom(),)
   endIf
   ::set()
   ::refresh()
elseif nKey=VK_UP
   if(::oDBF=nil,(::cAlias)->(dbSkip(-1)),::oDBF:skip(-1))
   ::set()
   ::refresh()
endIf
return super:keyDown( nKey, nFlags )
//-------------------------------------------------------------------------------------
method _set( xNewItem ) class qComBrowse
local bChange := ::bChange
IF !::lSet
   ::lSet := .t.
   ::bChange := nil
   IF empty( xNewItem )
      xNewItem := eval( ::bFieldGet )
   ENDIF
//   IF ::oGet <> nil .AND. ::oGet:cPicture <> nil
//      xNewItem := transform( xNewItem, ::oGet:cPicture )
//   else
      xNewItem := cValToChar( xNewItem )
//   ENDIF
   if ::nLeft == nil
      ::nLeft   := 0
      ::nColPos := 1
   endIf
   ::setItems( { xNewItem } )
   super:set( xNewItem )
   eval( ::bSetGet, xNewItem )
   ::bChange := bChange
   ::nAt := 0
   ::change()
   ::lSet := .f.
ENDIF
return nil
//-------------------------------------------------------------------------------------
method closeBrowse() class qComBrowse
   ::oBrw:oWnd:bLostFocus := nil
   ::oBrw:hide()
   ::oBrw:oWnd:end()
   IF( ::cAlias <> "ARRAY", ( ::cAlias )->( ordSetFocus( ::cIndice ) ), )
   ::lBrowse := .f.
return nil
 
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 82 guests