Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
MS Access

Поиск по части числового поля

28.06.2015, 21:20. Показов 1707. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на кнопке
C++
1
2
3
4
5
6
7
8
if (RadioButton5->Checked == true && Edit1->Text!="")
 {
 
ADOTable1->Filtered = false;
ADOTable1->Filter = "PHONE LIKE "+Edit1->Text+"";
ADOTable1->Filtered = true;
 
 }
Так вот, проблема заключается в том, что поле в БД числовое (Access) и выдает результат только при полном соответствии. Пробовал делать так
C++
1
ADOTable1->Filter = "PHONE LIKE %"+Edit1->Text+"%";
Но выдает ошибку, хотя со строковыми полями всё работает.
Как сделать так, чтобы выдавало результат даже при неполном совпадении?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2015, 21:20
Ответы с готовыми решениями:

Поиск содержимого поля формы Access в ячейках Excel (части или полного)
нужно осуществить поиск значения полей из Access в Excel (сначала туда вношу, потом надо найти сроку...) использую код (покажу часть)....

Запрос, сравнение поля код и числового поля из разных справочников
Всем доброго времени суток. Возникла проблема, при создании запроса. Есть 2 справочника : в 1-ом хранится информация об автомобилях (код,...

Выборка числового поля
Доброе утро, нужно провести выборку из таблицы, числовое поле если значение 0, нужно заменить пустотой. Поле не обязательно к заполнению....

16
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
28.06.2015, 23:18
Лучший ответ Сообщение было отмечено Maxipunchik как решение

Решение

может добавить текстовое поле в запрос (не в таблицу), например
SQL
1
SELECT *, cstr(phone) AS phone_str FROM test
и потом уже фильтровать по нему
C++
1
ADOTable1->Filter = "PHONE_STR LIKE '%"+Edit1->Text+"%'";
но может есть более красивое решение
1
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
29.06.2015, 07:16  [ТС]
Что-то не пойму как это сделать. Если так
C++
1
2
3
4
5
6
7
8
9
10
if (RadioButton5->Checked == true && Edit1->Text!="")
 {
 
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add("SELECT *, cstr(PHONE) AS PHONE_STR FROM [Áàçà äàííûõ2].Òàáëèöà");
 ADOQuery1->Open();
 
ADOTable1->Filtered = false;
ADOTable1->Filter = "PHONE_STR LIKE '%"+Edit1->Text+"%'";
ADOTable1->Filtered = true;
То пишет, что в коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.06.2015, 12:47
Maxipunchik, пробуй этот код должен работать при условии что поле числовое

C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
   
    if ((RadioButton5->Checked) && (!Edit1->Text.IsEmpty()))
  {
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("Select * from имя_таблицы WHERE PHONE_STR LIKE LIKE '"+Edit1->Text+"%' ORDER BY PHONE_STR LIKE");
    ADOQuery1->Open();
   
}
1
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
29.06.2015, 17:18  [ТС]
Увы. Пишет дословно следующее: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'PHONE_STR LIKE LIKE '22'"

Если это как-то поможет, то имя таблицы я ввожу так [База данных2].Таблица

22 - это цифры, которые я вводил в Эдит
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.06.2015, 18:08
Maxipunchik, ой я не правильно написал по ошибке.
Пробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
   
    if ((RadioButton5->Checked) && (!Edit1->Text.IsEmpty()))
  {
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("Select * from имя_таблицы WHERE PHONE_STR LIKE '"+Edit1->Text+"%' ORDER BY PHONE_STR");
    ADOQuery1->Open();
   
}
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
29.06.2015, 18:33
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Что-то не пойму как это сделать. Если так

C++
1
2
3
4
5
6
7
8
9
if (RadioButton5->Checked == true && Edit1->Text!="")
{
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT *, cstr(PHONE) AS PHONE_STR FROM [ГЃГ*Г§Г* Г¤Г*Г*Г*ûõ2].Г’Г*áëèöГ*");
ADOQuery1->Open();
 
ADOTable1->Filtered = false;
ADOTable1->Filter = "PHONE_STR LIKE '%"+Edit1->Text+"%'";
ADOTable1->Filtered = true;
То пишет, что в коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру


ты добавляешь новое поле в ADOQuery1, а фильтровать пытаешься ADOTable1, потому и ошибка.

Замени ADOTable1 на ADOQuery1, всё заработает.
1
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
29.06.2015, 20:51  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Пробуй так
Теперь пишет: Параметр PHONE_STR не имеет значения по умолчанию
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.06.2015, 20:56
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Теперь пишет: Параметр PHONE_STR не имеет значения по умолчанию
Очень странно уменя такая запись работает
0
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
29.06.2015, 21:01  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Замени ADOTable1 на ADOQuery1, всё заработает.

C++
1
2
3
4
5
6
7
8
9
10
11
if (RadioButton5->Checked == true && Edit1->Text!="")
{
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT *, cstr(PHONE) AS PHONE_STR FROM [База Данных2].Таблица");
ADOQuery1->Open();
 
ADOQuery1->Filtered = false;
ADOQuery1->Filter = "PHONE_STR LIKE '%"+Edit1->Text+"%'";
ADOQuery1->Filtered = true;
 
   }
Теперь просто ничего не происходит. ADOQuery вроде правильно подключил. Актив = тру.

Добавлено через 2 минуты
Цитата Сообщение от Sasha Посмотреть сообщение
Очень странно уменя такая запись работает
Уже склоняюсь к переделыванию в бд числового в строковое значение. Раз уж так все замудрено)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.06.2015, 21:32
Цитата Сообщение от Maxipunchik Посмотреть сообщение
[База Данных2].Таблица
А что это за название таблицы такое?

Добавлено через 44 секунды
Да ещё и через точку
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
30.06.2015, 00:16
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Теперь просто ничего не происходит.
я у себя проверил перед тем как постить, все работает
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Уже склоняюсь к переделыванию в бд числового в строковое значение.
и правильно сделаешь, и переделывать там много не надо, на то есть SQL
0
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
30.06.2015, 06:16  [ТС]
Документ Access называется База данных2.mdb. В нем таблица под названием Таблица

Добавлено через 1 минуту
Цитата Сообщение от _Dimon_ Посмотреть сообщение
я у себя проверил перед тем как постить, все работает
Если бы всё работало, я бы не писал.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.06.2015, 08:03
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Документ Access называется База данных2.mdb. В нем таблица под названием Таблица
Пиши просто Таблица
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
30.06.2015, 08:59
Цитата Сообщение от Maxipunchik Посмотреть сообщение
Теперь просто ничего не происходит. ADOQuery вроде правильно подключил. Актив = тру.
Я подозреваю, что ничего у тебя не происходит, потому что компонент, отображающий записи из базы (DBGrid или что ты там используешь) у тебя остался подключен к ADOTable1. Естественно он не отображает манипуляции с ADOQuery1
1
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
30.06.2015, 10:17  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Я подозреваю, что ничего у тебя не происходит, потому что компонент, отображающий записи из базы (DBGrid или что ты там используешь) у тебя остался подключен к ADOTable1
Спасибо за светлую мысль. Действительно все было так. Даже больше скажу, у меня в ADOQuery был выбран DataSourse. Из-за этой настройки в самом DataSourse ADOQuery не появлялся в выпадающем списке. После очистки всё появилось. Вот код для потомков)

C++
1
2
3
4
5
6
7
8
9
10
11
12
if (RadioButton5->Checked == true && Edit1->Text!="")
{
DBGrid1->DataSource->DataSet = ADOQuery1;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT *, cstr(PHONE) AS PHONE_STR FROM [База данных2].Таблица");
ADOQuery1->Open();
 
ADOQuery1->Filtered = false;
ADOQuery1->Filter = "PHONE_STR LIKE '%"+Edit1->Text+"%'";
ADOQuery1->Filtered = true;
 
   }
Всем спасибо за советы, так же, если не трудно поясните что это за штука такая cstr(PHONE) ? В помощи вообще нет такого
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
30.06.2015, 10:50
Справка офиса

Функция CStr() приводит полученный аргумент к типу String
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2015, 10:50
Помогаю со студенческими работами здесь

Увеличение числового поля на 1
Всем привет! Подскажите, пожалуйста, как увеличить при добавлении записи в таблицу числовое поле на 1. К примеру текущая запись в...

Проверка числового поля
Вопрос лёгкий. Но кое что хочу всё таки разжевать=) Задача такая - создать поле чтобы в него можно было записать только числовые...

Формат числового поля по условию
Здраствуйте, Делаю форму с прайсом. Некоторые товары имеют цену в долларах, некоторые в евро, большинство в гривнах. Хотелось бы чтоб...

Валидация числового поля во view
Есть в таблице БД поля например цена еды. Данный ценник буду хранить в копейках. 'food' => $this->integer(11), ...

Метод решета числового поля
Ребят, подскажите пожалуйста пример метода решета числового поля или лучше реализация этого алгоритма. Что-то не могу найти. решето...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru