Topic: Как программно заменить имя директория в DBFile

Есть поле DBFile1 для сохранения в БД ссылок на папки (LinkFolder).
Выбираем в нем нужную папку и после нажатия btnSave в БД сохраняется, например, выбранная "С:\Моя папка".
Открываем эту форму для редактирования записи и нажимаем имеющуюся на форме кнопку "Заменить папку на С:\ ". 
Она делает так Frm_File.DBFile_Dir.dbFileName := 'C:\' и Frm_File.DBFile_Dir.Text := 'C:\'.
Имя папки в поле DBFile1 меняется на C:\, но при сохранении записи новое имя папки не сохраняется.
Каким образом программно заменить имя папки?
Тестовый проект приложен.

Re: Как программно заменить имя директория в DBFile

К сожалению не совсем понимаю, что вы имеете ввиду под заменой имени директории, куда будет сохранен файл? если да, то можете использовать для этого свойство dbCopyTo, пример

Frm_File.DBFile_Dir.dbCopyTo := 'C:\';

тестового проекта в вашем сообщении нет.

Dmitry.

3 (edited by mikhail_a 2017-07-27 14:25:24)

Re: Как программно заменить имя директория в DBFile

Поясняю: есть таблица клиентов с полем DBFile (LinkFolder).
Это поле предназначено для того, чтобы указать директорию (а не файл), в которой лежат документы от данного клиента.
Т.е. каждому клиенту на форме Frm_Client указываем свою отдельную папку.
Если пользователь программы указал клиентскую папку, лежащую на его сетевом диске, то в базу сохраняется ее путь, например, X:\Клиенты\Клиент_1. 
Однако, другие пользователи программы (работающие по сети) открыть эту папку не могут, т.к. сетевого диска с именем X у них нет.
Чтобы иметь возможность другим пользователям открывать данную папку этого клиента, надо заменить диск X:\ в имени папки на полный сетевой путь этого диска, который я получаю из реестра windows.
Т.е. папку X:\Клиенты\Клиент_1 надо заменить на полный сетевой путь, например, на \\SERVER\SALE\Клиенты\Клиент_1
Для этого, в момент сохранения клиента надо сделать замену, чтобы в БД сохранилось \\SERVER\SALE\Клиенты\Клиент_1, а не указанное пользователем X:\Клиенты\Клиент_1

Каким образом сделать это?

Post's attachments

Attachment icon DBFile_test.zip 3.7 kb, 334 downloads since 2017-07-27 

Re: Как программно заменить имя директория в DBFile

mikhail_a
попробуйте так

procedure Frm_File_Btn_Save_OnAfterClick (Sender: string);
var
    sFolder: string;
begin
    if Frm_File.DBFile_Dir.dbFileIsChanged then
    begin
        sFolder := SQLExecute('SELECT File_Dir_filename FROM tbl_files WHERE id='+IntToStr(Frm_File.Btn_Save.dbGeneralTableId));
        if sFolder <> '' then
        begin
            Delete(sFolder, 1, 2); // удаляем X:
            SQLExecute('UPDATE tbl_files SET File_Dir_filename="\\SERVER\SALE'+sFolder+'"');
        end;
    end;
end;
Dmitry.

Re: Как программно заменить имя директория в DBFile

Спасибо. Ход мыслей понятен - надо работать с базой напрямую, а не пытаться менять свойства у компонента DBFile.
Ваш скрипт надо поправить - в тексте запроса UPDATE надо добавить такой же WHERE, как и в SELECT.

Re: Как программно заменить имя директория в DBFile

Точно, забыл про WHERE в UPDATE

Dmitry.