Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Проблема с удалением записи в типизированном файле   Найти похожие ветки 

 
Delphin ©   (2004-06-30 23:43) [0]

Hi ALL! Есть проблема с удалением записи в типизированном файле:
Вот сабж:
type
TMember=Record
Nam,Fam:String[25];
End;
......
var
 Form1: TForm1;
 F,TF:File of TMember;
 I,C:Integer;
 Member:Tmember;
..........
procedure TForm1.Button7Click(Sender: TObject);
Var
P,S,FS:Integer;
begin
S:=0;
P:=0;
P:=FilePos(F);
Seek(F,S);
AssignFile(TF,"Member.Tmp");
IF Not FileExists("Member.Tmp") Then
Rewrite (TF)
Else
Erase(TF);
While P-1>S Do Begin
Seek(F,S);
Seek(TF,S);
Read(F,Member);
Write(TF,Member);
Inc(S);
End;
FS:=S+1;
{While Not Eof(F) Do Begin
Seek(F,FS);
Seek(TF,S);
IF Not EOF(F) Then
Read(F,Member);
Write(TF,Member);
Inc(S);
End;  }
CloseFile(F);
Erase(F);
CloseFile(TF);
Rename(TF,"Member.Dat");
AssignFile(F,"Member.Dat");
IF Not FileExists("Member.Dat") Then
Rewrite(F)
Else
Reset(F);
Edit1.Text:=Member.Nam;
Edit2.Text:=Member.Fam;

end;

В первый раз программа удаляет нужную запись без проблем.
Во второй раз она удалчет все записи (если повторно нажать на кнопку). Пробовал пошагувую компиляцию, вот результат:
во второй раз не определяет позицию в файле (P:=FilePos(F); ), и Р принимает значение равным нулю.
Мастера, Кто знает, как этот баг устранить ?
З.Ы
Заранее благодарен


 
QuasiLamo ©   (2004-07-01 00:26) [1]

ну дык чтобы поэлементно удалять, нужно доступ к файлу индексированный заиметь, а не последовательый. по моему так


 
Плохиш ©   (2004-07-01 01:24) [2]


> Delphin ©   (30.06.04 23:43)

Чуть глаза не сломал :-( Вас что мама не учила код оформлять?

Твой кусок работает так, как ты его и написал.
1. После Reset указатель находится на записи 0
2. Посмотри внимательней на свой код и дважды внимательно на код в коментариях!


 
QuasiLamo ©   (2004-07-01 06:02) [3]

procedure TForm1.Button7C(Sender: TObject);
var
 P, S, FS: Integer;
begin
 S := 0;
 P := 0;
 P := FilePos(F);//У тебя файл почему не открыт заранее?
 Seek(F, S);
 AssignFile(TF, "Member.Tmp");
 if not FileExists("Member.Tmp") then
   Rewrite(TF)
 else
   Erase(TF);// если ты тут сотрешь файл, то
 while P - 1 > S do
 begin
   Seek(F, S);
   Seek(TF, S);// тут получишь ошибку
   Read(F, Member);
   Write(TF, Member);
   Inc(S);
 end;
 FS := S + 1;
 CloseFile(F);
 Erase(F);
 CloseFile(TF);
 Rename(TF, "Member.Dat");
 AssignFile(F, "Member.Dat");
 if not FileExists("Member.Dat") then
   Rewrite(F)
 else
   Reset(F);
 Edit1.Text := Member.Nam;
 Edit2.Text := Member.Fam;
end;


 
Думкин ©   (2004-07-01 07:33) [4]

Есть книга Бакнелла.
http://www.giftbooks.ru/ws/18/1792.htm
там описано как с такими зверями красиво работать. Все примеры - на сайте издательства.


 
Delphin ©   (2004-07-01 12:19) [5]

Народ, огромное спасибо. Щас попробую немного изменить код ;)


 
Delphin ©   (2004-07-01 15:15) [6]

Hi ALL!
Проблему исправил так:
Вместо P := FilePos(F) поставил
P:=I;
И в промежутке кода между Reset(F); И Edit1.Text := Member.Nam; Вставил такую вещ: While Not EOF(F) Do
Read(F,Member);
I:=FilePos(F);
И теперь всё работает достаточно успешно :))
З.Ы Всем спасибо



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

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1088157996
MetalFan
2004-06-25 14:06
2004.07.18
или форум глючит...


14-1088520033
diablo_m
2004-06-29 18:40
2004.07.18
Ищу типа дизайнера


14-1088628178
KilkennyCat
2004-07-01 00:42
2004.07.18
Что может оказать влияние на вид деятельности программиста?


14-1088489546
Mixan
2004-06-29 10:12
2004.07.18
Не могу скачать ни один исходник с сайта! В частности Гробницы 2


3-1087728883
korvin
2004-06-20 14:54
2004.07.18
Хранимые процедуры