![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем привет друзья, такой вопрос. Как организовать поиск по Бд access с типом поля "Memo"?
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From sinema where' +Edit1.Text);
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
end; |
|
#2
|
|||
|
|||
|
необязательно перезапрашивать каждый раз при смене поиска =)
есть свойство Filter ADOQuery1.Filter:='name LIKE '+QuotedStr('%'+Trim(Memo1.Text)+'%'); насчёт Мемо? какая конкретно проблема? мой пример,данные беруться из Memo (точно также как из Edit'a ) |
|
#3
|
||||
|
||||
|
В вопросе с Memo имеется ввиду что тип данных поля "Memo" . Стоит база на access, в которой поле которому мне надо сделать поиск имеет тип "Мемо".
|
|
#4
|
||||
|
||||
|
Код:
If not DBGrid1.DataSource.DataSet.Locate('Информация о прототипе', Edit1.Text, [])
then ShowMessage('Что то не нахожу'); |
|
#5
|
||||
|
||||
|
Немного порывшись в сети нашел инфу что в поле типа "Memo" не работает Locate.
Код:
ADOquery1.SQL.Text:=('SELECT * from Патент where Информация о прототипе like "%"edit1.text"%"');
ADOquery1.Open; |
|
#6
|
||||
|
||||
|
Вопрос с Поиском решен
Код:
ADOquery1.SQL.Text:=('SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"'); |
|
#7
|
|||
|
|||
|
ну так как Locate не работает с мемо то можно поизвращаться,например, добавить второй adoquery и в нём делать запрос where like..., и посмотреть, если данный запрос возвращает значение,то взять первый id из отфильтрованного списка, и потом через locate подставить этот id в первый dataSet
DBGrid1.DataSource.DataSet.Locate('id', наш_полученный_ид, []) |
|
#8
|
||||
|
||||
|
Цитата:
Спасибо! Вопрос с поиском решил таким образом: Код:
ADOquery1.SQL.Text:=('SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"');Но проблема в том что после того как выполняется запрос, БД фильтруется и остается только запись с "Искомым", как сделать так что бы БД не фильтровалась, а просто выделялась запись с "Искомым"? |
|
#9
|
|||
|
|||
|
Цитата:
я же написал как сделай. 1) Добавь на форму второй AdoQuery2 2) Дальше твой код будет примерно таким, Код:
var tmp_id:Integer;
ADOquery2.SQL.Text:='SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"';
Adoquery2.Open;
Adoquery2.RecordSet.MoveFirst;
if (not Adoquery2.BOF)or(not Adoquery2.EOF)
then
begin
tmp_id:=Integer(AdoQuery2,Recordset.Fields[0].Value); //Здесь подразумевается что у тебя в первой колонке таблицы Патент стоит уникальный код.
DBGrid1.DataSource.DataSet.Locate('ИД', tmp_id, []);
end
else ShowMessage('Что то не нахожу');
Adoquery2.Close;Последний раз редактировалось Snake22, 17.02.2013 в 17:05. |
|
#10
|
||||
|
||||
|
Аааа блин, спасибо! Не догнал с первого раза!=))) щас посмотрю
|
|
#11
|
||||
|
||||
|
Все компилируется и работает нормально, но проблема таки осталась, БД все равно фильтруется
Последний раз редактировалось borockov, 17.02.2013 в 17:14. |
|
#12
|
||||
|
||||
|
Код:
procedure TForm2.Button2Click(Sender: TObject);
var
tmp_id:Integer;
begin
ADOquery1.SQL.Text:=('SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"');
ADOquery1.Open;
ADOquery2.SQL.Text:='SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"';
Adoquery2.Open;
Adoquery2.RecordSet.MoveFirst;
if (not Adoquery2.BOF)or(not Adoquery2.EOF)
then
begin
tmp_id:=Integer(AdoQuery2.Recordset.Fields[0].Value); //Здесь подразумевается что у тебя в первой колонке таблицы Патент стоит уникальный код.
DBGrid1.DataSource.DataSet.Locate('id', tmp_id, []);
end
else ShowMessage('Что то не нахожу');
Adoquery2.Close;
end; |
|
#13
|
|||
|
|||
|
Цитата:
проверяй внимательно что и куда у тебя присоеденино,и проверь,куда условие фильтрации прописал,может в первый адоквери Добавдлено: а нафига ты эти строчки делаешь? они не нужны Код:
ADOquery1.SQL.Text:=('SELECT * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"');
ADOquery1.Open; |
|
#14
|
|||
|
|||
|
<дубль сообщения>
|
|
#15
|
||||
|
||||
|
Огромное тебе спасибо!
|