Página 1 de 1

Para Wiliam Pacheco - duda con dataset

Publicado: Vie Jul 24, 2009 5:30 pm
por Carlos Ortiz
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
--

Para Wiliam Pacheco - duda con dataset

Publicado: Vie Jul 24, 2009 9:16 pm
por Williams Pacheco
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
--