数据的增加
// 更新角色记录数据
// 参数:
// nIndex: 记录索引号
// HumRecord: 角色数据指针
// boNew: 是否新建记录
// 返回值:
// Boolean - 更新是否成功
function TFileHumDB.UpdateRecord(nIndex: Integer; HumRecord: pTHumInfo; boNew: Boolean): Boolean;
var
HumRcd: THumInfo; // 临时角色数据
nPosion: Integer; // 文件位置偏移
n10: Integer; // 当前文件指针位置
begin
// 计算记录在文件中的位置
// 位置 = 记录索引 * 记录大小 + 文件头大小
nPosion := nIndex * SizeOf(THumInfo) + SizeOf(TDBHeader);
// 定位到记录位置
if FileSeek(m_nFileHandle, nPosion, 0) = nPosion then begin
// 保存当前文件指针位置
n10 := FileSeek(m_nFileHandle, 0, 1);
// 如果是新建记录,需要检查该位置是否已有有效记录
if boNew and
(FileRead(m_nFileHandle, HumRcd, SizeOf(THumInfo)) = SizeOf(THumInfo)) and // 读取记录
(not HumRcd.Header.boDeleted) and // 记录未删除
(HumRcd.Header.sName <> '') then // 记录名不为空
Result := True // 已存在有效记录,返回失败
else begin
// 设置记录头信息
HumRecord.Header.boDeleted := False; // 设置未删除标记
HumRecord.Header.dCreateDate := Now(); // 设置创建时间
// 更新数据库头更新时间
m_Header.dUpdateDate := Now();
// 写入数据库头
FileSeek(m_nFileHandle, 0, 0);
FileWrite(m_nFileHandle, m_Header, SizeOf(TDBHeader));
// 写入角色数据
FileSeek(m_nFileHandle, n10, 0);
FileWrite(m_nFileHandle, HumRecord^, SizeOf(THumInfo));
// 文件指针回退一条记录
FileSeek(m_nFileHandle, -SizeOf(THumInfo), 1);
// 更新当前记录索引
n4 := nIndex;
// 设置数据已修改标记
m_boChanged := True;
Result := True;
end;
end else
Result := False; // 定位失败返回错误
end;