|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Поиск по БД access тип поля "Memo"
Всем привет друзья, такой вопрос. Как организовать поиск по Бд 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
|
||||
|
||||
=)
Огромное тебе спасибо!
|