![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер! Столкнулся с такой проблмой: при фильтрации данных в таблице БД, если тип поля не строковый, т.е. числовой, дата и т.д., появляется ошибка:
could not convert variant of type OleStr into type Boolean void filtration(TTable *Table,TEdit *Edit,AnsiString Str) Пробовал задавать фильтр таким образом: Table->Filter = Str+"='"+Edit->Text.ToInt()+"'"; при вводе цифр в поле Edit фильтр работает, но как только стереть все что написал, появляется такая же ошибка. Вызов функции: filtration(mk_oborud,Edit3,"Year_vipusk"); Заранее Спасибо за помощь. Сообщение отредактировано: ninja - 8.12.2010 18:06 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
А ведь я уже говорил про это
![]() Вот тут: Ошибка при изменении условий поиска Смотри, что происходит: 1) ты получил содержимое Edit-а для фильтрации по этому значению. 2) если содержимое пустое - отключил фильтрацию, если нет - то включил. 3) изменил фильтр Это некорректный алгоритм. Фильтр не должен меняться при включенной фильтрации. Алгоритм должен быть такой: 1) отключить фильтрацию безоговорочно, как только вошел в функцию. 2) если поле не пустое - то сформировать строку фильтра и включить фильтрацию. |
ninja |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
исправил таким образом:
void filtration(TTable *Table,TEdit *Edit,AnsiString Str) сейчас ошибки нету, но при вводе цифр в поле Edit ничего не появляется, как-будто записи в таблице нету и если поставить "звездочку - *" в фильтре Table->Filter = Str+"='"+Edit->Text.ToInt()+"*'"; то появляется ошибка которую я написал выше... Сообщение отредактировано: ninja - 8.12.2010 18:40 |
Client |
![]()
Сообщение
#4
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
попробуй убрать ToInt, используй просто текст едита
|
ninja |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Если тип данных в таблице строковый работает нормально, а
Цитата если тип поля не строковый, т.е. числовой, дата и т.д., появляется ошибка |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Если тип данных в таблице - НЕ строковый, то о какой звездочке ты говоришь вообще? LIKE работает только со строками...
|
ninja |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Прошу прощения не знал, а как быть с другими типами?
Например нужно вывести числовые значения, при таком описании Table->Filter = Str+"='"+Edit->Text.ToInt()+"'"; информация из таблиц не появляется, как быть в такой ситуации? |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
|
ninja |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Работает
![]() if not Key in Mas then Key := #0 В C++ борюсь с проблемой с помощью конструкции: try Существует ли какой-нибудь другой способ? Сообщение отредактировано: ninja - 8.12.2010 19:38 |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Я имею ввиду, что при преобразовании в число функцией StrToInt() если вводится символы, то появляется ошибка Кроме StrToInt есть еще TryStrToInt, которая вернет false, если преобразование невозможно:int value; |
ninja |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
мм... Удобная функция, Спасибо
|
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 1:07 |