Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

Виртуальный столбец данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
4-4668
Velocity
2002-10-18 20:59
2002.12.02
ScrollBox и SpeedButton на API


3-4174
Тундра
2002-11-12 12:09
2002.12.02
Упаковка таблицы FoxPro


6-4543
Aralekin
2002-09-30 13:47
2002.12.02
Ах этот мерзкий UDP!!!!


1-4322
bkv
2002-11-21 17:27
2002.12.02
Мастера помогите.!!!!


14-4584
Akella
2002-11-12 08:23
2002.12.02
у кого есть Magic Carpet