![]() |
|
|
![]()
|
|
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Ситуация такая: на форме в определенном порядке валяються кнопка и ДеБеГрид. по кнопке выполняется запрос к ДБ Оракл в цыкле, значения подставляються из масива:
Прикол вот в чем при значении UniGlo[i].n = 3 по запросу должны выдаваться 27 записей, а выдается 25. При этом если я вне цыкла по другой кнопке с той же OraQuery1 выполню запрос "select idattr from commonattr where iddoc=3", мне вернуться 27 записей. Перед выполнением запроса в своей программе проверяю правильность синтаксиса с помощью TOAD. И теперь гвоздь программы - если мне вдруг вздумаеться увеличить высоту ДеБеГрида на такую что влазит без скрола > 25 записей - все работает как часики. В чем прикол, дамы и господа? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Заменил. Запустил. История повторилась - при уменшении размера ДеБеГрида получаю 25 записей. Удаление Грида равно как и опустошение его ДатаСорса - ничего не дает - 25 хоть ты тресни. Какая тут связь?
|
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
AlexLogos, случаем не D2009? А то я подобную ситуацию наблюдал с LookupComboBox. Подключаешь, раскрываешь список, а в нем область видимости только одна строка. Если проскроилить ниже и повторно раскрыть, то уже до той строки, на которой скрол остановился. И это не смотря на то, что DropDownRows = 7.
Видимо что-то глючное в пакете разработчики натворили. Добавлено через 54 секунды AlexLogos, а источник данных сколько записей возвращает? -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
причина в том что именно источник данных возвращает количество затисей в зависимости от высоты Грида. Но если я выполняю отдельно запрос вне цыкла - эта зависимость исчезает.
|
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
А сам цикл можешь показать. Скорее всего ошибка в нем. Или не все UniGlo[i].n имеют значение 3. -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| AlexLogos |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
это цыкл в котором выполняется поиск. но я спецыально проверил что выдает запрос если я например напишу
где Edit2.Text = "select idattr from commonattr where iddoc =" и выполню его по кнопке без цыкла - выдает все нужные записи... |
||||
|
|||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
с датасетами лучше использовать цикл так
иначе у тебя будет проходить только по тем записям, которые в данный момент в датасет содержатся. А без фетч олл там вполне могут и не все быть. и проверку на содержание записей лучше IsEmpty, если есть у OraQuery конечно(просто не знаю что за компонент) хотя 1 запись вроде всегда подгружать должен, даже если не в чем отображать.. Это сообщение отредактировал(а) vovk - 15.9.2009, 18:17 |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
Поставь на входе и в начале цикла:
и посмотри. Это сообщение отредактировал(а) former - 15.9.2009, 16:50 -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Це спрацювало. Виникає питання: чому РекордКаунт мені видає невірні значення?
Добавлено через 4 минуты и 25 секунд
Модифікую код - працює добре, але мене не влаштовує те що доводиться постійно збільшувати розмір масива в ході циклу - при великій кількості даних може затримувати роботу... Добавлено через 9 минут и 51 секунду як можна інакше дізнатися кількість записів коли OraQuery1.RecordCount видає невірне значення і при цьому не використовувати цикл, як вказано в прикладі? |
|||
|
||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
запросом
Select Count(*) From <таблица> where <условия> |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
Кінцева версія. Дакую, товариші - все працює. Правда, якби не глючили компоненти я б вже на початковому етапі зменшив би код в півтора рази, а так як деякі запити виконуються невірно - доводиться шукати довші шляхи. Випадково не підкажете для Delphi 7 яку версію ODAC встановити щоб таких проблем уникати і де її скачати. У мене зараз версія 5.7. |
|||
|
||||
| vovk |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 28.2.2008 Репутация: 6 Всего: 6 |
Это не глюки компонентов, по моему почти все компоненты работающие не с локальными бд, подгружает записи по мере их необходимости (ну по крайней мере те в которых используются запросы), если конечно не ставить в опциях подгружать все записи. Поэтому при выполнении запроса на выборку в датасете содержится то количество записей, которое нужно для отображения.
В общем это нормальное поведение для многих датасетов. //это уже кажется позновато добавил Если записей заведомо немного то можно использовать FetchAll. Это сообщение отредактировал(а) vovk - 15.9.2009, 17:56 |
|||
|
||||
| AlexLogos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 23.4.2009 Репутация: нет Всего: 1 |
якщо брати до уваги вказані зауваження і дійсно поправити значення FetchAll встановивши значення True - найперший варіант процедури теж працює без всіляких обходів типу визначення кількості записів через запит... Вік живи, вік учись... Дякую.
|
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
По умолчанию у OraQuery стоит выбор 25 записей, если стать на последнюю в гриде и попытаться прокрутить ниже, то все подгрузится, по крайней мере у меня никаких глюков никогда не возникало, если размер грида позволяет показать >25 записей просто установите свойство OraQuery.FetchRows нужному значению и будет все ок.
FetchAll конечно хорошо, но если запрос будет возвращать >1000 записей, то нахрен они сразу все пользователю все равно со всеми он сразу работать не сможет. -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |