1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
| ninja |
8.12.2010 18:01
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
Добрый вечер! Столкнулся с такой проблмой: при фильтрации данных в таблице БД, если тип поля не строковый, т.е. числовой, дата и т.д., появляется ошибка:
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 |
8.12.2010 18:17
Сообщение
#2
|
|
Гость |
А ведь я уже говорил про это
Вот тут: Ошибка при изменении условий поиска Смотри, что происходит: 1) ты получил содержимое Edit-а для фильтрации по этому значению. 2) если содержимое пустое - отключил фильтрацию, если нет - то включил. 3) изменил фильтр Это некорректный алгоритм. Фильтр не должен меняться при включенной фильтрации. Алгоритм должен быть такой: 1) отключить фильтрацию безоговорочно, как только вошел в функцию. 2) если поле не пустое - то сформировать строку фильтра и включить фильтрацию. |
| ninja |
8.12.2010 18:39
Сообщение
#3
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
исправил таким образом:
void filtration(TTable *Table,TEdit *Edit,AnsiString Str) сейчас ошибки нету, но при вводе цифр в поле Edit ничего не появляется, как-будто записи в таблице нету и если поставить "звездочку - *" в фильтре Table->Filter = Str+"='"+Edit->Text.ToInt()+"*'"; то появляется ошибка которую я написал выше... Сообщение отредактировано: ninja - 8.12.2010 18:40 |
| Client |
8.12.2010 18:44
Сообщение
#4
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
попробуй убрать ToInt, используй просто текст едита
|
| ninja |
8.12.2010 18:47
Сообщение
#5
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
Если тип данных в таблице строковый работает нормально, а
Цитата если тип поля не строковый, т.е. числовой, дата и т.д., появляется ошибка |
| volvo |
8.12.2010 18:49
Сообщение
#6
|
|
Гость |
Если тип данных в таблице - НЕ строковый, то о какой звездочке ты говоришь вообще? LIKE работает только со строками...
|
| ninja |
8.12.2010 18:54
Сообщение
#7
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
Прошу прощения не знал, а как быть с другими типами?
Например нужно вывести числовые значения, при таком описании Table->Filter = Str+"='"+Edit->Text.ToInt()+"'"; информация из таблиц не появляется, как быть в такой ситуации? |
| volvo |
8.12.2010 19:11
Сообщение
#8
|
|
Гость |
|
| ninja |
8.12.2010 19:35
Сообщение
#9
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
Работает
if not Key in Mas then Key := #0 В C++ борюсь с проблемой с помощью конструкции: try Существует ли какой-нибудь другой способ? Сообщение отредактировано: ninja - 8.12.2010 19:38 |
| volvo |
8.12.2010 19:51
Сообщение
#10
|
|
Гость |
Цитата Я имею ввиду, что при преобразовании в число функцией StrToInt() если вводится символы, то появляется ошибка Кроме StrToInt есть еще TryStrToInt, которая вернет false, если преобразование невозможно:int value; |
| ninja |
8.12.2010 19:55
Сообщение
#11
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: 0 |
мм... Удобная функция, Спасибо
|
![]() ![]() |
|
Текстовая версия | 8.12.2025 16:44 |