![]() |
Dudas en la creación de un archivo de texto desde FireBird
:confused:
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:
RDB$RELATION_NAME = :TablaPaso; Donde TablaSal es la Tabla de salida "C:\tabla.txt" Tablapaso esla tabla temporal "Paso<Tabla>"
successful execution of subsequent statements. Access to external file "C:\TABF22.TXT " is denied by server administrator.
Juan Carlos |
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
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 :D Este sp clona tabla si existe, con FireBird 1.5 Lo otro estoy de administrador del equipo Juan Carlos |
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. |
Por cierto, el fichero de configuración es el firebird.conf.
|
lei el pdf con la configuración de los Archivos Externos (External Files), probe Full, :confused: nada, también probe Restrict C:\ExternalTables, :( nada
aún tengo el mismo problema:( |
¿ 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. |
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 :confused:
Saludos. :( Juan Carlos |
Cita:
Hasta luego. ;) |
:D Perdon se me olvido señalar que esta corriendo en mi máquina, en forma local.
saludos... |
:( 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:D |
Problema de extraer información de FireBird a txt
Aún no he encontrado la respuesta, pero sigo buscandola...
Juan Carlos:) |
:) 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:D Gracias a todos Juan Carlos |
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:rolleyes: |
La franja horaria es GMT +2. Ahora son las 06:01:03. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi