Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2016, 19:59   #1
Бахтияр Оралов
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 25
По умолчанию Поиск по БД

как сделать поиск по БД с помощью RadioButton или просто поиск по БД по ФИО или Улицы когда пишу в edit и нажимаю кнопку срабатывал поиск..что не правильно?куда должно все выводиться?


Код:
procedure TPacient.Button1Click(Sender: TObject);
begin
if RadioButton1.Checked = true then
  begin
     with ADOQuery1 do
     begin
       SQL.Clear;
       SQL.Add(' SELECT * FROM Пациенты  Where [Код_пациента]  like "%'+Edit1.Text+'%"');
       Open;
     end;
  end
  else
  if RadioButton2.Checked = true then
  begin
     with ADOQuery1 do
     begin
       SQL.Clear;
       SQL.Add(' SELECT * FROM Пациенты   Where ФИО  like "%'+Edit1.Text+'%"');
       Open;
     end;
  end
  else
  if RadioButton3.Checked = true then
  begin
     with ADOQuery1 do
     begin
       SQL.Clear;
       SQL.Add(' SELECT * FROM Пациенты  Where Улица like like "%'+Edit1.Text+'%"');
       Open;
     end;
  end;
end;



end.
Изображения
Тип файла: png Screenshot_1.png (83.5 Кб, 84 просмотров)

Последний раз редактировалось Аватар; 07.11.2016 в 20:06.
Бахтияр Оралов вне форума Ответить с цитированием
Старый 16.11.2016, 08:47   #2
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от Бахтияр Оралов Посмотреть сообщение
begin
if RadioButton1.Checked = true then
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add(' SELECT * FROM Пациенты Where [Код_пациента] like "%'+Edit1.Text+'%"');
Open;
end;
end
else
if RadioButton2.Checked = true then
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add(' SELECT * FROM Пациенты Where ФИО like "%'+Edit1.Text+'%"');
Open;
end;
end
else
if RadioButton3.Checked = true then
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add(' SELECT * FROM Пациенты Where Улица like like "%'+Edit1.Text+'%"');
Open;
end;
end;
end;
1- Else между радиобаттонами вам не нужны, если рад.бат на 1 панели, вы физически не чекните более одного.
2- SQL.Add(' SELECT * FROM Пациенты Where [Код_пациента] like "%'+Edit1.Text+'%"');- запрос регистрозависимый.
SQL.Add(' SELECT * FROM Пациенты Where KOD_PAC like UPPER('+quotedstr('%'+ansiuppercase (Edit1.Text)+'%')+')');


3. SQL.Clear;
SQL.Add(' SELECT * FROM Пациенты Where ФИО like "%'+Edit1.Text+'%"');
Можно писать сразу так: SQL.text:=' SELECT * FROM Пациенты Where ФИО like "%'+Edit1.Text+'%"';

4: Можно сделать динамично без радиобаттонов:
Код:
var dop_sql:string;
begin
dop_sql:='';
if length(fam.text)>0 then dop_sql:=dop_sql+' AND FAM LIKE UPPER('+quotedstr(ansiuppercase(fam.text)+'%')+')';
if length(im.text)>0 then dop_sql:=dop_sql+' AND IM LIKE UPPER('+quotedstr(ansiuppercase(im.text)+'%)+')';
if length(ot.text)>0 then dop_sql:=dop_sql+' AND OT LIKE UPPER('+quotedstr(ansiuppercase(ot.text)+'%)+')';
ADOQuery1.sql.text:='SELECT * FROM пациенты WHERE ФИО<>'''' '+dop_sql
ADOQuery1.open;
end;
PS c АДО 100 лет не работал, погуглите о UPPER елси SQL ругаться будет
Пишу много и развернуто

Последний раз редактировалось Heneken87; 16.11.2016 в 08:56.
Heneken87 вне форума Ответить с цитированием
Старый 16.11.2016, 09:28   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Бахтияр Оралов Посмотреть сообщение
куда должно все выводиться?
в тот контрол, который у Вас связан с ADOQuery1 (скорее всего это какой-то DBGrid)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2016, 09:43   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Else между радиобаттонами вам не нужны, если рад.бат на 1 панели, вы физически не чекните более одного
ТС же и определяет таким образом какой из них чекнутый
Цитата:
запрос регистрозависимый
Если уж СУБД регистрозависима, то этого мало - то что слева от like тоже нужно привести к тому же регистру

Код_пациента судя по гриду числовой. Какой там like в запросе?
При поиске по фио или улице 1-ый процент в like не нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.11.2016, 09:38   #5
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
ТС же и определяет таким образом какой из них чекнутый
if radiobatto1.checked then
begin
КОд
end
else
if radiobatto2.checked then
begin
Код
end; Я про красный Else, он излишен.

Регистрозависимость: я же написал:
SQL.Add(' SELECT * FROM Пациенты Where KOD_PAC like UPPER('+quotedstr('%'+ansiuppercase (Edit1.Text)+'%')+')');
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 17.11.2016, 10:04   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Я про красный Else, он излишен
В смысле лучше, что все if-ы будут проверку устраивать, чем только часть из них?
Цитата:
Регистрозависимость
Тогда уж
Код:
SQL.Add(' SELECT * FROM Пациенты Where UPPER(KOD_PAC) like '+quotedstr('%'+ansiuppercase (Edit1.Text)+'%'));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.11.2016, 10:06   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Регистрозависимость: я же написал:
в БД есть Иванов
Иванов like UPPER('иванов') =FALSE

Цитата:
Я про красный Else, он излишен
Он полезен, отменяет ВСЕ последующие за ним проверки
Код:
if .. then 

else // ВСЕ следующее за ним не будет выполнено в случае выполнения предыдущей ветки
       if ... then  
else  if ... then 
else   ; //ВОТ досюда
Код:
if .. then 

else ;  МЫ "забыли" про результат предыдущей проверки
if ... then  // и будем проверять снова(уже другое условие)
else ;
 if ... then // и снова
else   ; //ВОТ досюда
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.11.2016 в 10:10.
evg_m на форуме Ответить с цитированием
Старый 18.11.2016, 07:31   #8
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Иванов like UPPER('иванов') =FALSE
like UPPER('+ansiuppercase ('иванов')+') =true - я так написал, а не как вы


Цитата:
Сообщение от evg_m Посмотреть сообщение
Он полезен, отменяет ВСЕ последующие за ним проверки
Он полезен,но если батоны на 1 панеле то излишен. НЕЛЬЗЯ чекнуть на 1 панеле более одного radioButton! Проверки и без else отработают.
Пишу много и развернуто

Последний раз редактировалось Heneken87; 18.11.2016 в 07:39.
Heneken87 вне форума Ответить с цитированием
Старый 18.11.2016, 07:47   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Упрямо отказывая в молоке, корова всё равно быком не станет (c)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.11.2016, 09:58   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
like UPPER('+ansiuppercase ('иванов')+') =true - я так написал
вот это как раз и не отработает.
даже если не обращать внимания на то, что Вы про кавычки для строковой константы забыли.

Вы реально не видите разницы между
Цитата:
SELECT * FROM Пациенты Where KOD_PAC like UPPER('+ansiuppercase ('иванов')+')
(кстати, это "масло маслянное" - делать UPPER для строки, которую уже перевели в верхний регистр, т.е. UPPER('ИВАНОВ'))


и между
Код:
' SELECT * FROM Пациенты Where UPPER(KOD_PAC) like '+quotedstr('%'+ansiuppercase (Edit1.Text)+'%'));

И не упорствуйте. Это не делает Вам чести. Ошибиться может каждый. Но упорствовать в своих заблуждениях - глупо.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
по ID поиск выдает результат, а по Фамилии нет. как осуществить поиск по фамилии Евгений174 БД в Delphi 5 12.04.2016 11:38
Помогите-при поиске через яндекс,поиск идёт в майле,поиск и браузер по умолчанию стоит яндекс, так же постоянно выскакивает казино Vlad8purple Windows 2 08.03.2016 14:52
Помощь в доработке программы на языке паскаль (бинарный поиск, поиск перебором) DimzNOVIchok45 Помощь студентам 0 13.10.2014 20:11
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск на языке Pascal DimzNOVIchok45 Помощь студентам 7 19.09.2014 21:40
Обработка одномерного массива - поиск среднего, поиск минимального, сортировка (Паскаль) nadez Паскаль, Turbo Pascal, PascalABC.NET 3 18.03.2014 08:45