Yo lo hago así, espero te sirva.
En el form pongo un dbcombo,
en el create del dbcombo llamo a esta función: Elitab( Self, "", ::oMemPais, oSender, "select descripcion, idpais from pais order by descripcion" )
El combo esta vinculado con un memdataset, al cual lo defini así:
::oMemPais:= TMemDataSet():New()
::oMemPais:GetStructFrom( {{"idpais","N",10,0},{"descripcion","C",100,0}} )
A NIVEL FORMULARIO NO HAGA NADA MAS - ACA EN ASSIST HEMOS DECIDIDO TRABAJAR EN 3 CAPAS, POR ENDE LAS PANTALLAS NO ACCEDEN A LOS DATOS, SOLAMENTE ACCEDEMOS A LOS DATOS POR MEDIO DE LAS CLASES Y LOS METODOS CORRESPONDIENTES.
En el form no le pongo ni odataset ni odatafield, se los asigno en ejecución con elitab()
{"idpais","N",10,0},{"descripcion","C",100,0} Lo defino asi para despues llenar aitems y aitemsbound con lo que me levante el select en la llamada desde elitabx
La función Elitab() define las cosas y hay una clase general que es la que hace casi todo que se llama elitabx.
//-----------------------------------
FUNCTION Elitab( oForm, cFiltro, oDataSet, oDBCombo, cSelect )
//-----------------------------------
local oObjeto, ret
cFiltro:=if( pcount()<2, "", cFiltro )
WITH OBJECT oObjeto := TElitabX():New( oForm )
:oDBCombo := oDBCombo
:FoDbf := oDataSet
:aItems := 1
:aItemsBound := 2
:cText := ""
:cFiltro := cFiltro
:cSelect := cSelect
END WITH
oObjeto:SetElitabX()
RETURN .t.
//-----------------------------------
#include "Xailer.ch"
CLASS TElitabX FROM TForm
DATA cValor INIT ""
DATA FoDbf INIT ""
DATA FoDataField INIT ""
DATA oDBCombo INIT NIL
DATA cSelect INIT "" // Consulta a ejecutar
DATA aItems INIT 1
DATA aItemsBound INIT 2
DATA cFiltro INIT "" // Filtro adicional para agregar al Where
METHOD SetElitabX( oSender )
ENDCLASS
//---------------------------------------------------------- --------------------
METHOD SetElitabX( oSender ) CLASS TElitabX
local aData
IF !empty(alltrim(::cSelect))
// Puede ser que levante los elementos y los ID de una tabla o no
aData:=AppData:oOdbcDS:QueryArray( ::cSelect )
::oDBCombo:aItems := ArrayCol( aData, 1 )
::oDBCombo:aItemsBound := ArrayCol( aData, 2 )
ENDIF
::oDBCombo:oDataField := ::FoDataField
::oDBCombo:oDataSet := ::FoDbf
::FoDbf:Edit()
::FoDbf:Open(::oDBCombo:aItems)
RETURN Nil
Te agrego esta función por que la vas a necesitar para desarmar la consulta devuelta a un array, la obtuve del foro, gracias al colega que la subió.
#include "Xailer.ch"
FUNCTION ArrayCol( aData, nCol )
local aCol := Array( Len( aData ) )
default nCol To 1
Aeval( aData, {|v,e| aCol[ e ] := v[ nCol ] } )
RETURN aCol
Atte. Carlos Ortiz.
Córdoba - Argentina
--
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para Wiliam Pacheco - duda con dataset
- Carlos Ortiz
- Mensajes: 873
- Registrado: Mié Jul 01, 2009 5:44 pm
- Ubicación: Argentina - Córdoba
- Contactar:
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
Para Wiliam Pacheco - duda con dataset
Muchas gracias Carlos
Es una buena idea como le manejas.
En este momento lo tengo resuelto usando el metodo QueryArray del DataSource a traves de un ejemplo que vi en el foro
Mi duda venia dada porque pensaba que necesariamente tenia que usar el DataSet pero con el DataSource:QueryArray para poblar los combo me ha ido bien
Nuevamente gracias por tu ayuda
Saludos
Williams Pacheco
"Carlos Ortiz" <cortizassist@hotmail.com> wrote in message news:[email=4a69d3de@svctag-j7w3v3j....]4a69d3de@svctag-j7w3v3j....[/email]
Yo lo hago así, espero te sirva.
En el form pongo un dbcombo,
en el create del dbcombo llamo a esta función: Elitab( Self, "", ::oMemPais, oSender, "select descripcion, idpais from pais order by descripcion" )
El combo esta vinculado con un memdataset, al cual lo defini así:
::oMemPais:= TMemDataSet():New()
::oMemPais:GetStructFrom( {{"idpais","N",10,0},{"descripcion","C",100,0}} )
A NIVEL FORMULARIO NO HAGA NADA MAS - ACA EN ASSIST HEMOS DECIDIDO TRABAJAR EN 3 CAPAS, POR ENDE LAS PANTALLAS NO ACCEDEN A LOS DATOS, SOLAMENTE ACCEDEMOS A LOS DATOS POR MEDIO DE LAS CLASES Y LOS METODOS CORRESPONDIENTES.
En el form no le pongo ni odataset ni odatafield, se los asigno en ejecución con elitab()
{"idpais","N",10,0},{"descripcion","C",100,0} Lo defino asi para despues llenar aitems y aitemsbound con lo que me levante el select en la llamada desde elitabx
La función Elitab() define las cosas y hay una clase general que es la que hace casi todo que se llama elitabx.
//-----------------------------------
FUNCTION Elitab( oForm, cFiltro, oDataSet, oDBCombo, cSelect )
//-----------------------------------
local oObjeto, ret
cFiltro:=if( pcount()<2, "", cFiltro )
WITH OBJECT oObjeto := TElitabX():New( oForm )
:oDBCombo := oDBCombo
:FoDbf := oDataSet
:aItems := 1
:aItemsBound := 2
:cText := ""
:cFiltro := cFiltro
:cSelect := cSelect
END WITH
oObjeto:SetElitabX()
RETURN .t.
//-----------------------------------
#include "Xailer.ch"
CLASS TElitabX FROM TForm
DATA cValor INIT ""
DATA FoDbf INIT ""
DATA FoDataField INIT ""
DATA oDBCombo INIT NIL
DATA cSelect INIT "" // Consulta a ejecutar
DATA aItems INIT 1
DATA aItemsBound INIT 2
DATA cFiltro INIT "" // Filtro adicional para agregar al Where
METHOD SetElitabX( oSender )
ENDCLASS
//---------------------------------------------------------- --------------------
METHOD SetElitabX( oSender ) CLASS TElitabX
local aData
IF !empty(alltrim(::cSelect))
// Puede ser que levante los elementos y los ID de una tabla o no
aData:=AppData:oOdbcDS:QueryArray( ::cSelect )
::oDBCombo:aItems := ArrayCol( aData, 1 )
::oDBCombo:aItemsBound := ArrayCol( aData, 2 )
ENDIF
::oDBCombo:oDataField := ::FoDataField
::oDBCombo:oDataSet := ::FoDbf
::FoDbf:Edit()
::FoDbf:Open(::oDBCombo:aItems)
RETURN Nil
Te agrego esta función por que la vas a necesitar para desarmar la consulta devuelta a un array, la obtuve del foro, gracias al colega que la subió.
#include "Xailer.ch"
FUNCTION ArrayCol( aData, nCol )
local aCol := Array( Len( aData ) )
default nCol To 1
Aeval( aData, {|v,e| aCol[ e ] := v[ nCol ] } )
RETURN aCol
Atte. Carlos Ortiz.
Córdoba - Argentina
--
Es una buena idea como le manejas.
En este momento lo tengo resuelto usando el metodo QueryArray del DataSource a traves de un ejemplo que vi en el foro
Mi duda venia dada porque pensaba que necesariamente tenia que usar el DataSet pero con el DataSource:QueryArray para poblar los combo me ha ido bien
Nuevamente gracias por tu ayuda
Saludos
Williams Pacheco
"Carlos Ortiz" <cortizassist@hotmail.com> wrote in message news:[email=4a69d3de@svctag-j7w3v3j....]4a69d3de@svctag-j7w3v3j....[/email]
Yo lo hago así, espero te sirva.
En el form pongo un dbcombo,
en el create del dbcombo llamo a esta función: Elitab( Self, "", ::oMemPais, oSender, "select descripcion, idpais from pais order by descripcion" )
El combo esta vinculado con un memdataset, al cual lo defini así:
::oMemPais:= TMemDataSet():New()
::oMemPais:GetStructFrom( {{"idpais","N",10,0},{"descripcion","C",100,0}} )
A NIVEL FORMULARIO NO HAGA NADA MAS - ACA EN ASSIST HEMOS DECIDIDO TRABAJAR EN 3 CAPAS, POR ENDE LAS PANTALLAS NO ACCEDEN A LOS DATOS, SOLAMENTE ACCEDEMOS A LOS DATOS POR MEDIO DE LAS CLASES Y LOS METODOS CORRESPONDIENTES.
En el form no le pongo ni odataset ni odatafield, se los asigno en ejecución con elitab()
{"idpais","N",10,0},{"descripcion","C",100,0} Lo defino asi para despues llenar aitems y aitemsbound con lo que me levante el select en la llamada desde elitabx
La función Elitab() define las cosas y hay una clase general que es la que hace casi todo que se llama elitabx.
//-----------------------------------
FUNCTION Elitab( oForm, cFiltro, oDataSet, oDBCombo, cSelect )
//-----------------------------------
local oObjeto, ret
cFiltro:=if( pcount()<2, "", cFiltro )
WITH OBJECT oObjeto := TElitabX():New( oForm )
:oDBCombo := oDBCombo
:FoDbf := oDataSet
:aItems := 1
:aItemsBound := 2
:cText := ""
:cFiltro := cFiltro
:cSelect := cSelect
END WITH
oObjeto:SetElitabX()
RETURN .t.
//-----------------------------------
#include "Xailer.ch"
CLASS TElitabX FROM TForm
DATA cValor INIT ""
DATA FoDbf INIT ""
DATA FoDataField INIT ""
DATA oDBCombo INIT NIL
DATA cSelect INIT "" // Consulta a ejecutar
DATA aItems INIT 1
DATA aItemsBound INIT 2
DATA cFiltro INIT "" // Filtro adicional para agregar al Where
METHOD SetElitabX( oSender )
ENDCLASS
//---------------------------------------------------------- --------------------
METHOD SetElitabX( oSender ) CLASS TElitabX
local aData
IF !empty(alltrim(::cSelect))
// Puede ser que levante los elementos y los ID de una tabla o no
aData:=AppData:oOdbcDS:QueryArray( ::cSelect )
::oDBCombo:aItems := ArrayCol( aData, 1 )
::oDBCombo:aItemsBound := ArrayCol( aData, 2 )
ENDIF
::oDBCombo:oDataField := ::FoDataField
::oDBCombo:oDataSet := ::FoDbf
::FoDbf:Edit()
::FoDbf:Open(::oDBCombo:aItems)
RETURN Nil
Te agrego esta función por que la vas a necesitar para desarmar la consulta devuelta a un array, la obtuve del foro, gracias al colega que la subió.
#include "Xailer.ch"
FUNCTION ArrayCol( aData, nCol )
local aCol := Array( Len( aData ) )
default nCol To 1
Aeval( aData, {|v,e| aCol[ e ] := v[ nCol ] } )
RETURN aCol
Atte. Carlos Ortiz.
Córdoba - Argentina
--