In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Form y dbfbrowse, donde usar SetDbf

Foro público de Xailer en español
Responder
carloskds
Mensajes: 18
Registrado: Mié Abr 05, 2023 2:53 am

Form y dbfbrowse, donde usar SetDbf

Mensaje 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
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Form y dbfbrowse, donde usar SetDbf

Mensaje 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
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder