Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в базе данных (MS Access) [D6, MSSQL]


BD ©   (2007-12-03 21:26:00) 

Как организовать поиск а Access по ключевым словам по всему файлу (как в MS Word), т. е. по очереди (находит первое похожее слово, потом второе и т.д.). Пробовали писать через закладки - не читает закладку.


sniknik   (2007-12-07 01:06:00) [1]

> но проблему решила
не соответствует начальному условию ([0]), вместо поиска по базе, и ключевым словам сделан банальный перебор в 1 таблице по одному полю...
что называется "замах на рубль, удар на копейку".


BD   (2007-12-07 00:43:00) [2]

Да, описалась. ADOQuery1.SQL.Add('SELECT * FROM nu WHERE kommen Like  '+#39+'%'+komm+'%'+#39);
но проблему решила

procedure SeqSearch(Query1: TQuery; AField, AValue: String);//описание процедуры поиска

var
  NoRec: integer;

implementation

procedure TForm.ButtonClick(Sender: TObject); //поиск
begin
komm:=Edit1.Text;
SeqSearch(Query1, 'kommen', komm);
end;

procedure SeqSearch(Query1: TQuery; AField, AValue: String);
var
 i: integer;
begin
Query1.DataSource:=DataSource1;   //DataSource1 - ADOQuery1
 with ADOQuery1 do
 begin
   First;
   for i := 0 to RecordCount - 1 do  
   begin                                      
     if (not Eof) and (Pos(AnsiLowerCase(AValue),
       AnsiLowerCase(FieldByName(AField).AsString)) 0) then  
     begin
       if MessageBox(HWND_DESKTOP, PChar('Найдено выражение!' + #10#13+
        '   Продолжить поиск'), '�����', MB_YESNO +
         MB_ICONINFORMATION + MB_DEFBUTTON1) = IDYES then
       begin
         NoRec := RecNo;  
         Next;
       end
       else
         Break;
     end
     else
       Next;
   end;
 end;
end;


Andrey   (2007-12-06 09:31:00) [3]

Не ADOQuery1.SQL.Add('SELECT * FROM nu WHERE kommen LIKE '+#39+'%'+#39);
а ADOQuery1.SQL.Add('SELECT * FROM nu WHERE kommen LIKE '+#39+'%'+Edit1.Text+'%'+#39);
И дальше датасорцу прицепить к этому кверю.
Читать внимально про выражение like. В частнисти про использование в нем %.


BD   (2007-12-05 23:36:00) [4]

В общем код такой:

Procedure Form.ButtonClick(Sender: TObject); // поиск
komm:=Edit1.Text;                                //находит первую строку и останавливается  
if not ADOQuery1.Locate('kommen', komm,[loCaseInsensitive, loPartialKey]) then  
begin
 Application.MessageBox('Ошибка набора базы данных!', MB_ICONERROR);
Exit;
end;

end;

Поиск Locate находит только первую запись, дальше по таблице поиск не идет.
А через ADOQuery.Parameters.Param... надо вводить целое ключевое слово, а нужно распознавать строчку например по двум буквам, т.е. находить эти две буквы по всей таблице последовательно, одно за другим, при нажатии на клавишу.

И я честно говоря не поняла куда ставить
ADOQuery.Parameters.ParamByName('word1').Value := '%' + <первое слово для поиска> +
'%';
Если нетрудно поподробней.

если серверно поиск организовать, то появляется список слов  в которых есть эти буквы (nu-таблица, kommen-поле)

DBGrid.SelectedRows.Clear;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM nu WHERE kommen LIKE '+#39+'%'+#39);
ADOQuery1.Open;
DBGrid.Refresh;

пыталась с Bookmark - Locate,  закладку читает, но функция  Locate, я поняла, что "самостоятельная", с закладкой не работает (хотя может закладку неправильно написала ;) )

пыталась через функцию, но требуется полное слово и правильное
Procedure Form.ButtonClick(Sender: TObject); // поиск
begin
komm:=Edit1.Text;  
SeqSearh(Query1, 'kommen', komm);
end;
function SeqSearh(Query1: TQuery; Field,Value: String):Boolean;
begin
komm:=Edit1.Text;  
Query1.DataSource:=DataSource1;
with ADOQuery1 do
begin
while (not EOF) and (not(FieldByName(Field).AsString=Value)) do
Next;
SegSearh:=not EOF;
end;
end;

Query1-выполняет поиск, при подключении к DataSource1-связаное с ADOQuery1
Field-величина по кот. ведется поиск


Anatoly Podgoretsky   (2007-12-04 08:53:00) [5]

Можно и с AND, только не знаю какие ограничения в Акцесс на длину запроса.
Утром запустишь, к вечеру результат будет.


Anatoly Podgoretsky   (2007-12-04 08:51:00) [6]

Получитить список таблиц, в них получить список полей, поиск сделать по каждому текстовому полю, повторять до конца. Поскольку поиск не точный, то как в ЮЮ ©   (04.12.07 03:01) [1] , кроме AND


ЮЮ   (2007-12-04 03:01:00) [7]

> по ключевым словам по всему файлу

Может все-таки по вcей таблице?
WHERE (StringField like :word1) AND (StringField like :word2) AND ...

ADOQuery.Parameters.ParamByName('word1').Value := '%' + <первое слово для поиска> + '%';
...


Наверх

Титульная страница Поиск, карта сайта Написать письмо