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

Вниз

Последовательный переход к записи   Найти похожие ветки 

 
DDDeN   (2005-06-30 11:41) [0]

У меня простая база на основе драйвера STANDARD. Там одна табличка - Cars.db. В табличке 6 полей. Необходимо организовать поиск по базе (не фильтр!) по критерию и полю указанному пользователем. Н-р, при нажатии на кнопку ищется первая запись, при нажатии еще раз (можно и на другую, типа "Далее") ищется следующая запись, удовлетворяющая критерию, опять же, указанного пользователем. Я пробовал методом Locate(...), но он находит первую запись от начала набора данных, а дальше не могу его "пнуть"...
Заранее спасибо!


 
Johnmen ©   (2005-06-30 11:43) [1]

А ты руками пройди по набору данных, применяя свой критерий к каждой записи...:)


 
DDDeN   (2005-06-30 11:46) [2]

Я пробовал так проходить, а он проскакивает все записа

while not Table1.Eof do begin
if Locate(Edit1.Text, Edit2.Text, [liCaseInsensitive, loParityKey) then Exit;
end;


 
Johnmen ©   (2005-06-30 11:52) [3]

Ну да, ты же не руками критерий применяешь, а Локейтом :)


 
DDDeN   (2005-06-30 11:58) [4]

а как проверить критерий и если он совпадает с пользовательским остановится на записи этой?


 
Digitman ©   (2005-06-30 11:59) [5]


> DDDeN   (30.06.05 11:46) [2]


var bkmrk: TBookmark;
..

Found := False;
bkmrk := Table1.GetBookmark;
try  
 while not Table1.Eof do
   begin
     if проверка_на_соответствие_записи_заданному_критерию then
       begin
         Found := True;
         break;
       end;
     Table1.Next;
   end;
finally
 if not Found then
   Table1.GotoBookmark(bkmrk);
end;


 
Johnmen ©   (2005-06-30 12:03) [6]


> Digitman ©   (30.06.05 11:59) [5]


так поинтересней :)
while (not Table1.Eof) and (not Found) do


 
Digitman ©   (2005-06-30 12:06) [7]


> Johnmen ©   (30.06.05 12:03) [6]


не спорю)


 
Sergey13 ©   (2005-06-30 12:09) [8]

Если это для кнопки "Далее", то Table1.Next надо перед IF наверное ставить. Иначе с текущей записи не сойдет.


 
DDDeN   (2005-06-30 12:53) [9]

а как к полю обратится?

Table1.Field.AsString("FIO"); ?


 
Sergey13 ©   (2005-06-30 12:54) [10]

FieldByName


 
DDDeN   (2005-06-30 13:48) [11]

if Table1.FiledByName("FIO") = "Иванов" then break;


 
Digitman ©   (2005-06-30 13:53) [12]

if Table1.FiledByName("FIO").Value = "Иванов" then break;


 
Johnmen ©   (2005-06-30 14:25) [13]

>Digitman ©   (30.06.05 13:53) [12]

Что-то ты, Серёга, сегодня не в духе :)
Так писать не надо, а то можно поймать ексепшн.


 
Digitman ©   (2005-06-30 14:30) [14]


> Johnmen ©   (30.06.05 14:25) [13]


а ты, Женя, сегодня тоже что-то не в тот огород камни бросаешь) ..

нет бы вразумить автора, что объектное св-во не м.б. несравнимо с текстовым значением)) .. вроде бы Value у TField не по дифолту)

а насчет ловли ексепшна - эт уже отдельная басня)


 
Digitman ©   (2005-06-30 14:32) [15]


> не м.б. несравнимо


эт я удачно загнул))

следует читать как "не м.б. сравнимо"


 
msguns ©   (2005-06-30 14:33) [16]

function TdmFonds.DB_SearchRecordInField(Grid: TDBGrid; SO: TSearchOption; RaiseErr: boolean = false): boolean;
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;
 DS.DisableControls;
 DS.Tag := 1;
 bm := DS.GetBookmark;
 val := Grid.SelectedField.Value;
 if SO=soFirst then
   begin
    if DS.Locate(Grid.SelectedField.FieldName,Grid.SelectedField.Value,[]) then
      begin
       bm := DS.GetBookmark;
       result := true;
      end;
   end
 else
   if SO 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 SO=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);
 if not result and RaiseErr then ShowMessage("Образец не найден");
end;


 
Johnmen ©   (2005-06-30 14:36) [17]

>Digitman ©   (30.06.05 14:30) [14]

Да я так, слегка :) Интересно же пообщаться со знающими людьми.
А автор твоих умных слов не поймёт, ИМХО. Ибо основ ещё не освоил. Поэтому же и вразумлять - неэффективно...


 
Digitman ©   (2005-06-30 14:39) [18]


> Johnmen ©   (30.06.05 14:36) [17]


> Да я так, слегка


ничего себе "слегка" !)... еле увернуться успел)))


> Интересно же пообщаться со знающими людьми


"А я еще на гармошке играть умею ! ... И вышивать крестиком !" (с) ..))


> вразумлять - неэффективно


но .. надо, Жень,надо) ..



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

Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.1 c
8-1112786904
murk2
2005-04-06 15:28
2005.08.07
Как сделать коррекцию гаммы в TBitmap?


1-1121345438
dRake
2005-07-14 16:50
2005.08.07
Проблема с классами...


1-1119562614
Зипп
2005-06-24 01:36
2005.08.07
Насколько эффективно использование Зип-архивов для сокрытия


3-1119957012
Валерий
2005-06-28 15:10
2005.08.07
Почему Table is read only


1-1121531102
Defunct
2005-07-16 20:25
2005.08.07
AV при создании формы-фрейма





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