Цитата:
Сообщение от mad-d
Здравствуйте уважаемые софорумцы.
Сижу не один час и не могу понять: в чём проблема моей программы.
Мне поставлена задача создать БД без БД, т.е. использовать файл записи. Непосредственно перейдём к самой программе.
Запись в файл записи проходит нормально. Проверял. Но при выводе информации в StringGrid начинается просто хардкор:
Нужно прописать процедуру, чтобы выводились определённые записи с определёнными характеристиками. Процедура есть, но её работа не является корректной.
|
Процедура поиска действительно хардкорная
Так фильтры не пишут (пытаясь перебрать все возможные варианты).
Проверяй, вот так вроде правильно работает:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
{Выполнение поиска по ф. записи при определённых условиях/предпочтениям}
var
i, n1, n2: Integer;
begin
for i := 1 to StringGrid1.RowCount do
begin
StringGrid1.Rows[i].Clear;
end;
StringGrid1.RowCount := 2;
AssignFile(F, 'CARS.txt');
Reset(F);
try
n1:=0;
n2:=0;
while not Eof(F) do
begin
Read(F, Cars);
Inc(n1);
if ( (ComboBox1.Text = 'Все марки') or (ComboBox1.Text = Cars.mark) ) and // Проверяем марку
( (RadioGroup1.ItemIndex = 2 {Все авто}) or (RadioGroup1.ItemIndex = Cars.sost) ) and // Проверяем состояние авто
( (ComboBox2.Text = 'Любой') or (ComboBox2.Text = Cars.privod) ) and // Проверяем привод
( (ComboBox3.Text = 'Все') or (ComboBox3.Text = Cars.kp) ) and // Проверяем тип коробки передач
( StrToInt(Cars.prob) >= StrToInt(Edit3.Text) ) and // Проверяем диапазон побега
( StrToInt(Cars.prob) <= StrToInt(Edit4.Text) ) and
( StrToInt(Cars.price) >= StrToInt(Edit1.Text) ) and // Проверяем диапазон цен
( StrToInt(Cars.price) <= StrToInt(Edit2.Text) ) then
begin
OUTINFO(Cars, StringGrid1); // Если все проверки прошли только тогда отображаем эту запись
Inc(n2);
end;
end;
ShowMessageFmt('Отобрано %d из %d', [n2, n1]);
finally
CloseFile(F);
end;
end;
p.s. Ещё непонятно почему в записи пробег и цена в виде строк, а не чисел. Ну и компоненты желательно переименовать по смыслу.