Page 1 of 1
Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 7:27 am
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
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 7:34 am
by Antonio Linares
Prueba asi:
Code: Select all
for n = 1 to FCount()
? FieldName( n ), FieldType( n ), Len( FieldGet( n ) )
next
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 9:07 am
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
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 9:49 am
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
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 10:19 am
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...
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 11:35 am
by Antonio Linares
Prueba con este código:
ValType( FieldGet( n ) )
Re: Imprimir estructura de una base dbf
Posted: Tue May 24, 2011 8:26 pm
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...
Re: Imprimir estructura de una base dbf
Posted: Wed May 25, 2011 3:11 pm
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
Re: Imprimir estructura de una base dbf
Posted: Thu May 26, 2011 3:48 pm
by desdesummer87
Muchas gracias Willi Quintana.
Voy a probar y te cuento...
Re: Imprimir estructura de una base dbf
Posted: Thu May 26, 2011 4:10 pm
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.