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