Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в DBGridEh пометить определённые записи? Пометка данных в DBGridEh 
:(
    Опции темы
BDmV
  Дата 14.2.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Использую
  База данных: MySQL
  Конекчусь с помощью ZeosDBO
  Проссматриваю полученные данные через DBGridEh (EhLib 4.2)
  Для отчёта пользую FastReport 4.5

Задача состоит в следующем:
   Есть некая таблица из которой нужно распечатать данные помеченные пользователем.

Попытки её решить:
1. Использовать выделение, встроенное в DBGridEh неудобно, т.к. пользователь всегда может забыть нажать Ctrl перед тем как ткнёт мышкой, после чего ему опять придётся "ползать" по таблице и выделять всё заново. :(

2. Пример приведённый в Ссылка на похожую тему тоже несовсем подходит (хотя нравится больше чем №1) т.к. событие DrawColumnCell (прорисовка чекбокса) происходит раньше, чем CellClick (изменение списка нажатых чекбоксов) :( из за этого чекбокс меняет своё состояние после ухода из этой ячейки.

3. Держать в таблице отдельное поле, тоже неподойдёт, т.к. с программой будет рабботать не 1 человек и получить ситуацию, в которой 1 человек метить кучу записей и пока жмёт на кнопку "печать" все пометки скидываются из за того, что 2ой пользователь запустил своего клиента, который выполнил "update table set field_int_bool = 0"

Может есть у кого нибудь, какие нибудь соображение по САБЖу? (Желательно с примерами ;) )

Это сообщение отредактировал(а) BDmV - 15.2.2008, 09:07
PM MAIL   Вверх
Vas
Дата 15.2.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Я использую для такого VTable из компонентов ODAC, но думаю и в Zeos есть что-то типа виртуальной таблицы. Перегружаю данные в виртуальную таблицу, добавляю еще одно поле "Печать" тип boolean и все пусть пользователь клацает нужные записи. В репорте уже выводим у которых поле "Печать" отмечено и все smile


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 15.2.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



В EhLib есть MemoTable, но это не выход из положения, т.к. данные из БД я беру SQL запросом вида:
Код

  Select  t1.*, t2.* from table1 t1 left join table2 t2 on (t2.id=t1.id)

и использую связку TzQuery -> TDataSource -> TDBGridEh

Мне не хочется сюда вставлять, какой нить TMemTableEh и каждый раз при малейшем изменении данных гонять их из таблици памяти в БД и обратно... 
PM MAIL   Вверх
Vas
Дата 15.2.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Дык я тоже беру запросом, и вообще я Table никогда не использую, токи квери и сторедпрок smile А у тебя что миллион записей пользователю выгружается и он их отметить должен?  smile  
А если выгружается приемлимое количество, то перегон в меморитабл и не заметишь  smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 15.2.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Да сколькоб данных небыло... Память у компа не резиновая, и держать все записи в памяти желания нет.. 

Хотя я не знаю, как это с ODAC'ом происходит, Ораклы у мну нет.
PM MAIL   Вверх
Vas
Дата 15.2.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(BDmV @  15.2.2008,  10:20 Найти цитируемый пост)
Да сколькоб данных небыло... Память у компа не резиновая, и держать все записи в памяти желания нет.. 

Ну тады рисуй, тока не забывай отмеченные клеточки тоже надо где-то хранить и в FR передавать  smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 15.2.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Пытался рисовать, но вот как сделать так, чтоб сначало запоминался клик по чекбоксу, а потоп происходила прорисовка, я не понял. :(
PM MAIL   Вверх
Vas
Дата 15.2.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(BDmV @  15.2.2008,  10:42 Найти цитируемый пост)
чтоб сначало запоминался клик по чекбоксу

Дык я к тому и клонил что твой клик и должен где-то запоминаться, ина че при следующей перерисовке все под откос пойдет  smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 15.2.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Ну дык я и говорю что я это помню, но перерисовка происходит после того как с этого поля уходишь, а мне нужно чтоб пользователь сразу увидел результат своего клика...   smile 

А как с помощью ODAC Вы юзаете MemTable? Что то я в этих компанентах ничего связанного с MemTable я не вижу. :(

А попытки связать TMemTableEh с TzQuery с последующим добавлением туда левого поля, приводят к тому же что и без TMemTable. :(
Или всётаки Вы действительно каждый раз в цикле заполняете таблицу памяти? 

Это сообщение отредактировал(а) BDmV - 15.2.2008, 17:13
PM MAIL   Вверх
Vas
Дата 15.2.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Vas @  15.2.2008,  09:13 Найти цитируемый пост)
Я использую для такого VTable из компонентов ODAC

Из ODAC я юзаю VTable, а не MemTable. 
И дальше писал что 
Цитата(Vas @  15.2.2008,  09:13 Найти цитируемый пост)
но думаю и в Zeos есть что-то типа виртуальной таблицы

А MemTable вроде несколько другая хрень, но один фиг MemTable сразу из запроса тянет все данные в память и ниче smile

Цитата(BDmV @  15.2.2008,  10:42 Найти цитируемый пост)
но вот как сделать так, чтоб сначало запоминался клик по чекбоксу, а потоп происходила прорисовка

Отсюда я понял что как раз проблема с запоминанием еще до прорисовки  smile 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 15.2.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Цитата(Vas @  15.2.2008,  18:21 Найти цитируемый пост)
Отсюда я понял что как раз проблема с запоминанием еще до прорисовки  

Если остановится на варианте метить данные чекбоксами, то проблема именно в этом.

А виртуалки в Zeos я не видел. :(


Это сообщение отредактировал(а) BDmV - 23.2.2008, 12:19
PM MAIL   Вверх
Vas
Дата 16.2.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



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


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
BDmV
Дата 16.2.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Пробывал... Неинтересно.
Если я TMemtableEh связываю с датасетом, то я могу туда добавлять поля, но изменять их значение, почему то, не могу, наверное потому что значения пытаются меняться во всей связанной записи. :(
А создавать чисто таблицу в памяти, гонять данные из памяти в БД и обратно, а потом в конце работы удалять её, не хочу.

Кстати, а есть какой нить способ реагировать на нажатие на столбце Indicator? У TDBGridEh я нашёл реакцию только на заголовок Индикатора...  Мож тогда проще будет запоминать ID записи не на событии CellClick, а на нажатие на Индикатор?
PM MAIL   Вверх
Esperito
Дата 20.2.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



Быть может, проще сделать переключатель "Режим выделения / Режим редактирования" для юзера и в режиме выделения использовать стандартное выделение и программно удерживать Ctrl.
PM MAIL   Вверх
BDmV
Дата 23.2.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: 1
Всего: 1



Цитата(Esperito @ 20.2.2008,  17:31)
Быть может, проще сделать переключатель "Режим выделения / Режим редактирования" для юзера и в режиме выделения использовать стандартное выделение и программно удерживать Ctrl.

Непроще :( Как я писал:
Цитата(BDmV @  14.2.2008,  19:50 Найти цитируемый пост)
1. Использовать выделение, встроенное в DBGridEh неудобно, т.к. пользователь всегда может забыть нажать Ctrl перед тем как ткнёт мышкой, после чего ему опять придётся "ползать" по таблице и выделять всё заново. :(



PM MAIL   Вверх
Esperito
Дата 23.2.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



Я же говорю, программно удерживать Ctrl, т.е. держать его нажатым (или сделать так, чтобы гриду он кажался нажатым). Чтобы пользователю не приходилось его нажимать самому.
PM MAIL   Вверх
BustA
Дата 6.6.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Люди помогите, а вот в эту memtable как добавит отдельное поле??? чтоб я потом в него программно данные записывал?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.