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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 19:23   #1
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию sql запросы

Я создал бд в делфи спомощью TQuery и DBGrid! Реализую поиск по баз данных спомощью sql запроса используя Edit и RadioGroup!
Вот процедура поиска:
Код:
procedure TForm3.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var s : string;
  begin
    datasource1.DataSet:=ADOQuery1;
      if ADOQuery1.Active then ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  S:='Select * From Таблица1 Where '+RadioGroup1.Items.Strings[RadioGroup1.itemindex]+' like '+#39+Edit1.Text+'%'+#39+'Order By №';
  ADOQuery1.SQL.Add(S);
  ADOQuery1.Open;
end;
Этот поиск работает для текстовых полей! Как только дело доходит до чисел появляется ошибка! Помогите написать запрос для поиска по числам!
Mr.Steroid вне форума Ответить с цитированием
Старый 16.10.2010, 19:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как только дело доходит до чисел появляется ошибка!
Все потому что #39 - это ковычка одинарная, используется только для описания текста. Для чисел ковычки в запросы не ставятся, но!
Есть маленькое но...
Тебе нужно проверять поле. Если RadioGroup1.Items.Strings[RadioGroup1.itemindex] указывает на числовое поле то не ставить, если на строковое то ставить, так что я бы на твоем месте описав case проверял что выбрано в RadioGroup1.itemindex, в зависимости от этого уже формировал правильный запрос
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2010, 19:34   #3
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Stilet что то я не совсем понял про ковычки! Поясни, пожалуйста!

Как я понял если организовать поиск по числам то #39 писать не нужно?!

Последний раз редактировалось artemavd; 16.10.2010 в 19:46.
Mr.Steroid вне форума Ответить с цитированием
Старый 16.10.2010, 19:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поясню.
Код
Цитата:
S:='Select * From Таблица1 Where '+RadioGroup1.Items.Strings[RadioGroup1.itemindex]+' like '+#39+Edit1.Text+'%'+#39+'Order By №';
Сформирует строку
Select * From Таблица1 Where поле like '%значение' Order By №
Это сработает если поле строкового типа.
Для числовых нужен (пардон: желателен) запрос
Select * From Таблица1 Where поле=значение Order By №
Без like (поскольку он только для текстовых полей дает свой эффект) и без одинарной ковычки, ибо она только для текстовых полей нужна. Иногда СУБД сама преобразует строку в число, думая за нерадивого программиста, но надеяться на это все равно что авось.
код #39 как раз указывает что тут должна быть одинарная ковычка.
поняв?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2010, 19:43   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Для текстовых:
Код:
procedure TForm3.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var s : string;
  begin
    datasource1.DataSet:=ADOQuery1;
      if ADOQuery1.Active then ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  S:='Select * From Таблица1 Where '+RadioGroup1.Items.Strings[RadioGroup1.itemindex]+' like '+QuotedStr(Edit1.Text)+'% Order By №';
  ADOQuery1.SQL.Add(S);
  ADOQuery1.Open;
end;
Для чисел:
Код:
procedure TForm3.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var s : string;
  begin
    datasource1.DataSet:=ADOQuery1;
      if ADOQuery1.Active then ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  S:='Select * From Таблица1 Where поле =  '+QuotedStr(StrToInt(Edit1.Text))+ ' Order By №';
  ADOQuery1.SQL.Add(S);
  ADOQuery1.Open;
end;
Писал на память, мог что-то напутать.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 16.10.2010 в 19:46. Причина: подправил с учетом замечаний от Stilet
artemavd вне форума Ответить с цитированием
Старый 16.10.2010, 19:45   #6
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Да, сапасибо большое!)) Но есть вопрос в догонку! Ты говорил про проверку спомощью case! А могу ли я реализовать проверку спомощью if! Буду проверять значение RADIOGROUP! и в зависимость от результата выполнять определённый запрос! Или не получится??

artemavd Спасибо тебе!

Последний раз редактировалось artemavd; 16.10.2010 в 19:47.
Mr.Steroid вне форума Ответить с цитированием
Старый 16.10.2010, 19:48   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Проверяйте выбран радиогрупп или нет. Например так:
Код:
if Form1.Radiogroup1.Checked then
begin
 ///траляляля
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.10.2010, 19:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или не получится??
Получится. Чего же нет? просто с case красивее смотрится.

И кстати:
Цитата:
Order By №
Поаккуратнее с такими именами полей...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2010, 19:51   #9
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию

Нет, artemavd! Я имею ввиду проверка на то, что на РадиоГроуп выбрано текстовое или числовое поле!
Mr.Steroid вне форума Ответить с цитированием
Старый 16.10.2010, 19:54   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я имею ввиду проверка на то, что на РадиоГроуп выбрано текстовое или числовое поле!
Весь вопрос в том как ты описал что у тебя в каком поле. Я имел ввиду проверку RadioGroup1.itemindex
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запросы dymych Помощь студентам 9 21.06.2010 08:38
SQL-запросы SEMEon SQL, базы данных 21 05.01.2010 09:25
SQL запросы ArcaN0id Microsoft Office Access 6 13.12.2009 19:42
SQL запросы Best Programmist Microsoft Office Access 8 03.12.2009 16:42
sql запросы wolf950 БД в Delphi 2 28.11.2008 21:26