Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.008 c
1-4461
F1
2002-11-20 13:48
2002.12.02
Эксперимент с TreeView


1-4282
Walker
2002-11-20 12:53
2002.12.02
UN Format???


1-4411
llserge1
2002-11-22 18:39
2002.12.02
Помогите начинающему создать свою компоненту


14-4589
nick_vstu
2002-11-12 10:48
2002.12.02
Linux -rules forever!


14-4634
Игорь Шевченко
2002-11-12 13:39
2002.12.02
ВАЖНО! Всем, кто получил на московской встрече Мастаков диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский