Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Вниз

Поиск в базе данных (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
15-1196341034
Layner
2007-11-29 15:57
2007.12.30
Как по автозагрузке Win(XP) вывести Диспетчер задач Windows


2-1196509776
Виктор007
2007-12-01 14:49
2007.12.30
Можно ли заставить дельфи создавать pdb файлы?


4-1181733847
Валькирия
2007-06-13 15:24
2007.12.30
winrar


2-1196684220
GitaROMAN
2007-12-03 15:17
2007.12.30
Delphy с самого самого начала. Как разобраться Чо мутить...


15-1196160683
All More system
2007-11-27 13:51
2007.12.30
Логика работы проверок подлинности Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский