Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизAdoQuery.seek Найти похожие ветки
← →
surkis (2005-07-29 11:04) [0]Ребята подскажите почему может не работать AdoQuery.seek? Ошибка: "Текущий проводник не поддерживает необходимый интерфейс для функции Index". Заранее благодарен!
← →
Плохиш © (2005-07-29 11:12) [1]Потому что Текущий проводник не поддерживает необходимый интерфейс для функции Index
← →
surkis (2005-07-29 11:19) [2]а как можно сделать поиск?
← →
sniknik © (2005-07-29 11:22) [3]только один провайдер(jet) насколько мне известно поддерживает режим для seek.
> а как можно сделать поиск?
locate
← →
surkis (2005-07-29 11:26) [4]
> locate
большое спасибо!!!
← →
surkis (2005-07-29 11:30) [5]а если несколько одинаковых значений в поле locate переходит на первую, а как найти следующую?
← →
Anatoly Podgoretsky © (2005-07-29 11:44) [6]surkis (29.07.05 11:30) [5]
Поиск и перемещения это разные действия, хочешь перемещаться используй .Next, хочешь найти используй .Locate
← →
ANB © (2005-07-29 11:47) [7]
> surkis (29.07.05 11:30) [5]
- для таких случаев есть предложение WHERE в SQL.
← →
surkis (2005-07-29 11:48) [8]
> Поиск и перемещения это разные действия, хочешь перемещаться
> используй .Next, хочешь найти используй .Locate
Нет я хочу находить и (переходить на них) поочёрёдно все записи с определённым значением
← →
surkis (2005-07-29 11:50) [9]
> - для таких случаев есть предложение WHERE в SQL.
мне нужно чтобы в гриде отображались все записи а на нужные переходить
← →
ЮЮ © (2005-07-29 11:59) [10]>мне нужно чтобы в гриде отображались все записи а на нужные переходить
значит остальные ненужные. А если они такие нужные, пусть пользователь и листает многотысячный грид сам, выискивая из очень нужных самые нужные заиси
← →
sniknik © (2005-07-29 13:08) [11]> Нет я хочу находить и (переходить на них) поочёрёдно все записи с определённым значением
поиск по индексному выражению FindFirst, FindNext, ...
← →
Anatoly Podgoretsky © (2005-07-29 13:27) [12]surkis (29.07.05 11:48) [8]
Делаем последнюю попытку, Locate - найти, Next - перейти на следующую. Попробуй объединить.
← →
surkis (2005-07-29 14:22) [13]
> Делаем последнюю попытку, Locate - найти, Next - перейти
> на следующую. Попробуй объединить.
не знаю может я тупой и не могу понять что вы мне пытаетесь сказать но Next не помагает, потому что Locate всёравно начинает с первой записи поиск
← →
Reindeer Moss Eater © (2005-07-29 14:26) [14]Loicate ищет.
Найдя позиционируется на найденное.
Искать он начинает с текущей позиции.
Итого:
Найдя первый раз, и ища второй раз, он находит уже найденное и никуда не перемещается.
← →
Anatoly Podgoretsky © (2005-07-29 14:27) [15]Reindeer Moss Eater © (29.07.05 14:26) [14]
Не просто позиционирует, а позиционирует на самую первую запись в наборе данных! Это существенный факт.
← →
surkis (2005-07-29 14:42) [16]
> Loicate ищет.
> Найдя позиционируется на найденное.
> Искать он начинает с текущей позиции.
> Итого:
> Найдя первый раз, и ища второй раз, он находит уже найденное
> и никуда не перемещается.
При переходе на следующую запись Locate всёравно переходит на первую найденую с начала
← →
surkis (2005-07-29 14:43) [17]короче он ищет не с текущей а с первой!
← →
Anatoly Podgoretsky © (2005-07-29 14:45) [18]Он просто ищет и больше ничего
← →
surkis (2005-07-29 14:48) [19]
> Он просто ищет и больше ничего
Да но он начинает поиск всегда с первой записи потому до второй дело не доходит. В любом случае всем спасибо, я уже придумал как это сделать!
← →
Anatoly Podgoretsky © (2005-07-29 15:15) [20]Поиск должен быть повторяемым, иначе что это за поиск.
Придумывать ничего не надо тебе уже все сказали.
← →
msguns © (2005-07-29 15:48) [21]
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;
← →
surkis (2005-07-29 16:04) [22]
> msguns © (29.07.05 15:48) [21]
Большое спасибо за пример, теперь понятнее
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c