Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Запрос по совпадению нескольких символов в цикле

26.03.2020, 02:48. Показов 896. Ответов 5

Студворк — интернет-сервис помощи студентам
Добро всем
У меня такой запрос работает с двумя строками а когда строк около 100 выдает ошибку слишком сложный запрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString sql;
    ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод";
    ADOQuery3->Open();
    ADOQuery3->Active=true;
 
    sql="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод WHERE Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
 
    //в цикле я определяю есть совпадение и дописываю Id (КодАбон)
    for(int i=0;i<ADOQuery3->RecordCount;i++)
      {
      if(ADOQuery3->Fields->Fields[6]->AsString.Pos(Edit4->Text)) //Edit4->Text параметр запроса 
        {
        sql+="  OR Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
        }
      ADOQuery3->Next();
      }
 
 
   ADOQuery1->SQL->Text=sql;
   ADOQuery1->Open();
   ADOQuery1->Active=true;
   DBGrid1->Columns->Items[3]->Visible=false;
задача одним запросом считать те данные у которых в примечании есть совпадение с Edit4->Text например запрос должен считать если в столбце примечание запись "Велосипед" и "Велорикша" и "Велодром" а в Edit4->Text задали "вело"

Добавлено через 9 минут
То-есть мне надо разом считать строки id номера которых я определяю в цикле по совпадению нескольких символов с параметром запроса
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2020, 02:48
Ответы с готовыми решениями:

Запрос на выборку по совпадению с частью поля
Здравствуйте. Есть запрос на выборку. Выборка происходит по определенному полю, с помощью . Как сделать, что бы при вводе части из поля,...

Группировка данных по совпадению первых трех символов в QRGroup
Можно ли, используя QRGroup сгруппировать данные по совпадению первых трех символов, если можно, то подскажите как, please...

Как переделать запрос в цикле на один запрос с фильтром по массиву
Мне говорят: код неправильный, надо запрос ciblockelement::getlist c фильтром по разделу, который в цикле для каждого раздела выполняется...

5
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
27.03.2020, 10:45
Добрый день, а какая БД?
0
Заблокирован
09.04.2020, 14:22
Цитата Сообщение от Samrisbe Посмотреть сообщение
Добро всем
У меня такой запрос работает с двумя строками а когда строк около 100 выдает ошибку слишком сложный запрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString sql;
    ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод";
    ADOQuery3->Open();
    ADOQuery3->Active=true;
 
    sql="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,НомерДоговора,Примечание FROM Адреса INNER JOIN Абоненты ON Адреса.АдрКод = Абоненты.АдрКод WHERE Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
 
    //в цикле я определяю есть совпадение и дописываю Id (КодАбон)
    for(int i=0;i<ADOQuery3->RecordCount;i++)
      {
      if(ADOQuery3->Fields->Fields[6]->AsString.Pos(Edit4->Text)) //Edit4->Text параметр запроса 
        {
        sql+="  OR Абоненты.КодАбон="+ADOQuery3->Fields->Fields[3]->AsString;
        }
      ADOQuery3->Next();
      }
 
 
   ADOQuery1->SQL->Text=sql;
   ADOQuery1->Open();
   ADOQuery1->Active=true;
   DBGrid1->Columns->Items[3]->Visible=false;
задача одним запросом считать те данные у которых в примечании есть совпадение с Edit4->Text например запрос должен считать если в столбце примечание запись "Велосипед" и "Велорикша" и "Велодром" а в Edit4->Text задали "вело"

Добавлено через 9 минут
То-есть мне надо разом считать строки id номера которых я определяю в цикле по совпадению нескольких символов с параметром запроса
Join-ами баловаться не нужно, они максимально нагружают СУБД, чтобы быстро выдать набор. Для этого они и придуманы.
Вашу выборку нужно упростить, например так:

ADOQuery3->SQL->Text="SELECT ФИО,Адрес,Квартира,КодАбон,Телефон,Номер Договора,Примечание FROM АДРЕСА, АБОНЕНТЫ WHERE Адреса.АдрКод = Абоненты.АдрКод"; ТО ЕСТЬ конструкцию JOIN нужно заменить условием WHERE, и после FROM писать имена обеих таблиц, а поля, описанные в условии (WHERE) пишутся только в условии, включать их в общую выборку не нужно, ибо база по ним только проверяет условие.
0
09.04.2020, 14:38

Не по теме:


Цитата Сообщение от tester_me Посмотреть сообщение
Join-ами баловаться не нужно, они максимально нагружают СУБД, чтобы быстро выдать набор. Для этого они и придуманы.
Для меня это очень странное высказывание, а еще больше становится странным так как ТС не указал тип БД.

0
Заблокирован
09.04.2020, 15:14
И еще попробуйте в конец вашего основного SQL-запроса добавить ограничение на количество выбираемых записей: "...LIMIT 50" например. Проверьте, поддерживает ли ваша база такую конструкцию языка. В MySQL, например, это поддерживается. В MS SQL раньше писали лимит в выборке записей в самом начале запроса, типа "SELECT TOP 50....". Если используют ограничение запросов по количеству выбранных записей, то упорядочивают выборку по ключевову полю, пишут, например, в конце всей SQL-строки типа "... ORDER BY ID", где ID - ключевое поле таблицы. При каждой такой выборке сохраняют в переменной значение текущего наибольшего выбранного ID, а в следующем SQL-запросе добавляют условие в выборку типа "...WHERE ...(здесь наши основн.условия запроса)... AND (новый)ID > (старое значение) ID..... ORDER BY ID LIMIT 5O;
Я вам практически описал весь патерн решения вашей типовой задачи )))
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
12.04.2020, 17:17  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Добрый день, а какая БД?
Acces
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2020, 17:17
Помогаю со студенческими работами здесь

Запрос в цикле или один длинный запрос?
Подскажите, пожалуйста, как лучше поступить? Есть магазин с 20 тыс товаров. Нужно обновить их по некоторым условиям. И вот вопрос, что...

Вставка в строку нескольких символов и удаление символов из строки
не могу найти информацию про это:( какими операторами это делается?

Вывод нескольких значений в цикле
Пишу выборку данных из базы и столкнулся с такой проблемой. Есть определенные числа, к которым в базе привязывается определенное время в...

Создание нескольких массивов в цикле
Возможно ли в цикле создать энное количество массивов? Например while(n!=20) {new arr&lt;n&gt;} Что то на подобие этого. В...

Передача нескольких файлов в цикле
Добрый день! на сайте можно выделить галочкой несколько файлов и они должны качаться. вопрос в том что сколько бы файлов не выделялось...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru