Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Найти следующую запись?   Найти похожие ветки 

 
Shlomo ©   (2006-03-13 15:09) [0]

Здравствуйте!
Я уже пробовал искать здесь, что-нибудь на эту тему, но так и не смог найти. Допустим с помощью ADOQuery1 (подключаясь к SQLServer-у) я ищу в таблице в одном поле название города, города могут повторяться, с помощью метода Locate я нахожу первый город, но сразу за ним мне нужно найти в таблице и следующий такой же город. Как мне это сделать? То есть, мне нужен своеобразный Search Again, Find Next Record.

Помогите, пожалуйста.


 
Reindeer Moss Eater ©   (2006-03-13 15:13) [1]

while AdoQuery1.Locate(...) and (not AdoQuery1.Eof) do AdoQuery1.Next;


 
Vlad ©   (2006-03-13 15:36) [2]


> Reindeer Moss Eater ©   (13.03.06 15:13) [1]


вечный цикл? :-)


 
Ega23 ©   (2006-03-13 16:45) [3]


> while AdoQuery1.Locate(...) and (not AdoQuery1.Eof) do AdoQuery1.
> Next;


Не поможет. Locate не от текущей позиции курсора ищет, а от начала.
По сабжу: или более точные условия для Locate указывай, по двум полям, к примеру, или вообще откажись от Locate, используй Next и сравнение.


 
msguns ©   (2006-03-13 17:11) [4]

type
 TSearchOption = (soFirst,soLast,soNext,soPrior);
 ...  

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;


Это код столько раз сюда кидал, что он уже весь в дырках ;)


 
ANB ©   (2006-03-14 02:19) [5]


> Shlomo ©   (13.03.06 15:09)

Глупейший вопрос - зачем пересылать на клиента все записи, чтобы потом искать по набору данных локэйтом ? Не проще сразу выбрать только нужные записи запросом ?


 
Shlomo ©   (2006-03-14 06:44) [6]

msguns,

Большое Спасибо! :)

То, что надо!



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.011 c
15-1144781049
palva
2006-04-11 22:44
2006.05.07
Цифровая крепость Дэна Брауна


3-1142008529
Kerk
2006-03-10 19:35
2006.05.07
Динамическое создание колонок в TdxDBGrid


3-1142414053
Alex_Delphi
2006-03-15 12:14
2006.05.07
Как импортировать DBF таблицу в базу Oracle 8


15-1144735106
ANB
2006-04-11 09:58
2006.05.07
Где взять HalcyonDataSet ?


4-1139825037
Dimedrol
2006-02-13 13:03
2006.05.07
Delphi и Infra-red... как ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский