![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Виртуальный столбец данных [D6, FireBird]
Andriano © (2002-11-13 09:04:00)Если кто-нибудь знает, ответьте пожалуйста.
Что делать когда необходима редактируемая колонка в DataSet, кот. нет в базе?
Это нужно, чтобы сделать какие-то временные изменения (довольно продолжительные). А потом с помощью их обработать данные в БД. Например расставить галочки напротив строк в таблице и затем что-то сделать с этими строками.
Поля типа Calculated не редактируются, да и как там хранить данные. Добавлять колонку в таблицу тоже никак - что будет если с ней параллельно будут работать другие пользователи.
KSergey (2002-11-14 07:13:00) [1]Неьзя ли поподробнее про fkInternalCalc? Что-то ни в интете ни в книжках своих я про него не нашел толком описания что оно и как делает. Хелп есть, я понимаю, но не совсем понятно что там и как (лично мне во всяком случае).
Может кто-нибудь потрудится на благо народа и опишет по-русски что с ним и как?
boa (2002-11-14 05:55:00) [2]Используйте тип поля - fkInternalCalc.
Белка (2002-11-13 11:10:00) [3]select field1, ... , fieldn, 0 editfield from table1 where ...
Урри (2002-11-13 11:06:00) [4]Можно перекрыть CanEditModify в DBGrid - я убрал проверку Field.CanModify - она возвращает false для Calculated полей - после этого грид дает их редактировать
Andriano (2002-11-13 10:39:00) [5]Всем спасибо за оперативные ответы.
Попробую и RxMemoryData.
По-моему уже ничего нового не придумать...
Sergey13 (2002-11-13 10:34:00) [6]Я решал через RxMemoryData. Копировал в нее датасет и добавлял еще одно поле "для галочки". Потом совал в грид уже ее, а не исходный датасет. Работает прекрасно.
Andriano (2002-11-13 10:27:00) [7]> ЮЮ ©
StringGrid не умеет прятать столбцы (PrimaryKey по которому затем надо идентифицировать записи). Для CheckListBox придётся держать TList с теми же PrimaryKey. Всё это выход, но у меня фильтр хранит состояние четырех таблиц. В этом случае это не самое простое решение. Спасибо.
Johnmen (2002-11-13 10:27:00) [8]Идея проста, если надо редактировать НД без отображения изменений в таблицы - холостые InsertSQL, UpdateSQL и т.д., а потом - реальные запросы по НД...
Andriano (2002-11-13 10:20:00) [9]> Johnmen ©
Компонент-держатель - FIBDataSet.
> z0ne ©
Да, я примерно то же самое придумал, только вместо user ID, у меня уникальный номер подключения к базе (это чтобы не заботиться о вхождение одного пользователя однажды), кот. выдаётся генератором. Но у этого метода есть недостаток. Что если в таблицу для обработки добавиться запись, тогда и во врем. таблицу придётся добавлять запись с выделением=0 для seans_ID (у меня) или user_ID (у тебя). Да и при подключении синхронизировать обрабатываемую и временную таблицы. Я даже написал все эти хранимые процедуры и тригеры и проверил - работает. Цель моего вопроса - узнать как вы решили такую проблему, и выбрать гениальное и простое. Спасибо за метод. Может у кого-нибудь есть ещё какие-нибудь идеи.
ЮЮ (2002-11-13 10:08:00) [10]Если это групповая обработка записей, основанная лишь на том, выбрана запись или нет, то нет надобности использовать и DBGrid. Так как записей немного, можно использовать "виртуальную таблицу" вместо "виртуального столбца": DrawGrid, StringGrid или CheckListBox, возможно в совокупности с TList для храненения ключей записей и признака выбора.
А для изменения запросом использовать конструкцию
IN (val1,...,Valn), формируемую диномически по результатам выбора.
Johnmen (2002-11-13 10:03:00) [11]Просто добавь поле в запрос.
И кстати, какой компонент-держатель НД ?
z0ne (2002-11-13 09:56:00) [12]Я держал отдельную таблицу со структурой
- user // код или ID пользователя ИНДЕКС ОБЯЗАТЕЛЬНО
- data // те данные, которые есть желание сохранять
- recID // ключ связанной записи ИНДЕКС
Соответственно делал запросы типа
select t1.field1, ..., xt.data
from table t1, temptable xt
where (user="USER") and (t1.kod=xt.recID)
Плюсы: можно сохранять выбор для следующего сеанса
Andriano (2002-11-13 09:44:00) [13]Да, конечно, данные в результате обрабатываются одни и те же.
Записей немного, но не хотелось бы, чтобы была зависимость от количества.
Изменения одним запросом конечно лучше, но это прокатит только если эта добавочная колонка в таблице данных.
ЮЮ (2002-11-13 09:22:00) [14]>Нет, другие пользователи не должны видеть эти изменения
Речь не о галочках. Выбрав одну и ту же запись они собираются внести реальныеизменения в однe и тe же запись.
И много записей ты показываешь в ДатаSete? Много из них могут быть отобраны. Изменения ты собираешься делать одним запросом, или пробегая по каждой отобранной записи?
Andriano (2002-11-13 09:14:00) [15]Нет, другие пользователи не должны видеть эти изменения (галочки к примеру). Это временные изменения (для этой виртуальной колонки), кот. точно отменятся.
ЮЮ (2002-11-13 09:11:00) [16]>что будет если с ней параллельно будут работать другие пользователи
Это смотря что ты хочешь получить в результате того, что два пользователя одновременно и по-разному корректируют одну и ту же запись :-)