Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis
В принципе так работать не должно, попробуйте так

procedure Form8_TableGrid1_OnChange (Sender: string);
var   i,c: integer;
begin
     c := Form8.TableGrid1.RowCount - 1;
     for i := 0 to c do
     begin
         if not ValidInt( Form8.TableGrid1.Cells[10,i] ) then Continue; // пропускаем строчку в цикле

         if (StrToInt(Form8.TableGrid1.Cells[10,i])=0) then Form8.TableGrid1.Cell[10,i].Color := clYellow;
         if (StrToInt(Form8.TableGrid1.Cells[10,i])<0) then Form8.TableGrid1.Cell[10,i].Color := clRed;
         if (StrToInt(Form8.TableGrid1.Cells[10,i])>0) then Form8.TableGrid1.Cell[10,i].Color := clGreen;
     end;
end;
Dmitry.

52 (edited by Nervis 2015-09-03 12:53:26)

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Здравствуйте, Дмитрий. Такой вопрос. Использование SqliteStudio для импорта и экспорта данных из таблиц в CSV файлы. Простые таблицы, созданные благодаря компонентам Textbox программа вводит/выводит на ура. А вот если дело доходит до Combobox импорт невозможен. FOREIGN KEY constraint failed.
Есть ли способ обойти это?

(программа SqlliteStudio пришлась по душе, хотел бы ее использовать и дальше. А вот с скриптовым импортом, увы не разобрался).

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis
Скорей всего когда вы заполняете таблицу данными, и очередь доходит до внешнего ключа, туда присваивается значение (идентификатор), которого еще нет в таблице словаре.


Просто подготовьте сперва словарные таблицы.

Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Вы как всегда правы, Дмитрий. Важна последовательность действий. Большое спасибо)

Evgeniy

55 (edited by yanikmi 2015-09-07 07:57:00)

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Если можно, вопрос:

Есть 3 даты, вносимые в базу данных через поле ДАТА, в зависимости от этих дат хочется выводить надпись в Grid (сами даты не выводим)
1. Если сегодняшняя дата находится в интервале между 1 и 2 включительно - должна быть первая надпись в гриде
2. Если сегодняшняя дата находится в интервале между 2 и 3 включительно - вторая надпись в гриде
3. Если сегодняшняя дата страше 3 даты - третья надпись
4. Иначе - четвертая надпись

Как реализовать подскаждите пожалуйста? Чувствую что вычисляемое поле только как не пойму.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

yanikmi
Это необходимо сделать с помощью вычисляемого поля

CASE 
   WHEN date('now') >= date1 AND date('now') <=date2  THEN 'первая надпись'
   WHEN date('now') >= date2 AND date('now') <=date3  THEN 'вторая надпись'
   WHEN date('now') > date3 THEN 'третья надпись'
   ELSE 'четвертая надпись'
END
Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Спасибочки! Все работает

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Прошу помощи по вычисляемому полю calculate_room.
В двух связанных таблицах есть поля id_room. В вычисляемом поле нужно прописать:
- Если sprava.id_room = 0 , а document.id_room > 0, то вычисляется значение последнего, и наоборот.

Илюстрация к сказанному:
дело может состоять из одного тома, находящегося в каком-то указанном месте (здесь вычисляется и записывается sprava.id_room), а может состоять из многих томов, и тогда для каждого тома определяется своё место хранения document.id_room.
Можно использовать sprava.folder - оно показывает количество привязанных к делу документов.

Post's attachments

Attachment icon 2015-09-11_144304.jpg 60.05 kb, 279 downloads since 2015-09-11 

Не боги горшки лепят!

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

kunar80
К сожалению логика не ясна, т.к. это условие sprava.id_room = 0
никогда не будет исполняться, т.к. идентификатор записей начинается с 1

Dmitry.

60 (edited by kunar80 2015-09-12 07:48:01)

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Имеется ввиду, что sprava.id_room отсутствует, а есть document.id_room у подчинённых документов. Проект прилагаю.

Post's attachments

Attachment icon Documents.rar 18.11 kb, 505 downloads since 2015-09-12 

Не боги горшки лепят!

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

kunar80
К сожалению я не пойму, что значит "вычисляется значение последнего"? что именно необходимо вычислить с помощью внешних ключей, какой нужен результат? Пожалуйста задайте конкретный вопрос, не касаясь специфики вашего проекта.

Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Есть таблица ДЕЛО и в ней поля id_КОМНАТА, id_СТЕЛЛАЖ, id_ПОЛКА, хранящие информацию о месте нахождения ДЕЛА.
И есть связанная с ней таблица ТОМ с полями id_ДЕЛО, id_КОМНАТА, id_СТЕЛЛАЖ, id_ПОЛКА. Если дело многотомное, то места хранения разных томов могут быть разными (ну не помещаются на одной полке или стеллаже!)
Как в сводном гриде объединить в одной ячейке ДЕЛО.id_КОМНАТА и ТОМ.id_КОМНАТА, в другой ДЕЛО.id_СТЕЛЛАЖ и ТОМ.id_СТЕЛЛАЖ, в третьей ДЕЛО.id_ПОЛКА и ТОМ.id_ПОЛКА?

Не боги горшки лепят!

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Думаю у вас неверная структура БД.
Должна быть таблица ДЕЛО, описывающая сущность дела и вместо таблицы ТОМ, должна быть таблица "МЕСТА_ХРАНЕНИЯ" где уже и будут поля  id_КОМНАТА, id_СТЕЛЛАЖ, id_ПОЛКА


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



в вашем случае я не знаю как это сделать с неверной структурой БД.

Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Здравствуйте, Дмитрий. Подскажите можно ли добавить еще одно условие в записи вычисляемого поля?

(CALCULATED:CASE WHEN number_of_plats - izgotovleno <^equally^ 0 THEN 'Завершено' else 'Не завершено'  end\r\n)


Т.е. 1-ое условие, 2-ое ..., и в конце else. Интересует именно синтаксис этой записи, ибо постоянно что-то упускаю.

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis
Пример

CASE 
   WHEN number_of_plats = 1  THEN 'Один'
   WHEN number_of_plats = 2  THEN 'Пара'
   ELSE 'Много'
END
Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

А я со скобками мудрил, писал через AND. Спасибо)

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Добрый день, Дмитрий. И вновь требуется ваша помощь. Существует таблица - Запуск. В ней запускается определенный узел прибора и в процессе изготовления он проходит 3 состояния: 1)в запуске; 2) в работе; 3) завершено. Эти 3 состоянии описываю при помощи компонентов Checkbox. Как только узел переходит в новое состояние я присваиваю ему другой Checkbox(через форму для редактирования).

1) На основной форме расположен GRID, где отображается вся информация. Там же расположены 3 элемента Checkbox с инкрементальным поиском. При выборе одного из них информация сортируется, однако хотелось бы чтобы они работали парами или все вместе(а не взаимоисключали самих себя). К тому же после снятия всех галочек отображение всей информации в таблице уже не происходит.
2) Форма для редактирования. В ней так же присутствуют эти 3 чекбокса. Работа их должна быть следующей: при выборе одного из них остальные 2 становятся недоступными, и исключает выбор 2 или 3-х галочек одновременно. Я начал писать скрипт для данной процедуры, но адекватной работы так и не добился. Прошу вас показать как должен выглядеть скрипт хотя бы для одного случая, остальные легко будет создать по образу и подобию) Заранее весьма благодарен.
Путь в проекте: Form3_1 - Форма запуска, Form3_1_1 - Форма для редактирования запуска
Путь в скомпилированной программе: пароль: admin/admin, кнопка Расход, Серийные и опытные изделия >> Искомая форма
Прикладываю облегченный проект. Версия программы 1.46

Post's attachments

Attachment icon Проект Базы SMD(29.09.15).7z 63.96 kb, 498 downloads since 2015-09-29 

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

1. Почему бы для определения состояний узла не использовать ComboBox со словарной таблицей, где вы перечислите эти три состояния, так было бы правильней.

Если использовать CheckBoxы, поиск придется организовать использую SQL запрос.


2.
Пример

procedure Form1_CheckBox3_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    Form1.CheckBox1.Checked := False;
    Form1.CheckBox2.Checked := False;
    Form1.CheckBox3.Checked := True;
end;

procedure Form1_CheckBox2_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    Form1.CheckBox1.Checked := False;
    Form1.CheckBox2.Checked := True;
    Form1.CheckBox3.Checked := False;
end;

procedure Form1_CheckBox1_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    Form1.CheckBox1.Checked := True;
    Form1.CheckBox2.Checked := False;
    Form1.CheckBox3.Checked := False;
end;
Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Хорошее решение, попробовал - все работает. Использую чекбоксы дабы внести какое-то разнообразие. Комбобоксов полно, хотя добиться необходимого результата с ними проще. Например такая ситуация:
На основной форме выбираю один из чекбоксов сортирует. Но после их использования - информация больше не отображается(рядом стоящие комбобоксы не реагируют) Хотя чекбоксы по-прежнему сортируют. Увидеть весь перечень можно только перезапустив базу данных.
Хочется достигнуть еще 2-х целей:
1) Чтобы информация продолжала отображаться после сортировки;
2) Чтобы всю инормацию можно было сортировать не только одним чекбоксом, но и сразу 2-мя. Т.е. 'в работе' и 'в запуске'. Или все вместе.

1-ой цели легко добиться комбобоксами. А вот что сделать со 2-ой, вопрос.

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Похоже есть ограничение по количеству условий поиска. Видимо 10(поэтому остальные и перестают работать)

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis
Приложите пожалуйста ваш проект, посмотрю как это можно реализовать.


Ограничений на количество условий поиска быть не должно.

Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Прилагаю проект для корректировки работы чекбоксов. Попутно еще один вопрос: В одной из таблиц я добавил поле изображение. Изображение сохраняется и хранится как и положено. При помощи Sqlite Studio экспортирую в csv. Однако обратный импорт в базу не проходит. В таблице 6 полей. Программа пишет, что из 6 я предоставил только 5. У компонента изображения создается 2 поля: 1-ое само изображение, 2-е - путь к нему на диске. Проблема именно в 1-ом поле, где располагается изображение. Буду признателен, если что-то посоветуете по данному вопросу) Спасибо.

p/s Намеренно не удалил файл sqlite3.dll. Все что необходимо для проверки создано, чтобы вам не вникать в проект.

Post's attachments

Attachment icon Проект Базы SMD(02.10.15).7z 342.27 kb, 500 downloads since 2015-10-02 

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis
1. Установите для CheckBox-ов свойство AllowGrayed = True
т.о. у компонента можно будет установить неизвестное состояние, которое игнорируется при поиске.


2. Используя кнопку с действием Поиск, критерии поиска используют логику "И", в вашем случае необходима логика "ИЛИ", ее можно реализовать только с помощью кнопки с действием SQL запрос.


3. У формата CSV нет возможности содержать поля типа BLOB, которым является поле с типом изображение.
также это плохая идея, хранить файлы непосредственно в базе данных, т.к. в будущем такая БД будет работать медленно.

Dmitry.

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Общий размер файлов изображений около 1-2 мегабайта(около 500шт). Не думаю, что это сильно повлияет на производительность базы. Однако без возможности импорта - смысл теряется. Хотелось бы получить следующий результат:
В папке с файлами базы находится папка с изображениями. На форме расположить компонент для вывода изображения. В таблице существует n-ое количество строк. Выбирая одну из них ссылкой подгружается картинка. Реализуемо ли это?. Спасибо.

Evgeniy

Re: Нужен совет. Вычислительное поле, запрос информации из таблицы.

Nervis wrote:

Хотелось бы получить следующий результат:
В папке с файлами базы находится папка с изображениями. На форме расположить компонент для вывода изображения. В таблице существует n-ое количество строк. Выбирая одну из них ссылкой подгружается картинка. Реализуемо ли это?. Спасибо.


Да, скачайте пожалуйста данный пример:

Post's attachments

Attachment icon LoadImageFromDatabase LinkFile.zip 545.72 kb, 508 downloads since 2015-10-05 

Dmitry.