Форум: "Базы";
Текущий архив: 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