Discussion:
exportar tabla a txt manteniendo el tamaño de todos los campos aunque estos sean nulos
(demasiado antiguo para responder)
kko
2015-05-26 11:51:37 UTC
Permalink
Buenas

Necesito exportar una tabla a txt, para ello habia pensado hacerlo mediante una cosulta.

ejemplo tabla:

campo1 : AAA 'tamaño 3
campo2: 'tamaño 10
campo3: CC tamaño 3


si hago una consulta normal:

select campo1 & camp2 & campo3 from tabla;

saldria esto:

AAACC



yo lo que querria es que me saliera esto otro:

AAA CC


en plan cutre, que si funciona seria:

select campo1& iif(campo2 is null,' ',campo2)&campo3 from tabla;


la solucion es sencilla si fueran 3 campos, pero si tengo 20...
seria bueno que hubiera una funcion que se le pasara el campo y el tamaño del campo y el hiciera la conversion
Alguien podria ayudarme ?

Un millon de gracias
José Mª Fueyo
2015-05-26 14:58:44 UTC
Permalink
Hola
No nos comentas que versión de Access utilizas.
Deberías crearte una especificación de exportación de texto (ancho fijo), y utilizarla mediante el método acExportFixed del objeto DoCmd.

Salu2,
José Mª Fueyo
kko
2015-05-26 18:16:07 UTC
Permalink
Perdonar, utilizo Access 2003

Acabo de encontrar una funcion , la rpad, retocada un poquillo para que me acepte los campos nulos que me soluciona en parte el problema, digo en parte porque no se porque en algunos registros con datos me sale #Error.

' chr(32) corresponde al espacio en blanco

select Rpad([tabla1].campo1,chr(32),3)& Rpad([tabla1].campo2,chr(32),10)&
Rpad([tabla1].campo3,chr(32),3) as Expr1 from tabla1;

Aprovecho tambien para preguntar si existe un limite de longitud en el campo Expr1

os paso dicha funcion por si a alguien pueda servirle:

Function Rpad(MyValue$, MyPadCharacter$, MyPaddedLength%)
Dim PadString As String

If (Len(MyValue) > 0) Then
PadLength = MyPaddedLength - Len(MyValue)
Else
PadLength = MyPaddedLength

End If

For x = 1 To PadLength
PadString = MyPadCharacter & PadString
Next
Rpad = MyValue + PadString

End Function
José Mª Fueyo
2015-05-27 07:35:50 UTC
Permalink
Hola
Sigo pensando que con una especificación de importación/exportación lo tendrías solucionado.
Mira a ver sí esto te puede servir
http://www.blueclaw-db.com/export-specifications.htm

Respecto a los valores que te dan error con tu función, ¿la has depurado?

Salu2,
José Mª Fueyo
kko
2015-05-27 07:43:04 UTC
Permalink
si ya lo he solucionado , he modificado la funcion rpad

Public Function RPad1(s As String, L As Integer) As String
If Len(s) < L Then
RPad1 = s & Space(L - Len(s))
Else
RPad1 = s
End If

y en la consulta para que los campos nulos me salga su tamaño:

select iif([tabla1].[campo2] is null,space(10);rpad([tabla1].[campo2],10))

con esto consigo que si el campo es nulo , me ponga como formato el tamaño del campo y si no lo es y el tamaño de len(campo2) <10 me lo rellene de espacios. Con el metodo que tu comentas esto no me lo hacia.

Gracias de todos modos
José Mª Fueyo
2015-05-27 07:54:01 UTC
Permalink
Hola de nuevo
Tienes la función Nz que permite tratar los valores nulos. Mira en la ayuda para más información.

Salu2,
José Mª Fueyo
kko
2015-05-27 09:04:10 UTC
Permalink
Creia que la funcion Nz era unicamente para operaciones aritmetricas...
José Mª Fueyo
2015-06-02 07:19:54 UTC
Permalink
Hola
https://msdn.microsoft.com/en-us/library/office/aa172237%28v=office.11%29.aspx
Aparte de esto, tienes la ayuda para más información.

Salu2,
José Mª Fueyo
kko
2015-06-02 16:45:41 UTC
Permalink
Muchas gracias por todo, no he utilizado el nz , con el iif y el rpad lo he podido hacer
Loading...