FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Salvar un listbox
Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Salvar un listbox
Posted: Mon Jun 29, 2009 10:32 PM

Hola a todos, espero que me puedan ayudar con este peque帽o problema, resulta que tengo en pantalla un listbox con informaci贸n combinada de varias bases de datos, 驴Es posible guardar este listbox en un archivo DBF? Supongo que lo que muestra en pantalla esta almacenado en alg煤n array, pero no se cual es este array.

Alguna idea. Muchas gracias por su ayuda

Posts: 243
Joined: Wed Sep 19, 2007 04:32 PM
Re: Salvar un listbox
Posted: Tue Jun 30, 2009 06:32 AM
Hola Mario:

En efecto, lo que el listbox muestra es un arreglo y se llama "aItems"
Te muestro el siguiente ejemplo, testlbx.prg, que viene en fwh\samples (lo he modificado para exponer lo que preguntas)

Code (fw): Select all Collapse
#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()
聽聽 local oWnd, oLbx

聽 聽DEFINE WINDOW oWnd FROM 1, 1 TO 20, 60 ;
聽 聽 聽 TITLE "Testing a ListBox"

聽 聽@ 2, 2 LISTBOX oLbx VAR cItem ;
聽 聽 聽 ITEMS { "One", "Two", "Three", "Four", "Five" } ;
聽 聽 聽 OF oWnd SIZE 200, 150 

聽 聽@ 11, 42 BUTTON "&End" SIZE 80, 20 OF oWnd ;
聽 聽 聽 ACTION oWnd:End() 
聽 聽ACTIVATE WINDOW oWnd

return nil


Ahora bien, partiendo del ejemplo anterior el objeto que contiene el lisbox es oLbx, para saber el ancho del array, lo puedes hacer con LEN( oLbx:aItems ), para accesar los items bien puedes usar a la forma antigua como yo lo he hecho antes, Seguramente hay otras maneras mas elaboradas :-)
Code (fw): Select all Collapse
 聽 聽 聽 FOR nPos := 1 TO LEN( oLbx:aItems )
聽 聽 聽 聽 聽 聽 MsgInfo(聽oLbx:aItems[nPos], "Item actual" )
聽 聽 聽 NEXT


Espero te sirva, saludos desde Honduras
Oscar A. Martinez
http://www.multisofthn.com
Honduras, Centro America
xHarbour Enterprise 1.2.2, Fivewin 13.06
Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Re: Salvar un listbox
Posted: Tue Jun 30, 2009 02:20 PM
Muchas gracias por tu respuesta, adjunto parte de mi c贸digo para que veas como formo mi listbox, ya que hasta donde vi no existe el array "aItems", al menos que este lo genere de forma automatica

Code (fw): Select all Collapse
#INCLUDE "fivewin.CH"

function main()
local oDial1, oBtn1, oLbx1
define dialog oDial1 from 5,5 to 23,80 title "Browse de prueba con bases de datos relacionadas"
close all
use base2 shared new alias clien
index on campo2 to dbidx1
use base3 shared new alias mods
index on campo6 to dbidx2
use base1 shared new alias labo
index on campo1+campo6 to dbidx3
@2,1 listbox oLbx1 fields base1->campo1, base1->campo2, base1->campo3,;
聽聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 iif(base2->(dbseek(base1->campo2)),base2->campo4,space(5)),;
聽聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 iif(base2->(dbseek(base1->campo2)),base2->campo5,space(3)),;
聽聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 iif(base3->(dbseek(base1->campo6)),base3->campo7,space(45));
headers "Encabezado1","Encabezado2","Encabezado3","Encabezado4","Encabezado5","Encabezado6" size 280,70 of oDial1 alias "base1"聽
@5,20 button oBtn1 action odial1:end()
activate dialog oDial1 center


Como veras hago una combinaci贸n de varias bases de datos y necesito almacenar la informaci贸n resultante en una base de datos temporal que me servira al final para exportar esta informaci贸n, imprimir, etc.

Gracias por la ayuda
Posts: 243
Joined: Wed Sep 19, 2007 04:32 PM
Re: Salvar un listbox
Posted: Tue Jun 30, 2009 08:48 PM
Hola Mario:

Veo que usas directamente las tablas, de tu aplicacion.
En este caso dejame decirte que internamente aunque usas un listbox no se hace uso de la clase TListBox si no que internamente se invoca a la clase TWBrowse, lo puedes verificar en el archivo de cabecera FIVEWIN.CH busca LISTBOX, y veras que hay varias definiciones para arreglos y tablas desde codigo y recursos (REDEFINE).
En la clase TWBrowse, se crea un codigo de bloque (codeblock) "bLine", que contiene los campos a mostrar de tu Listbox, en la medida que desplazas por el.
Y he aqui donde planteo lo siguiente:
* Subir a un arreglo el contenido de la tabla, de la manera en que lo planteas en la definicion del listbox
* Crear una tabla temporal donde subas los datos a mostrar en el lisbox
Y de ahi puedes decir guardarlos desde cualquiera de las dos opciones, si es eso lo que buscas.

Saludos desde Honduras
Oscar A. Martinez
http://www.multisofthn.com
Honduras, Centro America
xHarbour Enterprise 1.2.2, Fivewin 13.06
Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Re: Salvar un listbox
Posted: Thu Jul 02, 2009 09:42 PM
Hola y nuevamente gracias por el tip, esto es lo que hice para convertir mi combinacion de bases de datos en un array:
Code (fw): Select all Collapse
use &dbcust shared new alias clientes
聽 聽index on cliysub to &dbidx1
聽 聽use &dbmode shared new alias models
聽 聽index on model to &dbidx2
聽 聽use &dbtmp1 shared new alias labor
聽 聽index on report_no+continue+str(cliysub)+model to &dbidx3
聽 聽count to tRegsa
聽 聽declare atest[tregsa,3]
聽 聽for unrega := 1 to tregsa
聽 聽 聽 use &dbtmp1 shared alias labor index &dbidx3
聽 聽 聽 goto unrega
聽 聽 聽 atest[unrega,1]:=alltrim(labor->report_no)
聽 聽 聽 atest[unrega,2]:=iif(clientes->(dbseek(labor->cliysub)),clientes->razonsoc,space(60))
聽 聽 聽 atest[unrega,3]:=iif(models->(dbseek(labor->model)),models->commodity,space(4))
聽 聽next
聽 聽dbcreate("martmp5",atest)
聽 聽use martmp5
聽 聽dbedit()

Aparentemente esta generando el array con los datos combinado de forma correcta, pero ahora. Como convierto el array en un dbf? (La funcion dbcreate() no esta funcionando bien, ya que hasta donde se solo genera la estructura vacia y yo le estoy diciendo que haga un DBF de un array que ya contiene datos). existe alguna funcion para hacer esta conversion?.
Gracias

Continue the discussion