Imprimir estructura de una base dbf

Post Reply
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Imprimir estructura de una base dbf

Post by desdesummer87 »

Me estoy haciendo viejo, sin duda, pues por más que lo intento, no acierto a desarrollar una función que me permita imprimir la estructura de una base de datos DBF en uso, desde el programa que la maneja... Sólo la estructura, nó el contenido de los registros

Por favor: ¿Alguien me echa una mano...?

Gracias
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Imprimir estructura de una base dbf

Post by Antonio Linares »

Prueba asi:

Code: Select all

for n = 1 to FCount()
   ? FieldName( n ), FieldType( n ), Len( FieldGet( n ) )
next
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Post by desdesummer87 »

Gracias Antonio, pero no reconoce la función FieldType...

Hé conseguido una aproximación mediante el siguiente código:

------------------------------------------------------
Use cuenta.dbf
aEstruct = DBStruct()
For i = 1 To Len(aEstruct)
? aEstruct[i, DBS_NAME], aEstruct[i, DBS_TYPE], aEstruct[i, DBS_LEN], aEstruct[i, DBS_DEC]
Next
----------------------------------------------------------

Continúo intentando la impresión...

Gracias de nueva
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Imprimir estructura de una base dbf

Post by JmGarcia »

Para crear un DBF desde código se hace así:

Code: Select all

dbCreate("FICHERO.DBF",{{"CAMPO_01  ","C",10,0},;
                        {"CAMPO_02  ","M", 8,0},;
                        {"CAMPO_03  ","N",10,3}})
o de la siguiente forma:

Code: Select all

aCampos:={{"CAMPO_01  ","C",10,0},{"CAMPO_02  ","M", 8,0},{"CAMPO_03  ","N",10,3},{"CAMPO_N   ","C",10,0}}
dbCreate("FICHERO.DBF",aCampos)
Luego la estructura es del tipo array bidimensional de N elementos con 4 elementos por fila.
Entonces _ son el 1 para el nombre, el 2 para el tipo (Number, Character, Memo), el 3 para la longitud del campo y el 4 para los decimales si es number.

Luego puedes listarlo así tambien:

Code: Select all

use cuenta.dbf
aEstruct:=DBStruct()
use

for i=1 to Len(aEstruct)
   ? aEstruct[i,1],aEstruct[i,2],aEstruct[i,3],aEstruct[i,4]
next i
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Post by desdesummer87 »

Gracias JmGarcia, pero hasta ahí ya habia llegado yo. En realidad el código que indicas es practicamente el mismo que adjunté yo, pues da lo mismo invocar la constante por su nombre, que por la posición que ocupa en el array multidimensional. Lo que me interesa no es la visualización por pantalla, que se consigue así, sinó la salida por impresora mediante un objeto Report.

Gracias no obstante...
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Imprimir estructura de una base dbf

Post by Antonio Linares »

Prueba con este código:

ValType( FieldGet( n ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Post by desdesummer87 »

Gracias a todos los que se han dignado contestar, pero lamentablemente el problema persiste. Nada de lo aportado lleva a la salida por impresora...
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Imprimir estructura de una base dbf

Post by Willi Quintana »

Hola, prueba asi:
Salu2

Code: Select all


use cuenta.dbf
aEstruct:=DBStruct()
use

PRINT oPrn NAME cTitle PREVIEW

      If Empty( oPrn:hDC )
         Return(Nil)          // Printer was not installed or ready
      EndIf
 
      nLin    := 0.3
      nPag    := 0
      nLinMax := 27
      nItens  := 0
      PAGE

      FOR i=1 to LEN(aEstruct)
         oPrn:CmSay(nLin,1, aEstruct[i,1] )
         oPrn:CmSay(nLin,3, aEstruct[i,2] )
         oPrn:CmSay(nLin,5, STR(aEstruct[i,3],5,0) + "." + STR(aEstruct[i,4],1,0) )
         nLin += 0.5
      NEXT i

      ENDPAGE
ENDPRINT
 
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Post by desdesummer87 »

Muchas gracias Willi Quintana.

Voy a probar y te cuento...
desdesummer87
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Post by desdesummer87 »

¡¡ EUREKA...!! Miles de gracias Willi. Tu código cumple sobradamente lo que pretendía.... Como has podido comprobar, mis conocimientos son ya escasos pues hace varioss años que dejé la programación ( estoy retocando por compromiso, una aplicación desarrollada hace tiempo), pero si en algún momento surgiera la ocasión de poder corresponderte, cuenta conmigo. Aquí estaré.

Gracias de nuevo.
Post Reply