Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

фильтры и midas.dll [D7, Informix]


Torin ©   (2006-06-08 11:09:00) 

Уважаемые мастера!
Столкнулся с такой проблемой.
После открытия набора данных (informix, TClientDataSet) накладываю ОЧЕНЬ БОЛЬШОЙ ФИЛЬТР.
Возникает ошибка
"Access violation at adress xxx in module midas.dll. Read of address xxx".
На "небольших" фильтрах все отрабатывает ОК.

Подскажите, плиз, с чем это связано (ограничение по количеству символов на фильтры в midas.dll? Но у меня отрабатывали фильтры с length > 256) и как с этим бороться. Переоткрытие с другим запросом не проходит - база данных ОГРОМНАЯ и запрос выполняется от 2-х до 5 минут. А разные фильтры накладывать нужно несколько раз.
Замена midas.dll на версию от Delphi2006 результата не дала.


atruhin   (2006-06-08 17:10:00) [1]


> 48 с чем-то тысяч символов (в Far)...

Уметь надо. А то тут все SQL, SQL. Фильтры - это круто! :)


Johnmen   (2006-06-08 17:01:00) [2]

Фтопку такие программы, адназначна!
Афтара расстрелять.


Sergey13   (2006-06-08 16:49:00) [3]

2 [13] Torin ©   (08.06.06 16:41)
Абалдеть!!! 8-)))))))))))))))))))))))))))))))))))))


Torin   (2006-06-08 16:41:00) [4]

А было их-то у меня... 48 с чем-то тысяч символов (в Far)...


Sergey13   (2006-06-08 15:18:00) [5]

2[11] Torin ©   (08.06.06 15:11)
Сколько же их у тебя было то?!!! 8-)


Torin   (2006-06-08 15:11:00) [6]

Разбил IN на несколько "кусков" - все заработало.
Пасибки! B)
Получается, что лажа была не в весе ВСЕГО фильтра а в к-ве items в выражении IN...


ЮЮ   (2006-06-08 12:47:00) [7]

тогда уж  
 (SOTRUDNID IN (1, 2, 3, 4, 5)) OR(SOTRUDNID IN (6, 7, 8, 9, 0))
что для фильтра не подарок

>Уменьшаю выражение IN (Кооонкретно так уменьшаю) - все работает.
Очевидно, что набор кодов возникает на клиенте. Не проше в клиентском наборе  заиметь поле типа IsIncluded и ставить 1 или 0, тогда и фильтр сократится до
AND (IsIncluded = 1)

или использовать OnFilterRecord где сравнивать запись со "списоком помеченных"


Sergey13   (2006-06-08 12:45:00) [8]

Вместо AND OR


Desdechado   (2006-06-08 12:39:00) [9]

а каким еще его можно разбить?


Torin   (2006-06-08 12:37:00) [10]

Киаим образом раздить на несколько IN?
Имеется в виду SOTRUDNID IN (1, 2, 3, 4, 5) AND SOTRUDNID IN (6, 7, 8, 9, 0)?


Desdechado   (2006-06-08 12:26:00) [11]

попробуй разбить один IN(...) на несколько IN(..)


Torin   (2006-06-08 12:04:00) [12]

Фильтр перекопал. Там все ОК. К примеру, один из фильтров:
(NOT (SOTRUDNID IN (ДОФИГА ID через запятую))) AND (BANKNUMRAXYNOK='')
Уменьшаю выражение IN (Кооонкретно так уменьшаю) - все работает.
И нету привязки глюка к определенному ID - кровью проверено!


ЮЮ   (2006-06-08 11:38:00) [13]


> Но у меня отрабатывали фильтры с length > 256) и как с этим
> бороться.


Может все-же ошибка в фильтре, а не ограничение по длине, коль уж   отрабатывали фильтры с length > 256


Torin   (2006-06-08 11:30:00) [14]

К сожалению, на изменение логики работы приложения нету ни времени, ни человеко-ресурсов, ни желания руководства. Пока что нужно закончить то что есть :(


Sergey13   (2006-06-08 11:14:00) [15]

ИМХО.
С ОГРОМНЫМИ БД надо тщательнее работать с SQL и прорабатывать юзерский интерфейс, а не качать всю ОГРОМНУЮ на клиента для фильтрации. Может у тебя такой случай?


Torin   (2006-06-08 11:11:00) [16]

Если можно, продублируйте ответ на torin-sd@mail.ru, а то руководству иногда кажется, что программеру кроме электронной почты (и то в виде исключения) инет не нужен. ;(


Наверх

Титульная страница Поиск, карта сайта Написать письмо