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 04-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Question Dudas en la creación de un archivo de texto desde FireBird


Premisas:

1.- Estoy utilizando Delphi 6 y FireBird 1.5 versión final.
2.- Trabajando solamente con sp.
3.- Utilizando "execute statement"
4.- Windows 2000 professional como administrador.

Caso:
  • Tengo que obtener la información de cualquier tabla, para lo cual tengo un sp que que clona la tabla con todos sus campos, con el cual creo la tabla temporal.
  • Posteriormente creo en otro sp paso la información deseada a la tabla temporal.
  • Ya que estoy trabajando con string para construir la tabla externa, en la opción External File '<NombreTablaExterna>', no la puedo utilizar por ' ', utilizo la siguiente
Update RDB$RELATIONS Set RDB$EXTERNAL_FILE = :TablaSal Where
RDB$RELATION_NAME = :TablaPaso;

Donde
TablaSal es la Tabla de salida "C:\tabla.txt"
Tablapaso esla tabla temporal "Paso<Tabla>"
  • Cuando utilizo el procedimiento sin el Update RDB$RELATIONS ...., me crea la tabla con la información, pero cuando lo activo sale el siguiente mensaje.
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Access to external file "C:\TABF22.TXT " is denied by server administrator.
  • No me crea la tabla de salida ni la temporal con la información.
  • He leido la información al respecto en el foro creo que lo estoy haciendo bien. Creo?
Sin otro particular, pero con dudas

Juan Carlos
Responder Con Cita
  #2  
Antiguo 04-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
No he trabajado con tablas externas... pero me llama la atención que actualices manualmente el diccionario de datos. Que no debieras hacer un

Create table external file 'filespec' etc, etc.

???

Por otro lado, estas seguro que el usuario con el que corre el servidor de interbase tiene permisos para crear un archivo en la raiz del disco C??

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 04-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Talking

Juan Antonio

Respondiendo a tus preguntas
te envio sp que clona tablas

CREATE PROCEDURE P_CLONATABLA (
TABLA VARCHAR(10),
NEDES INTEGER)
AS
DECLARE VARIABLE CAMPO VARCHAR(100);
DECLARE VARIABLE SOURCE VARCHAR(100);
DECLARE VARIABLE TOTALCAMPOS INTEGER;
DECLARE VARIABLE CONTADOR INTEGER;
DECLARE VARIABLE LARGO INTEGER;
DECLARE VARIABLE SCALE INTEGER;
DECLARE VARIABLE TIPO INTEGER;
DECLARE VARIABLE SUBTIPO INTEGER;
DECLARE VARIABLE NPRECISION INTEGER;
DECLARE VARIABLE CTIPO VARCHAR(20);
DECLARE VARIABLE SQL VARCHAR(32000);
DECLARE VARIABLE BORRAR VARCHAR(100);
DECLARE VARIABLE TABLAPASO VARCHAR(20);
DECLARE VARIABLE TABLASAL CHAR(20);
begin
TablaPaso = 'PASO' || TABLA;
TablaSal = 'C:\' || TABLA || '.TXT';
Select Count(*)
From rdb$relation_fields
where rdb$relation_name = :TablaPaso
into :TotalCampos;
if (TotalCampos = 0) then
Begin
Sql = 'CREATE TABLE ' || TablaPaso || ' (';

Contador = 1;
Select Count(*)
From rdb$relation_fields
where rdb$relation_name = :TABLA
into :TotalCampos;
For
Select R.RDB$Field_Name, r.rdb$Field_Source, f.rdb$Field_Length,
f.rdb$Field_Scale, f.rdb$Field_Type, f.rdb$Field_Sub_Type,
f.rdb$Field_Precision From rdb$relation_fields R, rdb$Fields f
where R.rdb$relation_name = :Tabla and r.rdb$Field_Source = f.rdb$Field_Name
ORDER BY R.rdb$field_position
Into :Campo, :Source, :Largo, :Scale, :Tipo, :SubTipo,
:nPrecision
Do
Begin
if (substr(f_lrtrim(Source),1,4) <> 'RDB$') then
Begin
if (Contador < TotalCampos) then
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(Source) || ',';
end
else
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(Source);
end
End
else
Begin
Scale = Abs(Scale);
if (Tipo = 7) Then cTipo = 'SMALLINT';
if (Tipo = 8) THEN cTipo = 'INTEGER';
if (Tipo = 10) Then cTipo = 'FLOAT';
if (Tipo = 27) Then cTipo = 'DOUBLE PRECISION';
if (Tipo = 12) THEN cTipo = 'DATE';
if (Tipo = 13) Then cTipo = 'TIME';
if (Tipo = 35) Then cTipo = 'TIMESTAMP';
if (Tipo = 14) THEN cTipo = 'CHAR(' || f_lrtrim(Cast (Largo as VarChar(5))) || ')';
if (Tipo = 37) THEN cTipo = 'VARCHAR(' || f_lrtrim(Cast (Largo as VarChar(5))) || ')';
if (((Tipo = 8) or (Tipo = 16)) and
(SubTipo = 1)) Then cTipo = 'NUMERIC('|| f_lrtrim(Cast (nPrecision as VarChar(5))) ||
',' || f_lrtrim(Cast (Scale as VarChar(5))) || ')';
if (((Tipo = 8) or (Tipo = 16)) and
(SubTipo = 2)) Then cTipo = 'DECIMAL('|| f_lrtrim(Cast (nPrecision as VarChar(5))) ||
',' || f_lrtrim(Cast (Scale as VarChar(5))) || ')';
if ((Tipo = 261) and (SubTipo = 0)) Then cTipo = 'BLOB SUB_TYPE 0 SEGMENT SIZE 80';
if ((Tipo = 261) and (SubTipo = 1)) Then cTipo = 'BLOB SUB_TYPE 1 SEGMENT SIZE 80';
if (Contador < TotalCampos) then
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(cTipo) || ',';
end
else
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(cTipo);
end
End
Contador = Contador + 1;
End
Sql = Sql || ')';
execute statement Sql;
--Update RDB$RELATIONS Set RDB$EXTERNAL_FILE = :TablaSal Where
-- RDB$RELATION_NAME = :TablaPaso;
End
Else
Begin
Borrar = 'Delete from ' || TablaPaso || ' Where Ne =' || Cast(NeDes as VarChar(5));
execute statement Borrar;
End
end

Este sp clona tabla si existe, con FireBird 1.5

Lo otro estoy de administrador del equipo

Juan Carlos

Última edición por teletranx fecha: 24-03-2004 a las 17:24:51.
Responder Con Cita
  #4  
Antiguo 04-03-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Comprueba la variable ExternalFileAccess del fichero de configuración de Firebird, si está a None cámbialo a Full

En las Release Notes encontrarás más información (en este link las encontrarás en castellano) http://www.ibphoenix.com/downloads/F...tesSpanish.pdf

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 04-03-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Por cierto, el fichero de configuración es el firebird.conf.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 05-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
lei el pdf con la configuración de los Archivos Externos (External Files), probe Full, nada, también probe Restrict C:\ExternalTables, nada

aún tengo el mismo problema
Responder Con Cita
  #7  
Antiguo 05-03-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
¿ Has quitado el símbolo # (comentario) al principio de la línea ?. Creo que debes reiniciar el Servidor Firebird una vez configurado el cambio.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 05-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Si lo hice, lo de eliminar #, y también de reiniciar la máquina pero igual me sale el mismo mensaje de que el se ha negado el acceso por el administrador del servidor


Saludos.

Juan Carlos
Responder Con Cita
  #9  
Antiguo 05-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por teletranx
estoy de administrador del equipo
Pues el usuario que realmente importa es bajo el que corre el servicio de firebird.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 05-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Talking

Perdon se me olvido señalar que esta corriendo en mi máquina, en forma local.

saludos...
Responder Con Cita
  #11  
Antiguo 09-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Unhappy

He seguido todos los datos que que me han dado, pero aún no tengo los resultados deseados.


Todo los estoy trabajando en forma local con Ib expert version 2004.03.01

Saludos a todos, más a los que me puedan ayudar, Gracias


Juan Carlos
Responder Con Cita
  #12  
Antiguo 10-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Wink Problema de extraer información de FireBird a txt

Aún no he encontrado la respuesta, pero sigo buscandola...


Juan Carlos
Responder Con Cita
  #13  
Antiguo 15-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Talking

Un miembro del foro me hablo que ya hace tiempo, un aliado (otro miembro del foro), escribio una solución al respecto, pero no se acuerda en que fecha, pero habla de respaldo en archivos txt desde FireBird o InterBase en procedimientos almacenados


Lo que les tipo si alguien sale del link, que lo coloque como respuesta, o directamente que coloque la rutina

Gracias a todos

Juan Carlos
Responder Con Cita
  #14  
Antiguo 19-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Wink

Aún sigo con el mismo problema.

Me pregunto, no será la versión de FireBird?
Voy a probar con la versión 1.0.3.


Saludos

Juan Carlos
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 12:32:38.


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