Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
10-1118407206
john_mag
2005-06-10 16:40
2006.05.07
OLE error


2-1145351219
ttt_111
2006-04-18 13:06
2006.05.07
Помогите с SQL запросом.


15-1145135589
Shastox
2006-04-16 01:13
2006.05.07
Старая загадка на новый лад


11-1125985318
DmiSb
2005-09-06 09:41
2006.05.07
Применение KOLxBase ?


2-1144911447
Sw
2006-04-13 10:57
2006.05.07
Подтверждение удаления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский