Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Поиск в базе данных (MS Access)   Найти похожие ветки 

 
BD   (2007-12-03 21:26) [0]

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


 
ЮЮ ©   (2007-12-04 03:01) [1]

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

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

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


 
Anatoly Podgoretsky ©   (2007-12-04 08:51) [2]

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


 
Anatoly Podgoretsky ©   (2007-12-04 08:53) [3]

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


 
BD   (2007-12-05 23:36) [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-величина по кот. ведется поиск


 
Andrey ©   (2007-12-06 09:31) [5]

Не 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-07 00:43) [6]

Да, описалась. 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+
        "   Продолжить поиск"), "&#65533;&#65533;&#65533;&#65533;&#65533;", MB_YESNO +
         MB_ICONINFORMATION + MB_DEFBUTTON1) = IDYES then
       begin
         NoRec := RecNo;  
         Next;
       end
       else
         Break;
     end
     else
       Next;
   end;
 end;
end;


 
sniknik ©   (2007-12-07 01:06) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1195413174
Mul
2007-11-18 22:12
2007.12.30
Полезные журналы по программированию


2-1196795078
olegusis
2007-12-04 22:04
2007.12.30
функция Random


6-1176750778
dRake
2007-04-16 23:12
2007.12.30
Нужна документация по сокетам (+)


9-1163886978
Vga
2006-11-19 00:56
2007.12.30
Паки в играх


15-1196155571
limp
2007-11-27 12:26
2007.12.30
Стоимость разработки службы знакомств