Когда нужно по выделенной в гриде строке выковырять какую-либо информацию я поступаю следующим образом:
1. Простой запрос:
Main_Form.Characteristics_Memo_EquipmentsShow.Text := SQLExecute('SELECT Characteristics FROM Equipments WHERE id=' + IntToStr(Main_Form.TableGrid_Equipments.dbItemID) );

2. Если нужно выковырять из связанных таблиц через 2 таблицы, то посложнее:
MovingsEquipments_Form.Post_Edit.Text := SQLExecute('SELECT Post FROM Posts LEFT OUTER JOIN Employees ON Employees.id_Posts=Posts.id WHERE Employees.id=' + IntToStr(MovingsEquipments_Form.Employee_ComboBox.dbItemID));

DriveSoft wrote:

vir2alex
Такое можно реализовать для простых компонентов, такие как кнопки или чекбоксы, но врядли получиться сделать свой собственный DateTimePicker.

Там наверно скрипт придётся писать целым отделом программистов. smile)) Утрирую конечно, но всё равно с такой идеей лучше действительно  не связываться.

DriveSoft wrote:

Увы нет, начиная с Windows Vista, изменение цвета для многих стандартных компонентов заблокировано на уровне операционной системы. Таким образом внешний вид компонентов задается темой, которую выбрал пользователь.

А свои элементы можно как-то создавать?
Например, как это делают в некоторых прогах ради креативного интерфейса: ставят изображение на форму и вешаю на него тот или иной функционал. Некоторые элементы делают из нескольких изображений, например DataTimePicker, можно сделать их 2-х изображений: само поле в котором дата выводится и стрелочка при нажатии на которую появляется календарик. Фсё это программируется и получается креативный интерфейс. Мне креатив не нужен, я бы те же элементы, стандартные, заскриншотил да вставил бы, но одинаковость элементов во всех ОС я считаю очень даже обязательным условием.

А сделать так, чтоб на разных ОС всё выглядело одинаково как-нибудь можно сделать? Через скрипты например?

Делал свой проект на win7 в версии MVDB 2.4. Щас вот переехал за другой комп, но на нём WinXP. Установил версию 2.5. Запустил свой чисто русский проэкт и теперь у всех Page Control-ов и Group Box-ов цвет изменился на серый и выбрать цвет фона не даёт, просто нет этой опции.

6

(2 replies, posted in Russian)

DriveSoft wrote:

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


Относительно вашего примера, скорей всего в таблице MovingEquipment нет необходимости, достаточно таблицы InfoMoving, в которой будет записана история перемещений оборудования, и на основе последней даты перемещения, можно вычислять состояние оборудования.

Ну так а я об упрощении и говорю. ))) Ты же свою прогу задумал не для создания примитивных проектов. Имбицилы твою прогу уже не осилят, так что поздновато задний ход давать.
А таблица MovingEquipment нужна. Но это не важно. Я не буду вдаваться в подробности.

А такой функционал точно специфичный? На мой взгляд ни одна БД без подобных выкрутасов не обходится.

Скинул бы тут свой проект. Я у ся на виртуалках за несколько мин прогнал бы. У меня так же или нет? Просто я свой проект попробовал, всё работает нормально. Может у тебя там в настройках компов чё-то не так.

В настройках общей папки не стоит ограничение на количество юзеров?

DriveSoft wrote:
Trash IS NULL

Так работает. В комент выше чёт не въехал с ходу. Я думал в фильтре грида свой синтаксис.

А знак неравенства то вообще как указывается? Тока

is not

  можно юзать?

10

(2 replies, posted in Russian)

Ну это наверное скорее предложение будет, по улучшению.
Есть таблица оборудования (Equipment). Для неё есть фильтр с гридом. Пользователь с помощью фильтра находит нужное оборудование и добавляет его ID в другую таблицу (MovingEquipment). Затем находит следующее оборудование и опять добавляет его ID в таблицу MovingEquipment, после чего заполняет таблицу InfoMoving, в которой указывается дата перемещения, кому перемещается и прочая инфа. В таблице MovingEquipment ещё будет храниться ID записи из таблицы InfoMoving.

В принципе то, всё с помощью обычного функционала работает нормально: я создаю таблицу Equipment, фильтр, грид для неё, кнопку для сохранения ID в таблице MovingEquipment и функционал для таблицы InfoMoving.
А теперь такой момент.
Если всё нужно отменить,, можно создать кнопку "Отменить" и сделать так, чтобы при нажатии на неё все внесённые данные удалились. Для этого придётся писать скрипт, который будет вычислять, что там последним вносилось в таблицу MovingEquipment и InfoMoving. А если пользователь просто закрыл форму не нажав кнопку "Сохранить", то можно привязать событие к закрытию формы, которое кликнет на кнопку отмены. В реализации очень громоздко и неудобно да ещё и ради не очень то нужной мелочи, ладно если ещё для 2-х таблиц, а с 3-мя связываться уже гарантированно никто не станет. А если бы были временные таблицы, создающиеся для конкретной операции, то всё было бы на много проще. Запихал данные во временные таблицы и после нажатия кнопки "Сохранить"  выгрузил все данные из них в постоянные таблицы. Всё!

Конечно всё и сейчас можно реализовать. Текущий функционал программы позволяет. Но ещё раз повторюсь, слишком громоздкая реализация такой функции.

DriveSoft wrote:

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

Ясно. Просто в другом похожем проекте словарь обладает спец. функционалом. Там можно, к примеру, всех сотрудников распределить по должностям перетаскиванием мыши. Но реализовано не очень.

Так это получается, что выставляя галочку "Таблица являтса словарём" разработчик делает всего-лишь подсказку для себя?

А вообще, знаешь как Дмитрий Глуховский "Будущее" писал? - Вконтакте! С помощью других пользователей. Он ваял маленький пост, кусочег (отрывок), а другие в коментах к посту писали что думают и даже предлагали свои варианты и дополнения.

Что такое словарь, считаю, нужно разжувать как следует! Давно уже делаю базы в мускуле, в аксесе и ещё один похожий на этот проект, конкурент типа. в нём тоже несколько сделал и так и не могу понять накой нужны словари... Похожий функционал реализовываю с помощью простых таблиц и на мой взгляд с помощью простых таблиц словари можно сделать куда круче, чем использовать сами таблицы-словари. Хотя честно говоря сам не понял толком что это. )))

DriveSoft wrote:

Извиняюсь за задержку с ответом, был в отпуске.
Вопрос еще актуален для вас?

Ну вообще-то да. smile Я проблему решил тем, что при создании новой записи воткнул скрытую галочку, которая по умолчанию установлена в "Нет". Но дело в том, что я твоей программой заинтересовался на полном серьёзе. Поэтому мне будет интересно знать, чем заполнено логическое поле в базе, если в него ни разу не вбивались данные. NULL в фильтре грида не работает. Это косяк грида или в базе не NULL?

А да! И неравенство в гриде всё-таки как указывается?

Vitaly wrote:

Я так понял вам в запросе нужно условие отбора?

WHERE Trash IS NULL (или IS NOT NULL если не пусто)

В фильтре TableGrid-a! Там SQL-запросы разве можно указывать?

Есть логическое поле Trash. Это поле при создании новой записи заполняться не должно (поле указывает, что запись помещена в корзину, записи из БД вообще не удаляются). Т.к. при создании записи это поле вообще не заполняется, то в итоге сама ячейка получается пустой, т.е. в ней нет ни значения "Да, ни "Нет". Теперь нужно сделать так, чтобы TableGrid показывал только не помещённые в корзину записи. По логике можно было бы просто указать Trash="Нет" и отобразились бы только не выкинутые в корзину записи. Но т.к. поле пустёхонькое, то как быть? Нужно указать "Trash не равно  "Да"".
Вот эти значки не срабатывают: <>, !=

На данный момент решил проблему через костыль. В событии формы OnShow вставил обновление грида dbUpdate. Щас нормуль. Но исправлять надо.

Ну вот я и говорю про то, что на главнйо форме она не убирается. На второстепенной форме убирается, а на главной нет. Даа, я  про то, что столбцы не выходят за границу грида. На половину тока место в гриде занимают. Но прокрутка не убирается. Это при первом запуске так, если любую колонку пошевелить (изменить ширину) то прокрутка исчезает. Но так не должно быть! Надеюсь не надо объяснять, что это не удобно.

Горизонтальная прокрутка TableGrid в главной форме не убирается.
На скрине два одинаковых грида. с абсолютно одинаковыми настройками. Скопировал с обычной форма в главную. Как видно на главной форме грид с горизонтальной прокруткой, а на обычной  нормальный.

PS Чё-то скрин не добавляется.