分配主键为0的错误

时间:2014-05-05 19:33:08

标签: delphi records

错误填充代码的目的是将相同的主键分配给两个记录,每个记录属于不同的文件(成员和贷款文件)。下面是用于将主键分配给成员文件的代码。

AssignFile(MemberDetailsFile, 'MemberDetails.dat');
Reset(MemberDetailsFile);
if FileSize(MemberDetailsFile) = 0 then
  MemberRecords.UniqueId := 1
  { if there are no records in the file then UID will be 1 }
else
begin
  while not eof(MemberDetailsFile) do
  begin
    read(MemberDetailsFile, MemberRecords);
  end;
  ID := MemberRecords.UniqueId + 1;
end;
{ add 1 to the last Unique ID given to generate the new UID- if there are
records in the file }
end;

此代码调用上述过程并获取分配给ID的值,并将相同的值分配给贷记记录主键。

btnSave.Enabled := false;
CreateUniqueID(MemberRecords.UniqueId);
lblUID.Caption := IntToStr(MemberRecords.UniqueId);
AssignFile(LoanFile, 'LoanFile.dat');
Reset(MemberFile);
Reset(LoanFile);
SaveDetails;
MemberRecords.MemberFine := 0;
write(MemberDetailsFile, MemberRecords);
LoanRecords.LoanUniqueId := MemberRecords.UniqueId;
{ Loan ID will be equal to Member ID }
LoanRecords.MemberUniqueID := MemberRecords.UniqueId;
LoanRecords.MemberName := MemberRecords.MemberName;
LoanRecords.MemberSecondName := MemberRecords.MemberSecondName;
{ write to file and record }
write(LoanFile, LoanRecords);
CloseFile(MemberDetailsFile);
CloseFile(LoanFile);

错误是只有一条记录保存到成员文件中,因此它会覆盖现有的一条记录。有时它会说它不存在。贷款ID也可以工作一段时间然后将其主键分配给0?它只是一个重写/重置错误吗?

2 个答案:

答案 0 :(得分:0)

如果该文件已存在,则必须使用Reset而不是Rewrite

Rewrite重新创建文件,从而擦除任何具有相同名称的现有文件。

答案 1 :(得分:0)

您的问题是ReWrite会覆盖文件的内容。打开文件进行读写时应使用Reset。你也可以更聪明地获得你的独特身份。您可以使用文件大小查看文件中有多少条记录。像这样:

AssignFile(MemberDetailsFile, 'MemberDetails.dat');
Reset(MemberDetailsFile);
MemberRecords.UniqueId := FileSize(MemberDetailsFile) + 1;