1 (edited by savage 2014-08-14 00:06:27)

Topic: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

День добрый, есть проблема:
есть форма с возможностью выбора файла (указание пути к нему) через DBFile. Инфо слхраняется в таблицу в поле "документ". В зависимости от наличия выбранного файла в  поле ввода DBFile, в таблице должно в соответствующем поле "наличие" сохраняться " да/нет".
собственно, вопрос:
1. Что оптимальнее - действовать через calculate в поле "наличие" (если в поле"документ" не пусто, то поле "наличие" имеет значение да, иначе - нет) или при сохранении формы, по условию "файл выбран" сохранять в таблицу в поле "наличие" да, иначе -нет?
2. Как реализовать оба варианта?

Re: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

Приветствую,


думаю будет лучше сделать это через вычисляемое поле, которое будет иметь следующий вид:

(case when [документ] is null then 'Нет' else 'Да' end)

через скрипт не рекомендую, т.к. придется делать проверку на наличие файла и все равно может возникнуть ошибка при сохранении файла в базу, а это сложновато отловить скриптом.

Dmitry.

3 (edited by savage 2014-08-06 19:43:14)

Re: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

DriveSoft,  попробовал  - не срабатывает.
Всегда выдает "Нет" в поле грида.
у меня в таблице в реальном поле "el_ver"  так:
(CALCULATED:(case when [electron_version] is null then 'Нет' else 'Да' end)\r\n)

PS в поле "electron_version" хранится путь к файлу (тип LinkFile)

Re: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

если тип LinkFile, тогда так

(case when [electron_version_filename] is null then 'Нет' else 'Да' end)
Dmitry.

Re: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

DriveSoft wrote:

если тип LinkFile, тогда так

(case when [electron_version_filename] is null then 'Нет' else 'Да' end)

Все работает! Спасибо большое

Re: [Решено] Calculate или скрипт сохранения в поле - что оптимальнее

DriveSoft, в конце - концов реализовал через скрипт.
Мне необходимо было, чтобы потом эти "Да/нет" участвовали в фильтрации.
Сделал след. образом:
1. создал объект  checkbox2
2. сделал его невидимым при загрузке формы
3. сделал скрипт проверки содержимого в объекте DBFile1 - если нет текста, то статус checkbox2 = unChecked, иначе - Checked
4. повесил этот скрипт на кнопку сохранения результата
5. кроме данного скрипта кнопка стандартно отрабатывает сохранение состояния checkbox2 в таблицу в поле типа "Да/Нет"
6. фильтр решен стандартно.

Пример скрипта:

procedure NewBook_OnShow (Sender: string; Action: string);
begin
 NewBook.CheckBox2.Visible:=False;
end;

procedure NewBook_Button1_OnClick (Sender: string; var Cancel: boolean);
 begin
  if  NewBook.DBFile1.Text='' then
     begin
       NewBook.CheckBox2.State := cbUnChecked
     end else NewBook.CheckBox2.State := cbChecked;
 
end;