Salvar un listbox

Salvar un listbox

Postby mariordz » 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
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Salvar un listbox

Postby Blessed » Tue Jun 30, 2009 6: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: Select all  Expand view

#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: Select all  Expand view
      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
User avatar
Blessed
 
Posts: 243
Joined: Wed Sep 19, 2007 4:32 pm
Location: Honduras, C.A.

Re: Salvar un listbox

Postby mariordz » Tue Jun 30, 2009 2: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: Select all  Expand view

#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
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Salvar un listbox

Postby Blessed » Tue Jun 30, 2009 8: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
User avatar
Blessed
 
Posts: 243
Joined: Wed Sep 19, 2007 4:32 pm
Location: Honduras, C.A.

Re: Salvar un listbox

Postby mariordz » Thu Jul 02, 2009 9: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: Select all  Expand view
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
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: cmsoft and 42 guests