Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизПоиск по БД при помощи ADODataSet1.Locate Найти похожие ветки
← →
Анархист © (2006-01-23 04:00) [0]Доброго времени суток, увожаемые мастера, я написал софтень, Телефонный справочник, БД которого находится на ЭсКуЭль серваке, поиск по базе работает, всё норм, но есть трабла...в справочнике встречаются одинаковые фамилии, сотрудников работающих в разных отделах, а поиск находит ТОЛЬКО ПЕРВОГО удовлетворяющего условию, так вот трабла и вопрос заключаются в том как остальных найти? Или сортировку сделать...Заранее благодарю
← →
sniknik © (2006-01-23 08:22) [1]найти следующего - поиск по выражению фильтра FindFirst, FindNext, ...
сделать сортировку - Sort, работает при открытии рекордсета в локальном курсоре
+ можно еще и отдел включить в условие локейта для более конкрентного поиска
← →
Vemer © (2006-01-23 08:36) [2]LocateNext?
← →
sniknik © (2006-01-23 08:47) [3]> LocateNext?
а вот этого в ADO компонентах нет. (это чтото с IB связано, вроде бы)
← →
msguns © (2006-01-23 09:15) [4]
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;
← →
Анархист © (2006-01-23 10:12) [5]soNext,soLast Дельфя говорит, что таких идентификаторов нет, т.е. она их не знает и TSearchOption тоже... :)
← →
msguns © (2006-01-23 11:22) [6]type
...
TSearchOption = (soFirst,soLast,soNext,soPrior);
...
;)
← →
Анархист © (2006-01-24 03:46) [7]msguns
Не работает, писанины дохрена, толку 0, у меня поиск идёт из другой формы при помощи процедуры Form1.ADODataSet1.Locate("Фамилия",Edit1.Text,[]); т.е. фамилия вводится в Едит т.ч. твоя функция тут не работает...тут надо наверно SQL запросом воспользоваться, но я в SQL толком не шарю...ща в скриптах пороюсь, можт что найду... :)
← →
Анархист © (2006-01-24 05:05) [8]" select Column_Name from DB_Name where like "%text%" " Подскажите пожалуйста, как мне этот запрос описать, если вместо параметра text должно быть слово из компонента Edit1.Text?
← →
ASoft (2006-01-24 08:15) [9]Серьезные люди серьезно ответили в [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-02-06 08:38) [10]Мне надо, чтобы находились все фамилии соответствующие запросу т.е. если в базе 3 фамилии Сердюков к примеру да? То все три и должен выдть,но не ИМЕННО САМИ фамилии, а выделить строки с данными по этому человеку, в принципе у меня сейчас программа так и работает, только находит первое совпадение, а надо, чтоб либо все сразу показывала, либо так сказать "степ бай степ" по нажатию кнопки, нажал -->нашла, нажал-->перешла,снова перешла тип того :)
← →
ZeroDivide © (2006-02-06 09:27) [11]Тебе уже ответили и как сделать отбор:
"select Column_Name from DB_Name where Column_Name like %"""+Edit1.text+"""%";
и как сделать поиск. [4]
← →
ZeroDivide © (2006-02-06 09:28) [12]"select Column_Name from DB_Name where Column_Name like ""%"+Edit1.text+"%""";
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c