Delphi

Фильтрация данных

Здравствуйте, у меня такая проблема. Когда провожу фильтрацию по полям таблицы то 2 поля никак не хотят фильтроваться (по всем остальным фильтрация работает) и возникает ошибка (одинаковая для обоих полей), это поле BNAME, BPUBLISH. они текстовые, а сама база сделанна в InterBase. Поле BAUTHOR тоже текстовое но по нему фильтрация проводится, и код точно такой же как и на тех полях. В чем проблема подскажите.
Код
По моему в этом случае было бы более правильно использовать SQL (SELECT FROM WHERE), потому как филтер не умеет пользоваться индексами. То есть скорость выборки может быть убийстевенно долгая.
Но вернёмся к твоим баранам.
Какого размера поля? И есть ли зависимости на них?
Странно что ты не используешь else
например:
Код
поля 75 BNAME и 50 BPUBLISH типа CHAR, зависимостей нет.
поле BAUTHOR 50 тоже текстовое зависимостей нет, а вот фильтрация работает.
таблица эта типа справочника, где хранится список книг и данные по ним.
LAW
Цитата
Для: @rtem
у вас похоже с Charset проблема. надо выставить так чтоб на клиенте совпадала с серверным
не особо имел дело с IB но кажеться гдето в конекшине это делается ...
Цитата
Для: LAW
Цитата
А в квери куда ты считываешь поля случаем нет предопределённого набора полей?
Что бы это посмотреть надо дважды кликнуть по Query.
Если есть удали все поля и попробуй выполнить селект заново.
Цитата
А на какой точно строке происходит данная ошибка? на Query->Open?
Для: LAW
Цитата
Я не про то. На какои именно строчке кода из приведённыхтобой выше?
Для: LAW
при ошибке никакая строчка не выделяется красным как ошибка, если ты об этом.
Измним вопрос. Когда ты трассируешь по F8, то на каккой строке вылетает ошибка, показанная тобой на приложенном скриншоте?
Цитата
Для: MatlabX
спасибо я попробую, но дело в том, что с этими полями и так все работает, а вот поля BNAME, BPUBLISH в них проблема. Но я гляну ответ напишу.
[/quote]а вот поля BNAME, BPUBLISH в них проблема[/quote]
По тоей ошибки ты место integer а отправляешь string. Попробуй как я написал, и пожалуюстя
напиши ответ.
Для: LAW Цитата
Судя по скрину ошибки, при попытке преобразования кодировки строки происходит ошибка.
Тут надо уточнить, в какой кодировке хранятся поля BNAME и BPUBLISH в базе (я пользуюсь бесплатной оболочкой IBExpert для таких вещей) и какой порядок сортировки установлен для этих полей.
Второй вариант - это отсутствие языковых библиотек INTL - сервер не может получить информацию по правилам сортировки в разных кодовых страницах....
Для: Andromeda Хм кодировка одна WIN 1251
Код
Для: MatlabX
текст запроса или ошибки??
запрос вот:
select * from books where(BName='........название книги......')
текст ошибки на скриншоте
Не вдаваясь в подробности, могу посоветовать следующее:
После того как полностью сформирован текст запроса, но перед Query.Open сделай Query.SQL.SaveToFile, в случае ошибки в самом запросе будет указана строка и столбец ошибочного выражения.
Тогда откроешь файл с сохраненным запросом (что сделан через SaveToFile), и посмотришь в чем причина.
Еще могу порекомендовать вместо ручного добавления апострофов использовать QuotedStr, ошибок обычно меньше становится.