![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по БД при помощи ADODataSet1.Locate [D2k5]
Анархист © (2006-01-23 04:00:00)Доброго времени суток, увожаемые мастера, я написал софтень, Телефонный справочник, БД которого находится на ЭсКуЭль серваке, поиск по базе работает, всё норм, но есть трабла...в справочнике встречаются одинаковые фамилии, сотрудников работающих в разных отделах, а поиск находит ТОЛЬКО ПЕРВОГО удовлетворяющего условию, так вот трабла и вопрос заключаются в том как остальных найти? Или сортировку сделать...Заранее благодарю
ZeroDivide (2006-02-06 09:28:00) [1]'select Column_Name from DB_Name where Column_Name like ''%'+Edit1.text+'%''';
ZeroDivide (2006-02-06 09:27:00) [2]Тебе уже ответили и как сделать отбор:
'select Column_Name from DB_Name where Column_Name like %'''+Edit1.text+'''%';
и как сделать поиск. [4]
Анархист (2006-02-06 08:38:00) [3]Мне надо, чтобы находились все фамилии соответствующие запросу т.е. если в базе 3 фамилии Сердюков к примеру да? То все три и должен выдть,но не ИМЕННО САМИ фамилии, а выделить строки с данными по этому человеку, в принципе у меня сейчас программа так и работает, только находит первое совпадение, а надо, чтоб либо все сразу показывала, либо так сказать "степ бай степ" по нажатию кнопки, нажал -->нашла, нажал-->перешла,снова перешла тип того :)
ASoft (2006-01-24 08:15:00) [4]Серьезные люди серьезно ответили в [4], но чем-то вас не устроил этот код -
пошли по пути наименьшего сопротивления, а каменюки на каждом шагу..
К примеру, приведенный кусок select Column_Name from DB_Name where like '%text%'вряд ли будет работать, поскольку where ?like...
Подставить Edit1.text: 'select Column_Name from DB_Name where [..?..] like %'+Edit1.text+'%'.
Но что в итоге вы получите? Все найденные фамилии, содержащие буквы параметра, а это вам надо? :)
Анархист (2006-01-24 05:05:00) [5]" select Column_Name from DB_Name where like '%text%' " Подскажите пожалуйста, как мне этот запрос описать, если вместо параметра text должно быть слово из компонента Edit1.Text?
Анархист (2006-01-24 03:46:00) [6]msguns
Не работает, писанины дохрена, толку 0, у меня поиск идёт из другой формы при помощи процедуры Form1.ADODataSet1.Locate('Фамилия',Edit1.Text,[]); т.е. фамилия вводится в Едит т.ч. твоя функция тут не работает...тут надо наверно SQL запросом воспользоваться, но я в SQL толком не шарю...ща в скриптах пороюсь, можт что найду... :)
msguns (2006-01-23 11:22:00) [7]type
...
TSearchOption = (soFirst,soLast,soNext,soPrior);
...
;)
Анархист (2006-01-23 10:12:00) [8]soNext,soLast Дельфя говорит, что таких идентификаторов нет, т.е. она их не знает и TSearchOption тоже... :)
msguns (2006-01-23 09:15:00) [9]
function DBServ_SearchRecordByField(Grid: TDBGrid; Option: TSearchOption; RaiseErr: boolean): boolean;
// Функция ищет запись в открытом НД, отображаемом в гриде по значению текущего поля
// (колонки грида) в напрвлении, указанном Option
var
bm: TBookMark;
val: variant;
DS: TDataSet;
begin
result := false;
if not Grid.Focused then exit;
DS := Grid.DataSource.DataSet;
if (DS=nil) or not DS.Active or (DS.RecordCount<2) then exit;
Screen.Cursor := crHourGlass;
DS.DisableControls;
DS.Tag := 1;
bm := DS.GetBookmark;
val := Grid.SelectedField.Value;
if Option=soFirst then
begin
if DS.Locate(Grid.SelectedField.FieldName,Grid.SelectedField.Value,[]) then
begin bm := DS.GetBookmark; result := true; end;
end
else
if Option in [soNext,soLast] then
begin
DS.Next;
while not DS.Eof do
begin
if Grid.SelectedField.Value=val then
begin
result := true;
bm := DS.GetBookmark; // Запомнить последнюю найденную
if Option=soNext then break;
end;
DS.Next;
end;
end
else
begin
DS.Prior;
while not DS.Bof do
begin
if Grid.SelectedField.Value=val then
begin
result := true;
bm := DS.GetBookmark; // Запомнить первую найденную
break;
end;
DS.Prior;
end;
end;
DS.Tag := 0; DS.EnableControls; DS.GotoBookmark(bm); DS.FreeBookmark(bm);
Screen.Cursor := crDefault;
if not result and RaiseErr then ShowMessage('Образец не найден');
end;
sniknik (2006-01-23 08:47:00) [10]> LocateNext?
а вот этого в ADO компонентах нет. (это чтото с IB связано, вроде бы)
Vemer (2006-01-23 08:36:00) [11]LocateNext?
sniknik (2006-01-23 08:22:00) [12]найти следующего - поиск по выражению фильтра FindFirst, FindNext, ...
сделать сортировку - Sort, работает при открытии рекордсета в локальном курсоре
+ можно еще и отдел включить в условие локейта для более конкрентного поиска