Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Поиск по БД через запросы


Автор: Vavik 16.9.2009, 19:56
Access+ADO.
Делаю поиск через запрос, дело вроде пустяковое, но у меня почему-то с этим проблемы.

Запрос
Код

SELECT * FROM Рефераты where Тема= 'Как стать президентом'

Работает нориально.
А такого вида.
Код

SELECT * FROM Рефераты where Тема= '+Form3.edit1.text+'

Выдаёт результат, но с пустыми ячейками.

В идеале нужно, чтобы не учитывался регистр и поиск выполнялся даже если задана часть слова или слово, а не точная фраза.
Что я делаю не так ?

Автор: Данкинг 16.9.2009, 20:04
Код

SELECT * FROM Рефераты where Тема="'+Form3.edit1.text+'"';
SELECT * FROM Рефераты where Тема like "%'+Form3.edit1.text+'%"';



Автор: Vavik 16.9.2009, 20:06
Цитата(Данкинг @ 16.9.2009,  20:04)
Код

SELECT * FROM Рефераты where Тема="'+Form3.edit1.text+'"';
SELECT * FROM Рефераты where Тема like "%'+Form3.edit1.text+'%"';

Говорит, что строка содержет синтаксическую ошибку.

Автор: Данкинг 16.9.2009, 20:38
Vavik, покажи полный код.

Автор: Vavik 16.9.2009, 20:41
Цитата(Данкинг @ 16.9.2009,  20:38)
Vavik, покажи полный код.

Код

procedure TForm3.Button1Click(Sender: TObject);
begin
Form1.FindQuery.Active:=False;
Form1.DBGrid1.DataSource:=Form1.DataSource1;
Form1.FindQuery.Active:=True;
end;

Запрос в квери.

Автор: Kison 16.9.2009, 20:51
Попробуй так


VAR 
  EDIT_TEXT :string;
BEGIN
  EDIT_TEXT:=Form3.edit1.text; 
  with Query_Name do
    begin
      Close;
      Sql.Clear;
      Sql.Text:='Select * From Рефераты where Тема = :EDIT_TEXT';
      ParamByName('EDIT_TEXT').AsString:=EDIT_TEXT;
      Open;
      res:=FieldByName('ID_TEAM').AsInteger;
    end;
END;


Автор: Vavik 16.9.2009, 21:24
Цитата(Kison @ 16.9.2009,  20:51)
Попробуй так


VAR 
  EDIT_TEXT :string;
BEGIN
  EDIT_TEXT:=Form3.edit1.text; 
  with Query_Name do
    begin
      Close;
      Sql.Clear;
      Sql.Text:='Select * From Рефераты where Тема = :EDIT_TEXT';
      ParamByName('EDIT_TEXT').AsString:=EDIT_TEXT;
      Open;
      res:=FieldByName('ID_TEAM').AsInteger;
    end;
END;

Чёт пипец нагорожено, не работает) Тут всё проще должно быть.

Вообщем конкретный запрос типа
Код

SELECT * FROM Рефераты where Группа like '%ист%'

работает ноормально

А если слово из эдита брать, то отказывается работать.

Автор: Данкинг 16.9.2009, 21:37
Вот у меня рабочий код:
Код

AdoQuery.SQL.Add('select all (info) from spisok where disk="'+edit1.Text+'" order by info');


Автор: Vavik 16.9.2009, 21:45
Цитата(Данкинг @ 16.9.2009,  21:37)
Вот у меня рабочий код:
Код

AdoQuery.SQL.Add('select all (info) from spisok where disk="'+edit1.Text+'" order by info');

Спасибо за помощь, но всё равно не работает, пустые ячейки выводит и всё :(

Автор: Данкинг 16.9.2009, 21:56
Цитата(Vavik @  16.9.2009,  22:45 Найти цитируемый пост)
пустые ячейки выводит и всё :( 

А такие данные точно существуют в таблице? smile Ну, попробуй trim(edit1.text).

Автор: Vavik 16.9.2009, 22:00
Цитата(Данкинг @ 16.9.2009,  21:56)
Цитата(Vavik @  16.9.2009,  22:45 Найти цитируемый пост)
пустые ячейки выводит и всё :( 

А такие данные точно существуют в таблице? smile Ну, попробуй trim(edit1.text).

Существуют) без эдита ведь работает. Trim не помог :(

Автор: Данкинг 16.9.2009, 22:11
Цитата(Vavik @  16.9.2009,  21:41 Найти цитируемый пост)
Запрос в квери. 

Пиши запрос в самом коде тогда.

Автор: Vavik 16.9.2009, 22:21
Цитата(Данкинг @ 16.9.2009,  22:11)
Цитата(Vavik @  16.9.2009,  21:41 Найти цитируемый пост)
Запрос в квери. 

Пиши запрос в самом коде тогда.

Ыыы, заработало)

Автор: Данкинг 16.9.2009, 22:28
Цитата(Vavik @  16.9.2009,  23:21 Найти цитируемый пост)
Ыыы, заработало) 

Мораль: не надо извращаться почём зря. smile  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)