Писарев Петр
Гуру
Записать файл в базу данных
Как с помощью скрипта это можно сделать?
Как с помощью скрипта это можно сделать?
Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Как с помощью скрипта это можно сделать?
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)+?(ок,"Резервная копия: "+фс_куда,""));
КОНЕЦ_ЕСЛИ;
КОНЕЦ_ЦИКЛА;
{выход}
сис_файлы.ОБНОВИТЬ; СТАРТ_ЖУРНАЛ(сис_файлы);
КОНЕЦ