Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Открыть новую тему     Написать ответ в эту тему

Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek
 
Решить задачу можно несколькими способами и не надо свои предпочтения выдавать за норму.
 
Ну, что я могу сказать? Вперед. Дерзайте.
 
...Только вот незавидую я пользователям Вашего софта, которые будут пользоваться этакими хитрыми способами ввода данных в справочник. К примеру - не припомните ли, в каких случаях сворачивается lookup-грид? И что будет, если такой случай поизойдет во время ввода пользователем новых данных в оный грид?

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 12:45 10-03-2010 | Исправлено: Odysseos, 12:46 10-03-2010
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Odysseos

Цитата:
не припомните ли, в каких случаях сворачивается lookup-грид?

Тут не могу не согласится, но, если очень хочется, если нужен геморрой и это можно обойти. Только так и надо было ему объяснить, а не пальцы растопыривать.

Всего записей: 2448 | Зарегистр. 18-05-2005 | Отправлено: 12:51 10-03-2010 | Исправлено: Samotek, 12:52 10-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek
 
так и надо было ему объяснить
 
Я и объяснил - вкратце, назвав это "извратом" (если нужен геморрой, ага) и отметив, что для такого использования выпадающие гриды не предназначались.
 
а не пальцы растопыривать
 
Знаете, этакий... менторский тон с оттенком превосходства при объяснении прекрасно известных вещей - совершенно не способствует спокойному обсуждению.
 
...Думаю, оффтоп пора сворачивать.

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 15:56 10-03-2010 | Исправлено: Odysseos, 15:57 10-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, подскажите.
Использую версию 5.0.13. Делаю MemTableEh1.RecordCount и функция возвращает мне количество записей, только тех, которые видны в DBGrid, а не всех из таблицы. Что это за извращение? Может как-то по другому нужно получать количество записей таблицы?

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 08:46 18-03-2010
ErshovSP2004



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alexssss1
вообще то корректней получать кол-во записей в наборе данных (DataSource)

Всего записей: 208 | Зарегистр. 16-09-2004 | Отправлено: 22:36 18-03-2010
Vladkyr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexssss1
Попробуйте так:
MemTableEh1.RecordsView.MemTableData.RecordsList.Count
Это возвратит общее количество записей без учета локального фильтра

Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 08:38 19-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladkyr,  а если мне нужно как раз с фильтром? Т.е. нужно реально сколько в данный момент в DBGrid всего показано записей! Еще такой момент, я заметил что вертикальная полоса прокрутки не показывает реальное состояние записей в dbgrideh, а когда я начинаю курсором мыши спускаться вниз по записям, то полоса уменьшается. Я не пойму зачем так сделано?!

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 08:45 19-03-2010
Vladkyr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexssss1
Тогда можно использовать
MemTableEh1.RecordsView.Count
Это выдаст количество записей в отфильтрованом списке.
И еще можно попробовать поставить свойство FetchAllOnOpen в true. Это может исправить ситуацию с полосой прокрутки

Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 08:53 19-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ErshovSP2004, дело в том, что тут вся загвоздка в dbgrid. допустим есть 300 записей. dbgrid выводит только 40 на экран и вертикальная полоса прокрутки имеет максимальную длину, т.е. будто у нас всего не 300 записей, а 41, например. Когда я устанавливаю курсор на последнюю видимую запись и жму на клавиатуре стрелку вниз, то я начинаю спускаться ниже по записям и полоса прокрутки становится меньше, т.е. я как бы открываю новые записи, а до этого, получается, dbgrid и не знал о их существовании. Вот из-за этого изначально у меня и показывает что всего не 300 записей, а например 41. И только когда я спущусь курсором с помощью клавиатуры ниже, то общее кол-во записей увеличивается. В обычном стандартном dbgridе никогда таких проблем не было, а с этим одни проблемы((
 
Я сейчас вышел из этой ситуации так - после каждого обновления набора данных, просто делаю перебор записей от 1-й до последней и тогда полоса прокрутки показывает реально сколько записей и кол-во, возвращаемое RecordCount (после перебора) также показывает верное значение. Но мне не нравится этот способ. Рылся в опциях компонента dbgrideh но ничего по этому поводу не нашел.  
 
 
 
Добавлено:
>>И еще можно попробовать поставить свойство FetchAllOnOpen в true. Это может исправить ситуацию с полосой прокрутки
 
Это в DBGrid? Если это поможет, то премного благодарен!!! Попробую позже.

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 08:55 19-03-2010
Vladkyr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexssss1
Это свойство MemTableEh. Это свойство заставит грид полностью показать все записи

Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 09:01 19-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladkyr, понял, спасибо. А еще такой вопрос. FetchAllOnOpen - это свойство действует только если я привязал MemTableEh к DBGrid, правильно я понял?  Т.е. если я просто хочу открыть MemTableEh , сделать какой-то поиск по записям и при этом MemTableEh  никак не связан с DBGrid, то FetchAllOnOpen здесь не нужен?!

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 09:13 19-03-2010
Vladkyr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexssss1
Правильно

Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 09:14 19-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ок, выручили. буду провобать, еще раз спасибо.

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 09:15 19-03-2010
ErshovSP2004



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alexssss1

Цитата:
Я сейчас вышел из этой ситуации так - после каждого обновления набора данных, просто делаю перебор записей от 1-й до последней и тогда полоса прокрутки показывает реально сколько записей и кол-во, возвращаемое RecordCount (после перебора) также показывает верное значение. Но мне не нравится этот способ. Рылся в опциях компонента dbgrideh но ничего по этому поводу не нашел.

если уж архи необходимо общее кол-во записей, то фетчить весь набор данных крайне не желательно, лучше выполни ещё один SQL запрос с подсчетом кол-ва записей и условием взятым из локального фильтра. И выполняй этот запрос при изменении фильтра. Береги ресурсы.

Всего записей: 208 | Зарегистр. 16-09-2004 | Отправлено: 19:45 19-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
фетчить весь набор данных крайне не желательно

 
почему так? в чем тогда отличие, если я делал query.open для обычного dbgrid и у меня выводились все записи, а теперь при аналогичной команде + FetchAllOnOpen - тоже самое ?

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 08:42 22-03-2010
ErshovSP2004



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alexssss1
потому что "query.open" это инициализация набора данных и ни одна современная БД не вернёт его весь, а лишь столько сколько запросили например при выводе в дбгриде или если жестко указано сколько записей прочитать (FetchRows)

Всего записей: 208 | Зарегистр. 16-09-2004 | Отправлено: 18:06 22-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это я понимаю, но у меня в query четко указан запрос со всеми условиями, допустим выборка на 100 записей. Почему же я получаю только 40?

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 10:06 23-03-2010
Odysseos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexssss1
 
Вы путаете select ("отбор", если угодно), и fetch (выборку). Можно как угодно точно отфильтровать нужные записи - и в where, и в join'ах, и в first ... skip - но это не выборка записей на клиента. После выполнения select'а на клиентскую сторону не возвращается ничего - кроме статуса, случилась ошибка или нет. И только клиент может потом сказать - "перешли-ка мне первую запись из полученного набора"/"перешли-ка мне следующую запись из полученного набора". Здесь "клиент" - клиентская dll-ка, работающая с сервером на низком уровне. Ее, в свою очередь, используют более высокоуровневые "клиенты" - idapi.dll (ядро BDE) + Delphi-обертка над BDE (TTable и TQuery), dbExpress, т.н. "нативные" компоненты, а потом может быть и еще один уровень - TClientDataSet или TMemTableEh через соотв. провайдер... Как, с какими особенностями каждый из этих "стеков" выполняет fetch - надо разбираться отдельно. Какие-то могут делать всегда полный fetch, какие-то - поступать "умно", подкачивая только те строки, которые клиент реально захотел увидеть (например - по мере прокрутки scrollbar'а в сетке) - с разной степенью "умности", причем.

Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 12:35 23-03-2010 | Исправлено: Odysseos, 12:36 23-03-2010
alexssss1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Odysseos, понятно... у меня как раз memtable связан с datasource, который ссылается на Query (dbexpress). Я делаю select в этом самом Query и если верну кол-во записей, которые получились в итоге, то query.recordcount покажет мне все 100, а memtable (который в принципе ссылается на этот самый query) только видимую часть сетки dbgrid. такое положение дел меня смутило мягко говоря, но раз так то и так. буду теперь знать.

Всего записей: 40 | Зарегистр. 22-09-2008 | Отправлено: 15:21 23-03-2010
EugeneBoss3



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Знатоки, подскажите как правильно связать memtable и FIBDataset, чтобы нормально функционировала локальная сортировка?

Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 04:09 26-03-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru