ARRAY -- ESTOY BLOQUEADO..
Moderator: Rathinagiri
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
ARRAY -- ESTOY BLOQUEADO..
Hola a todos.
Os pongo en antencedentes.
Tengo un array multidimensional, que en un principio puede tener el siguiente formato
aItem:=ARRAY(100,10)
Pero es un momento determinado tiene que tener, el numero de filas Y de columnas se tienen que modificar, hacer más grande o más pequeño, incluso borrando todos sus valores.
He utilizado ACLONE, usando para ello una nueva MATRIZ a la que clono a la antigua pero el resultado no es correcto, ya que al hacerlo en una funcion, y la nueva matriz esta declarada en LOCAL.., se copia tambien esta caracteristicas y pierdo los datos.
No recuerdo ahora mismo como inicializar Matrices o redimensionarlas.
Muchas gracias y vamos con una cervecita...
Os pongo en antencedentes.
Tengo un array multidimensional, que en un principio puede tener el siguiente formato
aItem:=ARRAY(100,10)
Pero es un momento determinado tiene que tener, el numero de filas Y de columnas se tienen que modificar, hacer más grande o más pequeño, incluso borrando todos sus valores.
He utilizado ACLONE, usando para ello una nueva MATRIZ a la que clono a la antigua pero el resultado no es correcto, ya que al hacerlo en una funcion, y la nueva matriz esta declarada en LOCAL.., se copia tambien esta caracteristicas y pierdo los datos.
No recuerdo ahora mismo como inicializar Matrices o redimensionarlas.
Muchas gracias y vamos con una cervecita...
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: ARRAY -- ESTOY BLOQUEADO..
Hola.., este trozo de codigo no me funciona.
Es muy simple.., leo los campos de un fichero, que cargo en una Array de una dimensión. Una vez cargado lo paso a la matriz.
El primer registro lo carga bien, pero a partir de entonces no lo hace .., y desconozco el motivo.
Gracias de antemano por la ayuda, y vamos con la cervecita...
Es muy simple.., leo los campos de un fichero, que cargo en una Array de una dimensión. Una vez cargado lo paso a la matriz.
El primer registro lo carga bien, pero a partir de entonces no lo hace .., y desconozco el motivo.
Code: Select all
// --> Inicializo valores
_aPongo:={.t.,.t.,.f.} // Selecciona campos
_aItem:={}
(cAlias)->(DbGotop() )
nCont:=1
DO WHILE !(cAlias)->( Eof())
nPos:=1
FOR nFor=1 TO len(_aPongo)
IF _aPongo[nFor]
aGrid [nPos] :=( (cAlias)->(FIELDGET(nFor)) )
nPos ++
ENDIF
NEXT
msgbox(aGrid,len(aGrid))
AADD(_aItem, aGrid ) // --> ESTO NO CARGA
msgdebug(_aItem)
(cAlias)->(DbSkip())
ENDDO
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- AUGE_OHR
- Posts: 2061
- Joined: Sun Aug 25, 2019 3:12 pm
- DBs Used: DBF, PostgreSQL, MySQL, SQLite
- Location: Hamburg, Germany
Re: ARRAY -- ESTOY BLOQUEADO..
as i understand you have a 2-DIM Array so i guess it must beSALINETAS24 wrote: ↑Mon Dec 09, 2019 10:58 pmCode: Select all
FOR nFor=1 TO len(_aPongo) IF _aPongo[nFor] aGrid [nPos] :=( (cAlias)->(FIELDGET(nFor)) ) nPos ++ ENDIF NEXT
Code: Select all
aGrid [nFor][nPos] :=( (cAlias)->(FIELDGET(nFor)) )
have fun
Jimmy
Jimmy
Re: ARRAY -- ESTOY BLOQUEADO..
Maybe...
Code: Select all
aGrid := {}
DO WHILE !(cAlias)->( Eof())
AADD( aGrid, { (cAlias)->( FIELDGET( 1) ), (cAlias)->( FIELDGET( 2 ) ) } )
(cAlias)->(DbSkip())
ENDDO
Andrés González López
Desde Guadalajara, Jalisco. México.
Desde Guadalajara, Jalisco. México.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: ARRAY -- ESTOY BLOQUEADO..
Hola AUGE_ORG, muchas gracias por contestar
Hola AndyGlez, muchas gracias por contestar..
He estado realizando algunas pruebas y la verdad es que no entiendo, si hago la asignación del valor a mano, si que puedo traspasar el dato sin problemas de un ARRAY de 1 DIM, a otro ARRAY de 2 DIM , pero cuando lo leo con el FIELGET..., no funciona...
Imaginate que quieres cargar en un GRID una DBF, pero los campos a mostrar los ha seleccionado previamente el usuario, para ver solo lo que el usuario quiera verr.., puede ser el 1, 2,5, 7, 10...., o solo el 3 y 4 ¿como lo cargo..?
Muchas gracias por vuestra ayuda...,
Tengo un Array de 1-DIM, que cargo con campos que obtengo de una DBF, y posteriormente esos valores tienen que pasar a un Array de de 2-DIM. El gran problema es que desconozco la cantidad de filas y columnas que necesitaré ya que la selección de campos la realiza el usuario, por lo tanto no puedo hace un DIM en el aGrid como tu proponesAUGE_OHR wrote: ↑Mon Dec 09, 2019 11:48 pmCode: Select all
as i understand you have a 2-DIM Array so i guess it must be [code] aGrid [nFor][nPos] :=( (cAlias)->(FIELDGET(nFor)) )
Hola AndyGlez, muchas gracias por contestar..
El problema Andy, como he comentado con AUGE es que el numero del FIELGET lo desconozco, es una selección que realiza el usuario de los campos del DBF, y como quiero que la función trabaje con cualquier DBF, tampoco se el numero de campos que tiene la DBF, por eso utilizo el ARRAY _aPongo, el cual contiene .T. o .F. , dependiendo que el usuario quiera ver ese campo o no quiera verlo.andyglezl wrote: ↑Tue Dec 10, 2019 12:40 am Maybe...
Code: Select all
aGrid := {} DO WHILE !(cAlias)->( Eof()) AADD( aGrid, { (cAlias)->( FIELDGET( 1) ), (cAlias)->( FIELDGET( 2 ) ) } ) (cAlias)->(DbSkip()) ENDDO
He estado realizando algunas pruebas y la verdad es que no entiendo, si hago la asignación del valor a mano, si que puedo traspasar el dato sin problemas de un ARRAY de 1 DIM, a otro ARRAY de 2 DIM , pero cuando lo leo con el FIELGET..., no funciona...
Code: Select all
local cCadena [4]
local aItems := {}
//--> Asigno valores ARRAY 1 DIM
cCadena[1]:="primera"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
// --> Paso valores ARRA1 1 DIM a ARRAY 2 DIM
AADD (aItems, cCadena )
// --> Resultado OK
msgdebug(aItems)
//--> Asigno valores ARRAY 1 DIM DE OTRA FORMA
cCadena:={"Carrot", 5, 30, DATE()+1 }
// --> Paso valores ARRA1 1 DIM a ARRAY 2 DIM
AADD (aItems, cCadena )
// --> Resultado OK
msgdebug(aItems)
Imaginate que quieres cargar en un GRID una DBF, pero los campos a mostrar los ha seleccionado previamente el usuario, para ver solo lo que el usuario quiera verr.., puede ser el 1, 2,5, 7, 10...., o solo el 3 y 4 ¿como lo cargo..?
Muchas gracias por vuestra ayuda...,
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: ARRAY -- ESTOY BLOQUEADO..
Otra cosa mas.
Si la asignación la hago asi
el resultado es correcto, pero si lo hago así....
EL RESULTADO ES INCORRECTO..., ¿ALGUIEN SABE EL MOTIVO DEL ERROR..?
¿COMO PUEDO PASAR UN ARRAY DE 1 DIM A UNA MATRIZ DE 2 DIM...?
Si la asignación la hago asi
Code: Select all
cCadena:={"Carrot", 5, 30, DATE()+1 }
AADD (aItems, cCadena )
cCadena:={"pepe", 5, 30, DATE()+1 }
AADD (aItems, cCadena )
cCadena:={"antonio", 5, 30, DATE()+1 }
AADD (aItems, cCadena )
msgdebug(aItems)
Code: Select all
cCadena[1]:="primera"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
msgbox(cCadena)
AADD (aItems, cCadena )
msgdebug(aItems)
cCadena[1]:="dos"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
msgbox(cCadena)
AADD (aItems, cCadena )
msgdebug(aItems)
cCadena[1]:="tres"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
msgbox(cCadena)
AADD (aItems, cCadena )
msgdebug(aItems)
cCadena[1]:="fort"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
msgbox(cCadena)
AADD (aItems, cCadena )
msgdebug(aItems)
¿COMO PUEDO PASAR UN ARRAY DE 1 DIM A UNA MATRIZ DE 2 DIM...?
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- AUGE_OHR
- Posts: 2061
- Joined: Sun Aug 25, 2019 3:12 pm
- DBs Used: DBF, PostgreSQL, MySQL, SQLite
- Location: Hamburg, Germany
Re: ARRAY -- ESTOY BLOQUEADO..
hi,
now i understand what you want.
you need a Picklist for FIELD of DBF and use Result for GRID this a CLASS in Xbase++ but it is "just" 2 x Listbox to select Field of DBF
---
not know how much you have so i tell the hole Story which i use
this Array i have to prepare for Picklist.
as i want fo fill a Listbox it is just 1-DIM
my Technique is to remove unwanted Field from Array.
now last Step what you are searching for (hope so)
have fun
now i understand what you want.
you need a Picklist for FIELD of DBF and use Result for GRID this a CLASS in Xbase++ but it is "just" 2 x Listbox to select Field of DBF
---
not know how much you have so i tell the hole Story which i use
Code: Select all
::aBroFields := ::oPG:MultidbStruct( ::cTable ) // same as DbStruct() but for my SQL CLASS
IF LEN( ::aBroFields ) > 0
::SelectFields()
as i want fo fill a Listbox it is just 1-DIM
Code: Select all
METHOD PGUDialog:SelectFields()
LOCAL aSingle := {}
LOCAL aResult
LOCAL i, iMax
LOCAL nPosi
LOCAL aClone
iMax := LEN( ::aBroFields )
IF iMax > 0
aClone := ACLONE( ::aBroFields )
// reduce Array to 1-DIM for Listbox of PickList
aSingle := AEVAL( aClone, { | a, i | a := a[ DBS_NAME ] },,, .T. )
aResult := PickList( ::drawingArea, aSingle, "Picklist Dialog", "Available", "Select" )
IF LEN( aResult ) > 0
FOR i := iMax TO 1 STEP - 1 // start with highest Element
nPosi := ASCAN( aResult, { | x | x = ::aBroFields[ i ] [ DBS_NAME ] } )
IF nPosi > 0
ELSE
// remove unwanted Field
AREMOVE( ::aBroFields, i )
ENDIF
ENDIF
NEXT
ENDIF
ENDIF
RETURN self
now last Step what you are searching for (hope so)
Code: Select all
aData := {}
aWide := {}
aType := {}
aCrtl := {}
iMax := LEN( ::aBroFields )
IF iMax > 0
::OutMsg( "used Fields for Column :" + CRLF )
FOR i := 1 TO iMax
AADD(aData := ::aBroFields[ i ] [ DBS_NAME ] )
AADD(aWide := ::aBroFields[ i ] [ DBS_LEN ] * 8 )
AADD(aType := ::aBroFields[ i ] [ DBS_TYPE ] )
// check Type
// { 'CHECKBOX' , 'Yes' , 'No' },{'TEXTBOX','CHARACTER'},{'TEXTBOX','NUMERIC'},{'TEXTBOX','DATE'}
// AADD(aCrtl, {...} )
NEXT
DEFINE GRID GRID_1
...
COLUMNFIELDS aData
HEADERS aData
WIDTHS aWide
COLUMNCONTROLS { aCrtl }
have fun
Jimmy
Jimmy
Re: ARRAY -- ESTOY BLOQUEADO..
Salinetas no se si entendi bien, pero te envio algo que hice rapido , espero que te de una idea, como te digo no estoy seguro de que entendi bien lo que necesitas, el cpodigo se puede mejorar
saludos
saludos
- Attachments
-
- Gridprueba.zip
- (3.29 KiB) Downloaded 155 times
Re: ARRAY -- ESTOY BLOQUEADO..
Se me ha olvidado tienes que dar click en el encabezado de las columnas que quieres agregar al nuevo array
saludos
saludos
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: ARRAY -- ESTOY BLOQUEADO..
Hola Auge...,
Y TACHAAAAAAAN!!!!!
Conseguido.....
Sabia que era una tontería..., pero la respuesta a mi problema es ...
Ahora el usuario ya puede seleccionar que campos quiere que se le muestren y en lugar de vincular una DBF con 10000 registros, lo puedo paginar.., y puedo cargar de 1000 en 1000.., por ejemplo.
Gracias martingz, no he comprobado tu ejemplo, pero le doy un vistazo con mucho gusto.
Y los dicho.., vamos con una ronda de cervecita fresquita que esta la pago yo.....(virtualmente se entiende..!!)
Efectivamente.., pero quiero desligar totalmente el DBF, por lo que tengo que cargar el resultado en un MATRIZ, con el fin de mejorar los tiempos de trabajo en RED
Y TACHAAAAAAAN!!!!!
Conseguido.....
Sabia que era una tontería..., pero la respuesta a mi problema es ...
Code: Select all
cCadena[1]:="tres"
cCadena[2]:=2
cCadena[3]:=3
cCadena[4]:=DATE()
AADD(_aItem, aclone(cCadena) )
Gracias martingz, no he comprobado tu ejemplo, pero le doy un vistazo con mucho gusto.
Y los dicho.., vamos con una ronda de cervecita fresquita que esta la pago yo.....(virtualmente se entiende..!!)
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.