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

Поиск в базе данных по нескольким полям

22.05.2015, 16:38. Показов 4077. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, столкнулся с такой проблемой, нашел код поиска по базе данных Ассеss в билдере. Но он работает только для одного поля, мне нужно для нескольких, но что бы считывало с одного Edit.
Вот код, подскажите пожалуйста, как это сделать
C++
1
2
3
4
5
6
7
8
void __fastcall TSearch::Button1Click(TObject *Sender)
{
Form1->ADOTable1->First();
while(!Form1->ADOTable1->Eof)
{
if(Form1->ADOTable1->FieldByName("Code books")->AsString == Edit1->Text) break;
Form1->ADOTable1->Next();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2015, 16:38
Ответы с готовыми решениями:

Поиск по нескольким полям в Базе Данных
Здаствуйте, хотел бы попросить выложить пример, с поиском по нескольким атрибутам в Базе Данных. Желательно что-бы там был осуществлён...

Поиск по всем полям в базе данных
Подскажите пожалуйста. Вот у меня есть база данных Access и в делфи и в базе две таблицы и в каждой по шесть полей. как мне сделать поиск...

Поиск в базе данных по нескольким параметрам
Здравствуйте, подскажите кто-нибудь, как сделать следующее: В попупе находятся критерии для поиска квартир, например "цена",...

16
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.05.2015, 17:04
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TSearch::Button1Click(TObject *Sender)
 {
 Form1->ADOTable1->First();
 while(!Form1->ADOTable1->Eof)
 {
  if((Form1->ADOTable1->FieldByName("Code books")->AsString == Edit1->Text) || (Form1->ADOTable1->FieldByName("Другое поле")->AsString == Edit1->Text)) 
  { 
   break;
  }
  Form1->ADOTable1->Next();
 }
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
22.05.2015, 17:11  [ТС]
Спасибо огромное, еще один вопрос, как сделать что бы выделяло несколько, например, книг с одним автором?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.05.2015, 19:36
4elove4uk, пробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{    TDataSet *dataset = Column->Field->DataSet;
 
    // Пушкин, то выделяем её жёлтым
    if(dataset->FieldByName("поле автора")->AsString == "Пушкин")
    {
        DBGrid1->Canvas->Brush->Color = clYellow;
    }
 
    // Если ячейка выбрана, то делаем текст красным и жирным
    if(State.Contains(Grids::gdSelected))
    {
        DBGrid1->Canvas->Font->Color = clRed;
        DBGrid1->Canvas->Font->Style = TFontStyles() << fsBold;
    }
 
    DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
22.05.2015, 19:52  [ТС]
Спасибо, только мне нужно что бы когда я в форме поиска ввел имя автора, книги, код книги, год публикации, в базе данных выделяло несколько совпадений, а не одно.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
22.05.2015, 20:07
Цитата Сообщение от 4elove4uk Посмотреть сообщение
а не одно.
А разве оно выделяет одну строку? Выложи код
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
22.05.2015, 23:51  [ТС]
Смотрите, мне нужно когда я в форме поиска, в Edit ввожу имя автора, название книги, год выпуска. Выделялись все совпадения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TSearch::Button1Click(TObject *Sender)
 {
 Form1->ADOTable1->First();
 while(!Form1->ADOTable1->Eof)
 {
  if((Form1->ADOTable1->FieldByName("Code books")->AsString == Edit1->Text)
  || (Form1->ADOTable1->FieldByName("Name")->AsString == Edit1->Text)
  || (Form1->ADOTable1->FieldByName("Publication")->AsString == Edit1->Text)
  || (Form1->ADOTable1->FieldByName("Author 1")->AsString == Edit1->Text)
  || (Form1->ADOTable1->FieldByName("Author 1")->AsString == Edit1->Text)
  || (Form1->ADOTable1->FieldByName("Other author")->AsString == Edit1->Text))
  { 
   break;
  }
  Form1->ADOTable1->Next();
  Edit1->Clear();
  Search->Close();
 }
 }
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.05.2015, 23:55
Цитата Сообщение от 4elove4uk Посмотреть сообщение
Выделялись все совпадения
- тогда к чему здесь break? Это же выпадение из цикла после первого же совпадения.
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
23.05.2015, 00:23  [ТС]
Без break не ищет совсем.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33377 / 21501 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
23.05.2015, 12:09
Цитата Сообщение от 4elove4uk Посмотреть сообщение
Выделялись все совпадения
Да ГДЕ ты их выделять-то хочешь? Прямо в БД? Она для этого не предназначена, выделять что-то можно только при отображении. А где ты отображаешь базу - ты и слова не сказал...
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
23.05.2015, 12:47  [ТС]
Вот моя работа, хочу сделать что бы при вводе текста поиска, в таблицe BdGrid выделяло каким то цветом все совпадения автора или года выпуска. Извиняюсь, но я так и не могу сообразить, как то сделать. И сейчас поиск не очень корректно работает. Если кто то глянет, подскажет как исправить, буду благодарен.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
23.05.2015, 12:56
4elove4uk, а вам не кажется, что ваш вариант поиска не дает человеку результатов поиска, потому что потом ему еще и самому придется выискивать помеченные записи... если записей 5, то ваш поиск подойдет, не спорю, а если записей - 10000... не понимаю, почему никого не устраивает фильтрация, чтобы выводились на экран только результаты поиска... и вам проще, и пользователь меньше думает... да и нагляднее она на порядок, ИМХО...
0
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
23.05.2015, 12:59  [ТС]
Фильтрация? Как ее реализовать? Подскажите пожалуйста.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
23.05.2015, 13:04
4elove4uk, да все просто, но попробую объяснить на пальцах:
изначально у вас в гриде источником данных является запрос:
SQL
1
SELECT * FROM <table_name>
для того, чтобы получить результат поиска, ваш запрос усложняется ровно на условие, которое нужно пользователю:
SQL
1
SELECT * FROM <table_name> WHERE <condition>
,
где <condition> - в вашем случае будет, к примеру:
C++
1
"Code books like '%" + Edit1->Text + "%'"
после того, как источник данных откроется, в гриде отобразится искомые записи...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.05.2015, 18:23
4elove4uk, вот проект пробуй так подойдёт?
Вложения
Тип файла: rar Kyrsova1.rar (766.2 Кб, 39 просмотров)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.05.2015, 18:47
Второй вариант более усовершенствованный
Вложения
Тип файла: rar Kyrsova1.rar (763.4 Кб, 64 просмотров)
1
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 41
23.05.2015, 20:29  [ТС]
Спасибо огромное, именно то что я и хотел)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2015, 20:29
Помогаю со студенческими работами здесь

Поиск в базе данных одновременно по нескольким названиям (Например HTC и Apple)
Добрый день! Пишу курсовую работу на C++ Builder, я смог релизовать поиск в базе данных по одному названию, а мне надо чтобы можно...

Поиск по сайту: не могу разобраться, как делать поиск по нескольким полям
поиск по одному полу осуществляется вот так: SELECT * from tablepart WHERE `marka` LIKE '%&quot; . $search . &quot;%' or `model` LIKE '%&quot;...

Поиск по нескольким полям
что то я делаю не так... если делаю так: ADOQuery1.SQL.Clear; AdoQuery1.Sql.Add('SELECT * FROM База WHERE Наименование LIKE :nam or...

Поиск по нескольким полям
Добрый день, столкнулся с дилеммой, не знаю как решить. Суть, делаю поиск по нескольким полям, пишу запрос. SELECT * FROM TABLE WHERE ...

Поиск по нескольким полям
У меня есть одна таблица, в которой 7 полей. Необходимо реализовать поиск по одному или нескольким полям. Вообще не имею представления, как...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru