С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20

Организация поиска через DBGrid

22.04.2017, 09:47. Показов 3089. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Компонент DBGrid показывает значения из БД SQL Servera Таблицу школьник. При вводе в Edit1 должно искать по всем перечисленным полям. Но программа выдает ошибку : не правильный синтаксис возле конструкции 'like'.
Прошу исправить ошибки или предложить другой вариант кода, для поиска по всему компоненту DBGrid.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm19.Edit1Change(Sender: TObject);
var
h1, h2: string;
begin
h1:='%'+Form19.Edit1.Text+'%';
h2:=QuotedStr(h1);
with Form19.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select*from ШКОЛЬНИК where ФИО_шк_ка like'+ h2 +' or Адрес_шк_ка like'+ h2 +' or Тел_шк_ка like'+ h2 +' or Класс likе);
open;
end;
end;
Выдает ошибку like
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2017, 09:47
Ответы с готовыми решениями:

Организация подгрузки данных в DBGrid
Всем привет, ребята. Delphi 7, MySQL - localhost. Сабж: - есть форма; - на ней 5 кнопок; - есть DBGrid; Всё это дело...

Организация поиска
Здравствуйте уважаемые эксперты, я в делфи на уровне среднего ламера помогите реализовать такую цель: Есть база данных access...

Организация поиска по БД (Paradox7)
Доброго времени суток! Есть программа для работы с базами данных. Вышло так, что уже подключила базу через стандартный Database desktop и...

19
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
22.04.2017, 10:05
А пробелы кто ставить будет между LIKE h2?

Добавлено через 5 минут
И после последнего LIKE ничего нет.
1
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
22.04.2017, 10:20  [ТС]
Если ввожу так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm19.Edit2Change(Sender: TObject);
var
h1, h2: string;
begin
if Edit1.Text = '' then Exit;
h1:='%'+Form19.Edit2.Text+'%';
h2:=QuotedStr(h1);
with Form19.ADOQuery1 do
begin
close;
sql.Clear;
sql.text:='select*from ШКОЛЬНИК where Инд_ном_шк_ка like'+ h2;
open;
end;
end;
То все норм. Но мне нужен поиск по нескольким столбцам.

а ввожу :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm19.Edit1Change(Sender: TObject);
var
h1, h2: string;
begin
if Edit1.Text = '' then ShowMessage ('Введите значение !');
h1:='%'+Form19.Edit1.Text+'%';
h2:=QuotedStr(h1);
with Form19.ADOQuery1 do
begin
close;
sql.Clear;
sql.text:='select*from ШКОЛЬНИК where ФИО_шк_ка like'+ h2 +' or Адрес_шк_ка like'+ h2 +' or Тел_шк_ка like'+ h2 +' or Класс likе';
open;
end;
end;
Выводит ту же ошибку:
Рядом с like в контексте где ожидается условие указано выражение типа отличного от логического.
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
22.04.2017, 10:24
Цитата Сообщение от TFullControl Посмотреть сообщение
И после последнего LIKE ничего нет.
!!!
1
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 07:47  [ТС]
Разобралась.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm19.Edit2Change(Sender: TObject);
var
h1, h2: string;
begin
if Edit2.Text = '' then Exit;
h1:='%'+Form19.Edit2.Text+'%';
h2:=QuotedStr(h1);
with Form19.ADOQuery1 do
begin
close;
//sql.Clear;
sql.text:='select*from ШКОЛЬНИК where Инд_ном_шк_ка like'+ h2;
open;
end;
end;
Такой код работает. Как сделать чтобы при вводе значений в одно поле Эдит происходил поиск по нескольким полям таблицы?

Добавлено через 7 минут
Спасибо, что помогли! Разобралась. Теперь работает .

Добавлено через 21 час 0 минут
Хочу применить данный поиск к компоненту DBGrid который связан в делфи 7 через диаграмму с другим DBGrid.
Почему то данный поиск не работает. На данной форме есть только два компонента DataSourse и ADOTable-два компонента. Добавила ADOQuery и соединила его c ADOConnection.
Код тот же:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm10.Edit1Change(Sender: TObject);
var
h1, h2: string;
begin
if Edit1.Text = '' then Exit;
h1:='%'+Form10.Edit1.Text+'%';
h2:=QuotedStr(h1);
with Form10.ADOQuery1 do
begin
close;
//sql.Clear;
sql.text:='select*from ШКОЛЬНИК where Инд_ном_шк_ка like'+ h2+' or Тел_шк_ка like'+ h2+' or ФИО_шк_ка like'+ h2+' or Адрес_шк_ка like'+ h2+' or Класс like'+ h2+' or Буква_кл like'+ h2;
open;
end;
end;
Как сделать поиск рабочим в данной форме?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 07:58
Цитата Сообщение от Ppz Посмотреть сообщение
Добавила ADOQuery и соединила его c ADOConnection.
от того, что запрос выполнится и выберет нужные записи кому станет легче? Гриды как отображали данные из ADOTable так и отображают. Надо у DataSource заменить DataSet c ADoTableX на ADOQuery1, чтобы в гриде отображались результаты вашего запроса
1
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 08:11  [ТС]
Выдает ошибку : ADOQuery1 : СommandText does not return a result set.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 08:17
в дизайне? Ну так запишите и туда SQL хотя бы select * from ШКОЛЬНИК предже, чем начнете править в рантайм
1
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 10:00  [ТС]
Разобралась, потому что в sql запросе не чего не было... Спасибо. Теперь работает данный поиск.

Добавлено через 1 час 40 минут
Есть компонент DBGrid, в нем происходит поиск ( Но поиск может производиться по всему компоненту DBGrid через компонент Edit) .Курсор стоит на одном конкретном человеке, с конкретным индивидуальным номером, при нажатии на кнопку удалить-происходить удаление выбранного чел-ка из БД, но хочется чтобы еще и удалялась другая информация из другого DBGrid.
Т.е. в одной таблице информация о человеке, она удаляется. А в другой таблице выдача книг, дата выдачи, дата возврата кн инд ном читателя и др. поля.

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

Добавлено через 1 минуту
есть вариант удалять по одной записи, но это очень долго.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 10:37
Цитата Сообщение от Ppz Посмотреть сообщение
при нажатии на кнопку удалить-происходить удаление выбранного чел-ка из БД, но хочется чтобы еще и удалялась другая информация из другого DBGrid.
значит совсем неважная у вас структура данных, если из главной таблицы запись удалилась, а из подчиненных - нет. Да
Цитата Сообщение от Ppz Посмотреть сообщение
есть вариант удалять по одной записи, но это очень долго.
если удалять не из грида, а из таблицы, то можно одним запросом
0
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 11:35  [ТС]
Напишите пожалуйста код, как можно сделать запрос через удаление из таблицы. (Это же через компонент ADOTable?)

Добавлено через 18 минут
А на счет того что при удалении школьника из БД его информация о выдаче книги не удаляется, так и должно быть. Нельзя чтобы шуольника удалили из БД если у него есть не возвращенные книги.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 12:12
Цитата Сообщение от Ppz Посмотреть сообщение
Это же через компонент ADOTable?
нет это компонент ADOQuery, где должен быть записан запрос на удаление из связных таблиц, типа
SQL
1
2
3
DELETE FROM НесданныеКниги WHERE Школьник = :Id
DELETE FROM ВзятыеКниги WHERE Школьник = :Id
DELETE FROM ЗаказанныеКниги WHERE Школьник = :Id
и перед удалением записи из главной таблицы, в BeforeDelete подставить значения параметра и выполнить (ExecSQL)
0
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 13:31  [ТС]
есть запрос но он на другой форме и нужен он для удаления,изменения добавления. Можно же через этот же запрос сделать так чтобы при нажатии кнопки удалялись данные из таблицы ШКОЛЬНИК и из таблицы АБОНЕМЕНТ . Можно сделать такой код (указанный ниже) для кнопки ?

Delphi
1
2
3
4
5
6
7
8
9
if Edit3.Text = '' then Exit; 
Form8.adoquery2.Delete;
 
withe Form_.ADOQuery_ do
begin
close;
sql.text:='delete from АБОНЕМЕНТ where Инд_ном_шк_ка=: ' Form_.Edit3';
open;
end;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 13:46
Цитата Сообщение от Ppz Посмотреть сообщение
Можно же через этот же запрос сделать
если вы ограничены в количестве ADOQuery, можете. Это же так удобно
тогда уж
Delphi
1
2
3
4
5
6
  withe TADOQuery.Create do begin
    Connection := ...
    SQL := ...
    ExecSQL; 
    Free;
  end
1
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
23.04.2017, 13:57  [ТС]
withe TADOQuery.Create do begin
Connection := ...
SQL := ...
ExecSQL;
Free;
end

SQL :=delete from АБОНЕМЕНТ where Инд_ном_шк_ка=: Form_.Edit3
Такое же не прокатит .
а Connection какое значение присваивать?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
23.04.2017, 14:08
Цитата Сообщение от Ppz Посмотреть сообщение
а Connection какое значение присваивать?
такое же, как и во всех остальных ADOQuery и ADOTable. Или оно у всех разное
параметрический запрос в таком случае тоже будет уже не нужен, можно будет
Delphi
1
SQL :='delete from АБОНЕМЕНТ where Инд_ном_шк_ка=' + DataSet.FieldByName('имя ключевого поля').AsString;
0
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
24.04.2017, 14:14  [ТС]
А если в другой форме у меня связано с компонентом DataSoerse Что делать?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
25.04.2017, 15:06
Цитата Сообщение от Ppz Посмотреть сообщение
А если в другой форме у меня связано с компонентом DataSoerse Что делать?
Если вы его удалите, что что пойдете его рассматривать на другой форме? На другую форму вы уже зайдете с другим школьником, ещё не удаленным. Или вы вываливаете таблицы целиком? безо всякой фильтрации и отбора?
0
0 / 0 / 0
Регистрация: 22.04.2017
Сообщений: 20
25.04.2017, 17:44  [ТС]
вываливаю таблицы целиком =(.

Как написать запрос sql , удалять из таблица Абонемент , пока инд_ном_школьника = Едиту 1 с другой формы???

SQL.Text:='delete from АБОНЕМЕНТ where Инд_ном_шк_ка...
0
0 / 0 / 0
Регистрация: 28.04.2017
Сообщений: 4
28.04.2017, 21:17
Цитата Сообщение от Ppz Посмотреть сообщение
Как написать запрос sql , удалять из таблица Абонемент , пока инд_ном_школьника = Едиту 1 с другой формы???
соедините с формой в которой находится Adoquery
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2017, 21:17
Помогаю со студенческими работами здесь

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

Установка DBGrid columns при выводе через запрос SQLquery (обычный вывод в editing DBGrid Columns все настраивается)
procedure TForm1.Button33Click(Sender: TObject); //Кнопка Все вывести begin sqlquery2.Active:=FALSE; ...

Вывод результатов поиска в dbgrid
Помогите пожалуйста вывести результаты поиска в dbgrid2. Вот код поиска: qry1.close; qry1.SQL.Clear; qry1.SQL.Add('SELECT * FROM...

DBGrid подсветка результата поиска
Всем добрый день, я уже задавал похожий вопрос) Есть проблема, как вывести результат поиска в DBGrid и подсветить результат?

Ошибка в результате поиска в dbgrid
Есть обработчик события нажатия кнопки: procedure TForm1.Button1Click(Sender: TObject); begin Form2.Caption:=''; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru