0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 9
MS Access

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

28.06.2015, 21:20. Показов 1714. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru