Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2013, 19:22
mad-d mad-d вне форума
Прохожий
 
Регистрация: 14.12.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Файл записи, StringGrid, Поиск

Здравствуйте уважаемые софорумцы.
Сижу не один час и не могу понять: в чём проблема моей программы.
Мне поставлена задача создать БД без БД, т.е. использовать файл записи. Непосредственно перейдём к самой программе.
Запись в файл записи проходит нормально. Проверял. Но при выводе информации в StringGrid начинается просто хардкор:
Нужно прописать процедуру, чтобы выводились определённые записи с определёнными характеристиками. Процедура есть, но её работа не является корректной.
Пожалуйста, Помогите !!!
----------------------------
Спасибо большое за помощь

Последний раз редактировалось mad-d, 15.12.2013 в 13:25.
Ответить с цитированием
  #2  
Старый 14.12.2013, 20:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Описание типа записи (record), код процедур записи в файл и чтения, а так же заполнения строки, в студию. Только эти куски кода. Разбираться в проекте лень.
Ответить с цитированием
  #3  
Старый 14.12.2013, 22:42
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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. Ещё непонятно почему в записи пробег и цена в виде строк, а не чисел. Ну и компоненты желательно переименовать по смыслу.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
mad-d (16.12.2013)
  #4  
Старый 15.12.2013, 13:10
mad-d mad-d вне форума
Прохожий
 
Регистрация: 14.12.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
Радость

Спасибо большое. Скорее всего у меня не получалось организовать процедуру поиска в результате нерациональности моих записей.
Еще раз, БОЛЬШОЕ СПАСИБО ! Выручили =)
P.S. А можно ли как-нибудь реализовать процедуру редактирования и удаления отдельных записей в файле. Если есть мысли, то поделитесь =) Буду нереально рад

Последний раз редактировалось mad-d, 16.12.2013 в 16:55.
Ответить с цитированием
  #5  
Старый 15.12.2013, 23:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от mad-d
P.S. А можно ли как-нибудь реализвать процедуру редактирования и удаления отдельных записей в файле. Если есть мысли, то поделитесь =) Буду нереально рад
http://tempfile.ru/file/3031352
12345123
Редактирование записи: перемещаемся с помощью Seek к записи которую нужно отредактировать, читаем её с помощью Read в переменную-запись (Cars: TCar), выводим данные на форму и даём пользователю возможность изменять. Когда пользователь нажимает "Сохранить" считываем данные с формы в переменную-запись (Cars: TCar), опять перемещаемся к этой же записи с помощью Seek и записываем назад данные с помощью Write.

Удаление записи: если нужно удалить последнюю запись, то всё просто - перемещаемся к ней с помощью Seek и обрезаем файл с помощью Truncate.
Если же нужно удалить не последнюю запись, то чуть сложнее: перемещаемся к последней записи с помощью Seek, читаем содержимое в переменную-запись (Cars: TCar) с помощью Read, перемещаемся с помощью Seek к записи которую нужно удалить и записываем в эту запись содержимое переменной-записи (Cars: TCar) с помощью Write, потом опять перемещаемся к последней записи с помощью Seek и обрезаем файл с помощью Truncate.

p.s. Количество записей которые уже есть в файле можно узнать с помощью FileSize. Если от этого числа отнять единицу, то получим номер последней записи, если это не отрицательное число, то указывая его в процедуре Seek можем переместиться к последней записи.
Ответить с цитированием
  #6  
Старый 18.12.2013, 15:06
mad-d mad-d вне форума
Прохожий
 
Регистрация: 14.12.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Тему можно закрывать

Спасибо за помощь =)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:47.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025