Записать файл в базу данных

attachment.php


скрипт для эсперта
Код:
SET TERM ^ ;

create or alter procedure PRC_DIR_FILES
returns (
    DFS_MODIFIED timestamp,
    DFS_CREATED timestamp,
    DFS_DATASIZE integer,
    DFS_FOLDER varchar(128),
    DFS_PATH varchar(128),
    DFS_FILE varchar(128))
as
BEGIN
  FOR
    SELECT IP$FILESTORAGE.PATH, IP$FILESTORAGE.CREATED, IP$FILESTORAGE.MODIFIED, IP$FILESTORAGE.DATASIZE,
           STRREPLACE(SUBSTR(IP$FILESTORAGE.PATH,1,STRPOS(IP$FILESTORAGE.PATH,'\')),'\',''),
           STRREPLACE(IP$FILESTORAGE.PATH, SUBSTR(IP$FILESTORAGE.PATH,1,STRPOS(IP$FILESTORAGE.PATH,'\')), '')
    FROM   IP$FILESTORAGE
    INTO :DFS_PATH,
         :DFS_CREATED,
         :DFS_MODIFIED,
         :DFS_DATASIZE,
         :DFS_FOLDER,
         :DFS_FILE
  DO
  SUSPEND;
END^

SET TERM ; ^

DESCRIBE PROCEDURE PRC_DIR_FILES
'Файловая система (PRC_DIR_FILES)';

/* Following GRANT statetements are generated automatically */

GRANT SELECT ON IP$FILESTORAGE TO PROCEDURE PRC_DIR_FILES;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PRC_DIR_FILES TO SYSDBA;


типовушки
Код:
ОПЕРАЦИЯ Системные: Файловая система: Выгрузить из базы
ВЫЧИСЛИТЬ
 {инициализация записи из журнала}
  ФС ЭТО сис_файлы; ЕСЛИ (ИЗ_ЖУРНАЛА(ФС)=0) ТО СТОП_ВСЕ; КОНЕЦ_ЕСЛИ;
 {диалог с пользователем}
  лок_путь=""; лок_путь=ВЫБОР_ДИР; ЕСЛИ (лок_путь="") ТО СТОП_ВСЕ; КОНЕЦ_ЕСЛИ;
  фс_файл="db:\"+ФС.путь; лок_файл=лок_путь+"\"+СЛОВО(ВСЕГО_СЛОВ(фс_файл,"\"),фс_файл,"\");
 {действие}
  ЕСЛИ (НЕ ФАЙЛ_КОПИРОВАТЬ(фс_файл,лок_файл)) ТО
    СООБЩЕНИЕ("Ошибка копирования"+СИМВ(13)+"Источник ["+фс_файл+"]"+СИМВ(13)+"Получатель ["+лок_файл+"]");
  ИНАЧЕ
    СООБЩЕНИЕ("Файл успешно скопирован"+СИМВ(13)+"Источник ["+фс_файл+"]"+СИМВ(13)+"Получатель ["+лок_файл+"]");
  КОНЕЦ_ЕСЛИ;
 {выход}
КОНЕЦ
 
ОПЕРАЦИЯ Системные: Файловая система: Загрузить в базу
ВЫЧИСЛИТЬ
 {инициализация записи из журнала}
  ФС ЭТО сис_файлы; ЕСЛИ (ИЗ_ЖУРНАЛА(ФС)=1) ТО фс_путь=ФС.каталог+"\"; ИНАЧЕ фс_путь="\"; КОНЕЦ_ЕСЛИ;
 {диалог с пользователем}
  лок_файл=ВЫБОР_ФАЙЛА; ЕСЛИ (лок_файл="") ТО СТОП_ВСЕ; КОНЕЦ_ЕСЛИ;
  фс_путь=ВВЕСТИ_ЗНАЧЕНИЕ("Введите подкаталог",фс_путь); фс_файл="db:"+фс_путь+ИМЯ_ФАЙЛА(лок_файл);
  фс_файл=ЗАМ(фс_файл,"\\","\");
 {действие}
  ЕСЛИ (НЕ ФАЙЛ_КОПИРОВАТЬ(лок_файл,фс_файл)) ТО
    СООБЩЕНИЕ("Ошибка копирования"+СИМВ(13)+"Источник ["+лок_файл+"]"+СИМВ(13)+"Получатель ["+фс_файл+"]");
  ИНАЧЕ
    СООБЩЕНИЕ("Файл успешно скопирован"+СИМВ(13)+"Источник ["+лок_файл+"]"+СИМВ(13)+"Получатель ["+фс_файл+"]");
  КОНЕЦ_ЕСЛИ;
 {выход}
  сис_файлы.ОБНОВИТЬ; СТАРТ_ЖУРНАЛ(сис_файлы);
КОНЕЦ
 
ОПЕРАЦИЯ Системные: Файловая система: Переименовать
ВЫЧИСЛИТЬ
 {инициализация записи из журнала}
  ФС ЭТО сис_файлы; ЕСЛИ (ИЗ_ЖУРНАЛА(ФС)<>1) ТО ВЫХОД; КОНЕЦ_ЕСЛИ;
  фс_файл_тек=ФС.файл;
 {диалог с пользователем}
  фс_файл_нов=ВВЕСТИ_ЗНАЧЕНИЕ("Переименовать",фс_файл_тек);
  ЕСЛИ (фс_файл_нов=фс_файл_тек) ИЛИ (фс_файл_нов="") ТО ВЫХОД; КОНЕЦ_ЕСЛИ;
  ЕСЛИ НЕ ВОПРОС("Переименовать файл ["+"db:\"+ФС.путь+"] в ["+ЗАМ("db:\"+ФС.путь,фс_файл_тек,фс_файл_нов)+"]?",НЕТ) ТО
    ВЫХОД;
  КОНЕЦ_ЕСЛИ;
 {действие}
  ЕСЛИ НЕ (ФАЙЛ_КОПИРОВАТЬ("db:\"+ФС.путь,ДИР_ВРЕМЕННАЯ+"\"+фс_файл_нов)) ТО СООБЩЕНИЕ("Ошибка выгрузки из базы"); ВЫХОД; КОНЕЦ_ЕСЛИ;
  ЕСЛИ НЕ (ФАЙЛ_УДАЛИТЬ("db:\"+ФС.путь))                                  ТО СООБЩЕНИЕ("Ошибка удаления из базы"); ВЫХОД; КОНЕЦ_ЕСЛИ;
  ЕСЛИ НЕ (ФАЙЛ_КОПИРОВАТЬ(ДИР_ВРЕМЕННАЯ+"\"+фс_файл_нов,ЗАМ("db:\"+ФС.путь,фс_файл_тек,фс_файл_нов))) ТО СООБЩЕНИЕ("Ошибка загрузки в базу"); ВЫХОД; КОНЕЦ_ЕСЛИ;
 {выход}
  сис_файлы.ОБНОВИТЬ; СТАРТ_ЖУРНАЛ(сис_файлы);
КОНЕЦ
 
 
ОПЕРАЦИЯ Системные: Файловая система: Удалить из базы
ВЫЧИСЛИТЬ
 {инициализация записи из журнала}
  ЦИКЛ ИЗ_ЖУРНАЛА сис_файлы ФС
    фс_файл="db:\"+ФС.путь;
    ЕСЛИ (НЕ ВОПРОС("Удалить ["+фс_файл+"]?",НЕТ)) ТО СТОП_ВСЕ; КОНЕЦ_ЕСЛИ;
   {проверка на выполнение резервной копии}
    ЕСЛИ ПОЗ("db:\[FS_BACKUP]\",фс_файл)=0 ТО
      фс_откуда=фс_файл; фс_куда=ЗАМ(фс_файл,"db:\","db:\[FS_BACKUP]\")+"["+СТР(ДАТА_ТЕК)+"-"+СТР(ВРЕМЯ_ТЕК)+"]"; ок=ФАЙЛ_КОПИРОВАТЬ(фс_откуда,фс_куда);
    ИНАЧЕ
      фс_куда=""; ок=НЕТ;
    КОНЕЦ_ЕСЛИ;
   {действие}
    ЕСЛИ (НЕ ФАЙЛ_УДАЛИТЬ(фс_файл)) ТО
      СООБЩЕНИЕ("Ошибка удаления"+СИМВ(13)+"Источник ["+фс_файл+"]");
    ИНАЧЕ
      СООБЩЕНИЕ("Файл успешно удален"+СИМВ(13)+"Источник ["+фс_файл+"]"+СИМВ(13)+?(ок,"Резервная копия: "+фс_куда,""));
    КОНЕЦ_ЕСЛИ;
  КОНЕЦ_ЦИКЛА;
 {выход}
  сис_файлы.ОБНОВИТЬ; СТАРТ_ЖУРНАЛ(сис_файлы);
КОНЕЦ
 

Вложения

  • Безымянный.PNG
    Безымянный.PNG
    50.1 KB · Просмотры: 807
Это все понятно, мне больше интересует следующее:
загрузить файл в базу данных миную возможности внутреннего языка, например скрипт, который будет запущен сторонней программой.

А это я использую, хорошая вещь.
 
Назад
Сверху