Página 1 de 1

Form y dbfbrowse, donde usar SetDbf

Publicado: Mié Jul 26, 2023 1:47 am
por carloskds
En un form deseo mostrar un catálogo de clientes, de una dbf, pero no sé dónde ubicar el método SetDbf, sé que lo puedo poner directo en el inspector de objetos, tanto el alias, como los fieldnames, pero por mis razones
deseo hacerlo vía código. la asignación de campos funciona, ahora si pongo en el evento onshow del formulario el setdbf si funciona todo, pero creo que debería poder ponerse en el with object. no se si estoy claro.
incluso intente ponerlo en el onInitialize del formo y no funciona, se supone que ahí ya están creados los controles, que me está faltando entender... :-)
gracias por su guía...

Código: Seleccionar todo

   DBSelectArea( "CLIENTES" )

   WITH OBJECT oFormClientC := TFormClientC():New(Self)
      :oDbfBrowse1:SetDbf( "CLIENTES" )              //NO FUNCIONA
      
      :oDbfBrowse1:aCols[1]:cHeader := "No."
      :oDbfBrowse1:aCols[1]:cFieldName := "NUM_CLIE"
      :oDbfBrowse1:aCols[1]:nWidth := 80

      :oDbfBrowse1:aCols[2]:cHeader := "Nombre[s]"
      :oDbfBrowse1:aCols[2]:cFieldName := "NOMBRES"
      :oDbfBrowse1:aCols[2]:nWidth := 150

      :oDbfBrowse1:aCols[3]:cHeader := "1er. Apellido"
      :oDbfBrowse1:aCols[3]:cFieldName := "PAPELLIDO"
      :oDbfBrowse1:aCols[3]:nWidth := 100

      :oDbfBrowse1:aCols[4]:cHeader := "2do. Apellido"
      :oDbfBrowse1:aCols[4]:cFieldName := "SAPELLIDO"
      :oDbfBrowse1:aCols[4]:nWidth := 100

      :oDbfBrowse1:aCols[5]:cHeader := "Cédula"
      :oDbfBrowse1:aCols[5]:cFieldName := "CEDULA"
      :oDbfBrowse1:aCols[5]:nWidth := 130

      :oDbfBrowse1:aCols[6]:cHeader := "Ruta de cobro"
      :oDbfBrowse1:aCols[6]:cFieldName := "NOM_RUTA"
      :oDbfBrowse1:aCols[6]:nWidth := 140

      :oDbfBrowse1:aCols[7]:cHeader := "Activo"
      :oDbfBrowse1:aCols[7]:cFieldName := "ACTIVO"
      :oDbfBrowse1:aCols[7]:nWidth := 60

      :oDbfBrowse1:aCols[8]:cHeader := "CLAS"
      :oDbfBrowse1:aCols[8]:cFieldName := "CLASIFICACION"
      :oDbfBrowse1:aCols[8]:nWidth := 60

      :ShowModal()
   END

Re: Form y dbfbrowse, donde usar SetDbf

Publicado: Mié Jul 26, 2023 12:10 pm
por ignacio
Hola,

Viendo su código veo bastantes errores:
  • Nunca llama a Create y es absolutamente necesario
  • SetDbf() de llamarse después de Create()
Fíjese como lo hace el proprio IDE. Para ello sólo tiene que abrir el archivo XFM: (samples\datacontrols\dbfdata3)

Código: Seleccionar todo

   WITH OBJECT ::oDbfBrowse1 := TDbfBrowse():New( Self )
      :SetBounds( 12, 20, 562, 315 )
      WITH OBJECT TBrwRecSel():New( ::oDbfBrowse1 )
         :nWidth := 70
         :OnGetData := "DbfBrowse1GetData"
         :Create()
      END

      :nHeaderHeight := 36
      :nRowHeight := 18
      :lFilterBar := .T.
      WITH OBJECT TDbfBrwColumn():New( ::oDbfBrowse1 )
         :cHeader := "First"
         :nWidth := 99
         :cFieldName := "FIRST"
         :Create()
      END

      WITH OBJECT TDbfBrwColumn():New( ::oDbfBrowse1 )
         :cHeader := "Last"
         :nWidth := 145
         :cFieldName := "LAST"
         :Create()
      END

      :OnCreate := "DbfBrowse1Create"
      :Create()
   END
Observe que como es en el evento OnCreate del DbfBrowse cuando se llama a SetDbf(). En este caso las columnas se crean antes de asignar la DBF que es lo más normal.

Si usted no ha creado ninguna columna y llama SetDbf() DESPUES DEL CREATE() el control DbfBrowse creara todas las columnas por usted. Por ejemplo:

Código: Seleccionar todo

WITH OBJECT oDbfBrowse := TDbfBrowse():New( Self )
      :nWidth := 100
      :nHeight := 100
      :Create()
      :SetDbf( 'CLIENTES')
      :aCols[1]:cHeader := "Test"
END WITH
Observe que la columna primera ni la ha creado, pero ha podido cambiar la cabecera sin problemas.

Saludos