Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Importa y Exportar

Hola,

Estoy creando una tabla externa desde firebird, pero me trae caracteres extraños, en concreto son dos caracteres del final de las lineas, trate de sacarlas agregando un campo mas a mi tabla de largo 2, pero aun asi no me resulta, expongo a continuacion mas detalles:

Comando para creat tabla externa

create table tablaex external ´c:\paso.txt´
(
campo01 char(4),
campo02 char(4),
campo03 char(4),
campo04 char(2)
)

El archivo de texto tiene la siguiente informacion:

100020003000
400050006000

Cuando ejecuto el comando, la tabla queda con la siguiente informacion:

1000 2000 3000
||40 0050 0060

Cualquier ayuda sera bienvenida, de antemano gracias.

Ulises
Responder Con Cita
  #2  
Antiguo 03-05-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Los caracteres son del retorno de carro del fichero TXT, creo que son chr(13)+chr(10)

Yo para leer desde ficheros de texto lo que hago es leerlo con ReadLn ( o leerlo con Read y despreciar los ultimos 2 caracteres). Si necesito meter todo el fichero en la BBDD leo los registros uno a uno.

O si sólo lo necesitas hacer una vez lo puedes habrir desde Excel, darle el formato adecuado (ancho de cada campo) y guardarlo con formato DBase. Una vez como DBF es fácil de leer.

Saludos.
Responder Con Cita
  #3  
Antiguo 03-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Importar y Exportar

Gracias por tu respuesta,

Exactamente como tu dices esos caracteres corresponden al salto de linea, ahora bien con un readln efectivamente lo podria saltar, pero lo que yo estoy haciendo es que la base me lea directamente el archivo txt mediante un sp, o sea sin utilizar delphi.

Como podras apreciar no me serviria el readln pues el SQL no tiene esa instrucción, gracias de todas maneras.

Ulises
Responder Con Cita
  #4  
Antiguo 03-05-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Usas las funciones trim o ltrim.

Si no estan disponibles es las udf extras estan.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #5  
Antiguo 03-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Gracias por tu respuesta,

En realidad cuando tu ejecutas el comando
Código:
create table
el firebird te trae en forma automatica lo que existe en el archivo de texto, no veo donde podria colocar la udf trim o similar dentro del comando.

Slds

Ulises
Responder Con Cita
  #6  
Antiguo 03-05-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Mira las funciones las puede usar con una simple intrucion sql para actualizar cada registro con un trim de lso campos.

Esto es para que elimines los caracteres de esapcio.

Bueno esto es una solucion Quisas no la que esperabas.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #7  
Antiguo 03-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Entiendo tu respuesto y al mismo tiempo no, para graficar te muestro el codigo que trae en forma inmediata los datos que estan en el archivo de texto a la tabla que se crea mediante el comando:

Código:
create table archivoext external file 'c:\paso.txt'
(
te_campo01 char(04),
te_campo02 char(04),
te_campo03 char(04),
te_campo04 char(04),
te_campo05 char(04),
te_campo06 char(04),
retorno    char(02)
);
a lo mejor no te entiendo pero donde segun tu iria el ltrim o en su defecto otro similar, te recuerdo que solamente la idea es hacer esta instrucción.

Gracias de nuevo

ulises
Responder Con Cita
  #8  
Antiguo 05-05-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Sigo sin respuesta para tu duda, pero he hecho algunas pruebas y con interbase 6.5 el create me coje bien los datos (en campo04 pone los dos caracteres || ).

No supe hacer el Stored Procedure, pero creando la tabla directamente todo fue bien.

Sin embargo con firebird 1.5 no consegui resultado alguno, al crear la BBDD ya me daba el error :
Código:
 
Please retry, specifying an option
Statement: create table tablaex external file 'c:\paso.txt'
y la tabla tablaex no era creada.

Bueno, espero que esto te sirva de algo. Prueba con Interbase y si te funciona busca en los bugs de Firebird.

Cuando tenga tiempo seguiré con este tema porque, si funciona, me viene bien para un programa, me parece mejor opción que leer el fichero de texto.

Saludos.
Responder Con Cita
  #9  
Antiguo 05-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Gracias Fly por tu respuesta,

con respecto a pq no creo la tabla puede ser por la configuracion del server, tienes que ir a firebird.conf o interbase.conf (no se si será asi) y ver los parametros del acceso a tablas externas que generalmente esta denegado y ademas con comentario, para mayor explicacion te copio parte del archivo:

Código:
# ----------------------------
# External File Paths/Directories
#
# ExternalFileAccess may be None, Full or Restrict. If you choose 
# Restrict, provide ';'-separated trees list, where external files 
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'None' disables any use of external files
# on your site. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalTables', 
# for unix - '/db/extern;/mnt/extern').
#
# NOTE: THE EXTERNAL TABLE ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL TABLE LOCATIONS!
#
# Type: string (special format)
#
ExternalFileAccess = Restrict c:\
a lo mejor con esto te funciona, y con respecto a lo que dices de que es una buena herramienta comparto contigo la misma opinion por eso estoy tan interesado en ello.

Si alguien me pudiera ayudar a mi en firebird seria super bueno....

Gracias

Ulises
Responder Con Cita
  #10  
Antiguo 06-05-2005
orodriguezc orodriguezc is offline
Miembro
 
Registrado: nov 2003
Ubicación: Cartagena - Colombia
Posts: 33
Poder: 0
orodriguezc Va por buen camino
Hola ulises,


Hice la prueba con Firebird 1.5 y funcionó perfectamente. La siguiente es la estructura que utilice para la prueba:

Código:
CREATE TABLE TABLAEXTERNA EXTERNAL 'C:\TABLAEXTERNA.TXT' (
    CAMPO1  CHAR(4),
    CAMPO2  CHAR(4),
    CAMPO3  CHAR(4),
    CR      CHAR(2)
)
Pienso que debes verificar que tu archivo externo tenga exactamente la cantidad de caracteres por línea que crees que tiene. Algunos editores no son capaces de visualizar ciertos caracteres y eso puede causar confusión.

Saludos.
Responder Con Cita
  #11  
Antiguo 06-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Gracias por tu respuesta,


Me podrias indicar con que editor hiciste la prueba, en realidad yo he probado con varios, tal como el notepad, ultraedit, edit.

En realidad es bastante util el trabajar de esta manera pues te evitas un monton de pasos que segun lo que he visto se hacen en delphi ahora, pero a veces es mas conveniente que los haga la base, y se tiene la oportunidad de exportar directamente desde la base a un archivo de texto tambien.

Gracias de nuevo

Ulises
Responder Con Cita
  #12  
Antiguo 06-05-2005
orodriguezc orodriguezc is offline
Miembro
 
Registrado: nov 2003
Ubicación: Cartagena - Colombia
Posts: 33
Poder: 0
orodriguezc Va por buen camino
Con el editor de delphi

Hola ulises,

La prueba la hice tanto con el editor de Delphi 5 como con el Edit.com, obteniendo buenos resultados. El notepad también podría funcionar, pero he tenido malas experiencias con él en otras ocasiones y por eso no lo uso para editar ete tipo de archivo.


Saludos.
Responder Con Cita
  #13  
Antiguo 06-05-2005
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Exacto Ulises, no tenia nada configurado en ExternalFileAccess.

Lo he activado y ahora si va, y funciona perfectamente y la extructura es la misma que usó orodriguezc, la única pega es que no pilla la última línea si no existe al final de ella el retorno de carro.

Pero coge bien los cuatro campos ( 3 + retorno_de_carro)

Los caracteres de fin de linea son 0Dh+0Ah (osea 13+10 en decimal)

En cuanto a editores, usa uno hexadecimal, por ejemplo el WinHex.

Saludos.
Responder Con Cita
  #14  
Antiguo 08-05-2005
Ulises Ulises is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago de Chile
Posts: 82
Poder: 21
Ulises Va por buen camino
Gracias por tu orientación,

exactamente habia creado mi archivo con notepad e insistia en usar el mismo archivo, lo cree con el edit.com y funciona a la perfecion, ojala esto sirva para muchos del foro.

Gracias a todos de nuevo

Ulises.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:00:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi