Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Типизированные файлы. Записи. Delphi 7.


Автор: Denwer 18.5.2008, 02:49
Есть запись, которая добавляется в тип. файл. Хочу при выборе в Combox значения,
чтобы в Memo выводилось номер записи которую я выбираю.
Смысл то понятен, что надо поставить указатель и всё. Но что то не выходит.
 
Код

type
   Tstud = record
    name  : string[15];
    fam   : string[15];
    vuz   : string[15];
   end;
var
stud : Tstud;
     f : file of Tstud;
     i : integer; // счётчик записей в combobox
  Form1: TForm1;



Код

 // Добавление в файл
procedure TForm1.Button1Click(Sender: TObject);
begin
    AssignFile(f, 'C:\temp.db');
    reset(f);
    seek(f, filesize(f));
   with stud do  begin
     name := Edit1.Text;
     fam  := Edit2.Text;
     vuz  := Edit3.Text;
    end;
    write(f, stud);
    i := i + 1;
    Combobox1.Items.Add(inttostr(i));
   Clear;
 end;

 // выбор записи
 procedure TForm1.ComboBox1Change(Sender: TObject);
  var
   j : integer;
   k : integer;
   st : string;
    begin
      for j := 0 to i - 1 do
      if ComboBox1.ItemIndex = j then
      ShowMessage ('Выбрана (' + inttostr(j+1) + ') запись !');
       if not Eof(f) then
         begin
           seek (f, j);         // не пойму почему не ставит указатель !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           k := filepos(f);
         end;
      memo1.Lines.Add(inttostr(k));
    end;
  end.

Автор: Coder 18.5.2008, 04:07
seek (f, j*sizeof(Tstud));

Автор: Denwer 18.5.2008, 10:38
что то не хочет

Автор: Alexeis 18.5.2008, 12:07
Цитата(Denwer @  18.5.2008,  09:38 Найти цитируемый пост)
что то не хочет 

правильно не хочет seek индексирует записи, а не байты. Нужно просто seek (f, j);

Добавлено через 2 минуты и 35 секунд
seek(f, filesize(f)); тоже не верно, по той же причине.

Добавлено через 4 минуты
Кстати расскажи подробнее чего именно не выходит и как оно на самом деле.

Автор: Denwer 18.5.2008, 14:42
Alexeis, 
Мне и нужны записи, мне нужно выводить просто номер записи, который я выбираю, уже для последующей обработки (удаление, изменение, вывод,  именно выбранной записи.) Если взять мой пример, он выводит тупо номер последней записи. Как будто указатель ставится в конец а не в нужное положение.

Автор: Alexeis 18.5.2008, 17:02
Бррр... мой моск взорвался при анализе кода. По коду не ясно, что вообще он дожен делать. 
Переменная I вообще не инициализируется, файл от запуска к запуску должен набиваться новыми записям, при это счетчик i ничего об этом не знает. Короче требуется подробная формулировка задачи.

Автор: Denwer 18.5.2008, 19:52
Alexeis, Вроде ж все описал, ну ладно сам буду разбираться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)