Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Crear un File External desde Firebird (https://www.clubdelphi.com/foros/showthread.php?t=87386)

bulc 25-12-2014 19:05:03

Crear un File External desde Firebird
 
Hola a todos. Quiero crear un fichero de texto externo, pero éste se coloca dentro del .FDB como una tabla más. He ejecutado la orden (sql) siguiente:
CREATE TABLE EXT_TBL EXTERNAL FILE 'arboles.ext';
COMMIT;

Pero este fichero se enclava en el FDB, no como fichero individual y no puedo accder a él para rellenarlo con los datos.
¿Qué es lo que hago mal? Puedo usar 'D:\TEXTFILES\arboles.txt' ?
Gracias por toda ayuda.
Bulc

Casimiro Notevi 25-12-2014 20:11:40

¿Y la estructura de la tabla?
Código SQL [-]
CREATE TABLE ext1 EXTERNAL 'c:\myfile.txt' 
(   
  field1 char(20),   
  field2 smallint
);

bulc 26-12-2014 11:23:29

Es la siguiente
 
Código SQL [-]
CREATE TABLE EXT_TBL EXTERNAL FILE 'TRONCO.TXT'
(
  NUM CHAR(4),
  NCIE VARCHAR(30),
  NCAS VARCHAR(25),
  NLINE VARCHAR(1)
); 
  COMMIT;
Luego he creado igualmente otra tabla como destino de los datos, claro.
Pero eso no parece que tenga que afectar a la ubicación. Quiero decir que si la tabla externa se ubica dentro del .FDB, no puedo acceder a ella con un editor de texto... Al fin y al cabo se supone que debería ser
eso... Externa! ¿no? ¿O es que hay dos ficheros el EXT_TBLl y el TRONCO.TXT? Si es así, se me ocurre pensar que la tabla EXT_TBL es reflejo de la otra TRONCO.TXT (y accede a sus datos) ¿Es así?
Dime si quieres más explicaciones.
Y gracias por tu dedicación.
bulc

Casimiro Notevi 26-12-2014 12:30:38

Yo lo he usado algunas veces para exportar/importar datos mediante un fichero externo, pero nunca me fijé que existiera el fichero que mencionas (EXT_TBLI).
¿Has mirado la documentación en firebirdsql.org?

bulc 26-12-2014 14:55:22

He mirado el tocho "The Firebird Book" pág. 286
 
He pensado que tal vez el fichero EXT_TBL sirva de espejo del otro 'TRONCO.TXT'.
He metido los datos con el editor Bloc de Notas y luego lo he recortado con el mismo editor del Delphi. La estructura de una linea es esta:
NUM (5 espacios), NCIE (31 espacios), NCAS (27 espacios) NOTHER ( 90 espacios), NLINE (1 espacio). Este último lo destino al retorno de carro tal como indica el libro.
No sé si habría que poner un código ANSI en este final de retorno de carro. Supongo que no.
Ejecuto la orden: SELECT NUM, ECIE FROM EXT_TBL y obtengo esta respuesta:
Statement failed, SLQSTATE = 28000
Access to external file "un.txt" is denied by server administrator.
He repasado los pasos del libro. Me queda probar con un par de líneas a ver qué pasa. En tanto, gracias por tu tiempo. Ah! y feliz año nuevo.
bulc

bulc 27-12-2014 10:30:56

Aclaraciones a los ficheros externos
 
Permite unas aclaraciones. Son el resultado de mirar por varios sitios. He avanzado algo en lo de llevar datos de un fichero de texto a una tabla de firebird.
Esto puede ahorrar mucho trabajo de insercción de datos. De ahí mi interés.
Lo primero que se requiere para usar ficheros externos es habilitar su uso en el fichero Firebird_2_5\firebird.conf. Debe quitarse la almohadilla a la linea #ExternalFileAccess = None y convertirla en esta (en mi caso) otra:
ExternalFileAccess = Restrict D:\DELFIXE3\ALUMNOS;
Si no deja el sistema guardar los datos bajar el cursor de Protección a cero (Panel de Control->Seguridad)
Luego se va uno al SQL y se crean dos tablas. Una será una tabla la imagen interna (en el servidor Firebird) de un fichero de texto externo. Este fichero externo contiene los datos bien encolumnados y con un final de línea EOL que ocupa dos caracteres. Debe situarse en el directorio D:\delfixe3\maderas al cual hemos habilitado.
Por ejemplo la linea:
Nombre + Apellidos + Ciudad tendría 14 + 40 + 30 caracteres y un final de línea. La orden de creación del fichero indica donde estará su imagen.
CREATE TABLE EXT_TBL EXTERNAL FILE 'ALUMNOS.TXT' (
NOM CHAR(14), APELLIDOS CHAR(40), CIUDAD CHAR(30), FLINEA CHAR(2) ); COMMIT;
Ahora al citar con un select la tabla EXT_TBL, esta obtendrá los datos del fichero de texto 'alumnos.txt'.
Si queremos importar los datos desde el fichero externo a otra tabla de firebird, abrimos otra tabla en el .FDB. Con el comando:
CREATE TABLE ALUMNOS ( NOMBRE VARCHAR(14), APELLIDOS VARCHAR(40), CIUDAD VARCHAR(30), FLINEA CHAR(2) );
Una vez creadas todas las tablas podemos insertar los datos del fichero externo (a traves de su imagen) en la tabla firebird. Haríamos así:
INSERT INTO ALUMNOS SELECT NOM, APELLIDOS, CIUDAD, FLINEA FROM EXT_TBL; COMMIT;
.................................................................................................... ..........................
He seguido estos pasos y funciona. El mayor problema, al menos para mí, es colocar correctamente los datos en el editor para que no se descabalguen los datos columnares.
Espero pueda servir. Feliz resacón.
bulc

bulc 27-12-2014 10:35:02

Cita:

Empezado por Casimiro Notevi (Mensaje 487053)
Yo lo he usado algunas veces para exportar/importar datos mediante un fichero externo, pero nunca me fijé que existiera el fichero que mencionas (EXT_TBLI).
¿Has mirado la documentación en firebirdsql.org?

No tiene por qué llevar ese nombre, supongo que otro cualquiera sirve. Lo que importa es el concepto. Ese fichero estará dentro de conjunto .FDB pero es reflejo del original en formato texto. Esa es la clave.

bulc 27-12-2014 17:06:47

Cita:

Empezado por bulc (Mensaje 487079)
No tiene por qué llevar ese nombre, supongo que otro cualquiera sirve. Lo que importa es el concepto. Ese fichero estará dentro de conjunto .FDB pero es reflejo del original en formato texto. Esa es la clave.

He averiguado que se puede convertir un fichero de texto externo en uno interno de firebird usando gbak con el parámetro -co (convert)


La franja horaria es GMT +2. Ahora son las 08:03:03.

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