Форум: "Начинающим";
Текущий архив: 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+
" Продолжить поиск"), "�����", 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