Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 25-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y la estructura de la tabla?
Código SQL [-]
CREATE TABLE ext1 EXTERNAL 'c:\myfile.txt' 
(   
  field1 char(20),   
  field2 smallint
);
Responder Con Cita
  #3  
Antiguo 26-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
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

Última edición por nlsgarcia fecha: 26-12-2014 a las 13:49:44. Razón: Sintaxis e Identación SQL
Responder Con Cita
  #4  
Antiguo 26-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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?
Responder Con Cita
  #5  
Antiguo 26-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 27-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 27-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.
Responder Con Cita
  #8  
Antiguo 27-12-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Cita:
Empezado por bulc Ver Mensaje
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)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consejo con external table Firebird 2.5 jars SQL 3 13-11-2014 16:46:35
Crear DB Firebird desde delphi totote Conexión con bases de datos 3 27-12-2007 02:25:17
Error al crear tabla con "external file" hecospina Firebird e Interbase 1 11-11-2007 01:22:02
external file en IBExpress santiago14 Firebird e Interbase 1 29-07-2004 20:28:17
Crear una external Function que haga un round RaulChemical Firebird e Interbase 3 16-02-2004 13:18:44


La franja horaria es GMT +2. Ahora son las 22:34:55.


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