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