Imprimir estructura de una base dbf

Imprimir estructura de una base dbf

Postby desdesummer87 » Tue May 24, 2011 7:27 am

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
desdesummer87
 
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Postby Antonio Linares » Tue May 24, 2011 7:34 am

Prueba asi:
Code: Select all  Expand view  RUN

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Imprimir estructura de una base dbf

Postby desdesummer87 » Tue May 24, 2011 9:07 am

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
desdesummer87
 
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Postby JmGarcia » Tue May 24, 2011 9:49 am

Para crear un DBF desde código se hace así:
Code: Select all  Expand view  RUN
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  Expand view  RUN
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 los campos 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  Expand view  RUN
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Imprimir estructura de una base dbf

Postby desdesummer87 » Tue May 24, 2011 10:19 am

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...
desdesummer87
 
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Postby Antonio Linares » Tue May 24, 2011 11:35 am

Prueba con este código:

ValType( FieldGet( n ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Imprimir estructura de una base dbf

Postby desdesummer87 » Tue May 24, 2011 8:26 pm

Gracias a todos los que se han dignado contestar, pero lamentablemente el problema persiste. Nada de lo aportado lleva a la salida por impresora...
desdesummer87
 
Posts: 18
Joined: Thu May 19, 2011 4:50 pm

Re: Imprimir estructura de una base dbf

Postby Willi Quintana » Wed May 25, 2011 3:11 pm

Hola, prueba asi:
Salu2

Code: Select all  Expand view  RUN


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
 
User avatar
Willi Quintana
 
Posts: 1022
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Imprimir estructura de una base dbf

Postby desdesummer87 » Thu May 26, 2011 3:48 pm

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

Postby desdesummer87 » Thu May 26, 2011 4:10 pm

¡¡ 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.
desdesummer87
 
Posts: 18
Joined: Thu May 19, 2011 4:50 pm


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 8 guests