Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AdoQuery.seek [D6, MSSQL]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо