Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизКак удалить запись из потомка TFileStream Найти похожие ветки
← →
mr.Evil © (2006-01-02 01:13) [0]Исходник такого типа
unit RecordBase;
interface
uses
classes, dialogs, sysutils;
Type
Variante = (A, B, C, D);
type
DatFile = packed record
Vopros : String[255];
Oa : String[50];
Ob : String[50];
Oc : String[50];
Od : String[50];
VarOt : Variante;
End;
TRecordStream = class(TFileStream)
private
function GetNumRecs : Longint;
function GetCurRec : Longint;
procedure SetCurRec(RecNo : Longint);
protected
function GetRecSize : Longint; Virtual;
public
function SeekRec(RecNo : Longint; Origin : Word): Longint;
function WriteRec(const Rec): Longint;
function AppendRec(const Rec): Longint;
function ReadRec(var Rec): Longint;
procedure First;
procedure Last;
procedure NextRec;
procedure PreviousRec;
property NumRecs : Longint read GetNumRecs;
property CurRec : Longint read GetCurRec write SetCurRec;
end;
implementation
{ TRecordStream }
function TRecordStream.AppendRec(const Rec): Longint;
begin
Seek(0, 2);
Result := Write(Rec, GetRecSize);
end;
procedure TRecordStream.First;
begin
Seek(0, 0);
end;
function TRecordStream.GetCurRec: Longint;
begin
Result := (Position div GetRecSize) + 1;
end;
function TRecordStream.GetNumRecs: Longint;
begin
Result := Size div GetRecSize;
end;
function TRecordStream.GetRecSize: Longint;
begin
Result := SizeOf(DatFile);
end;
procedure TRecordStream.Last;
begin
Seek(0, 2);
Seek(- GetRecSize, 1);
end;
procedure TRecordStream.NextRec;
begin
if ((Position + GetRecSize) div GetRecSize) = GetNumRecs then
raise Exception.Create("Cannon read beyond end of file")
else
Seek(GetRecSize, 1);
end;
procedure TRecordStream.PreviousRec;
begin
if (Position - GetRecSize >= 0) then
Seek(- GetRecSize, 1)
else
raise Exception.Create("Cannon read beyond beginning of the file");
end;
function TRecordStream.ReadRec(var Rec): Longint;
begin
Result := Read(Rec, GetRecSize);
Seek(- GetRecSize, 1);
end;
function TRecordStream.SeekRec(RecNo: Integer; Origin: Word): Longint;
begin
Result := Seek(RecNo * GetRecSize, Origin);
end;
procedure TRecordStream.SetCurRec(RecNo: Integer);
begin
if RecNo > 0 then
Position := (RecNo - 1) * GetRecSize
else
Raise Exception.Create("Cannot go beyond beginning of file.");
end;
function TRecordStream.WriteRec(const Rec): Longint;
begin
Result := Write(Rec, GetRecSize);
end;
end.
Помогите разобратся как удалять записи.
← →
TUser © (2006-01-02 11:23) [1]Для начала - порядок записей после удаления должен сохраняться или нет?
← →
Anatoly Podgoretsky © (2006-01-02 13:02) [2]mr.Evil © (02.01.06 01:13)
Записи удаляются, или путем перемещения всех записей на место удаляемой, или путем создания нового файла.
← →
TUser © (2006-01-02 13:53) [3]
> или путем перемещения всех записей
Илу путем перемещания последней записи на место удаляемой, если ответ на [1] отрицательный.
← →
mr.Evil © (2006-01-03 00:11) [4]Порядок записей безраличен.
Вариант решения: У нас есть файл ‘A’ из пятью записями B1, B2, B3, B4, B5. Нам надо удалить запись B3. смещаем записи B4, B5 и урезаем файл на длину записи B3.
Думаю будет правильно.
← →
Германн © (2006-01-03 02:18) [5]
> Вариант решения: У нас есть файл ‘A’ из пятью записями B1,
> B2, B3, B4, B5. Нам надо удалить запись B3. смещаем записи
> B4, B5 и урезаем файл на длину записи B3.
> Думаю будет правильно.
Правильно думаешь.
Но если
> Порядок записей безраличен.
, то учти совет TUser © (02.01.06 13:53) [3]. Имхо, он пригодится, когда записей много.
← →
mr.Evil © (2006-01-04 00:51) [6]Спасиба все получилось !!!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c