Главная страница
    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.006 c
2-1194860002
TIF
2007-11-12 12:33
2007.12.30
SVISTAPLYASKA - разработка приложения для Vista в Delphi 7


2-1196961000
FoxM
2007-12-06 20:10
2007.12.30
Как скрыть статус соединения с Интернетом с TrayBar?


3-1188126422
Добрый
2007-08-26 15:07
2007.12.30
не могу сделать INSERT через ADO в MSSQL базу


15-1196147650
em240
2007-11-27 10:14
2007.12.30
MsSql2000+транзакции


15-1196343324
Slider007
2007-11-29 16:35
2007.12.30
С днем рождения ! 29 ноября 2007 четверг





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский