如何修改与删除记录型文件里的记录

xiaocongzhi 2009-03-10 09:43:45
各位高手:
请问怎么样修改和删除“记录类型文件”里的某条记录?
我试过了Write方法,只能添加记录,而不是修改,我是要能覆盖掉原来的记录!还有怎么删除一条记录?代码如下:
procedure ModifyTSInfo();
begin
try
Seek(TSFile,0);//指向第一条记录
While not EOF(TSFile) do
begin
Read(TSFile,TSTemp); //读取数据
if TSTemp.TS_ID=StrToInt(frmTS.edtTS_ID.Text) then
begin
TSTemp.TS_Name:=Pchar(frmTS.edtTS_Name.Text);
TSTemp.TS_IP:=Pchar(frmTS.edtTS_IP.Text);
TSTemp.X:=StrToInt(frmTS.cbX.Text);
TSTemp.Y:=StrToInt(frmTS.cbY.Text);
TSTemp.State_Conn:=0;
TSTemp.State_Error:=0;
Write(TSFile,TSTemp); //写入数据
end;
Seek(TSFile,FilePos(TSFile));
end;
except
On E:Exception do
begin
ExceptionStr:='修改站点信息异常。异常信息:'+E.Message;
Application.MessageBox(PAnsiChar(ExceptionStr),'错误提示',MB_IConError);
end;
end;
end;

记录是这样定义的:
TSRecord=Record
TS_ID:integer;
TS_Name:String[30];
TS_IP:String[20];
X:integer;
Y:integer;
State_Conn:integer;
State_Error:integer;
end;

TSTemp:TSRecord;//定义记录变量
TSFile:File of TSRecord;//定义记录型文件
...全文
149 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluespark 2009-03-15
  • 打赏
  • 举报
回复
注意数据结构,删除的是一条记录(一个节点)
要是C++就好了,C++标准库的Vector和List都轻易做到
xiaocongzhi 2009-03-11
  • 打赏
  • 举报
回复
噢,对了怎么能让TTreeView的NodeRoot的标题不能修改!我在TTreeView中添加了一个“根结点”,在运行时只要对着根结点名字,双击就能修改标题!
xiaocongzhi 2009-03-11
  • 打赏
  • 举报
回复
请帮我想想办法,怎样能方便的删除记录!还有:Read函数是不是会修改指针位置!
xiaocongzhi 2009-03-11
  • 打赏
  • 举报
回复
如果把剩下的读出来再写一次,那岂不是会最后一条记录会多出一条重复的!
Harryfin 2009-03-10
  • 打赏
  • 举报
回复
删除的话忘记了,最笨的就是把剩下的都读出来然后再写一次,先想想看
Harryfin 2009-03-10
  • 打赏
  • 举报
回复
删除的话忘记了,最笨的就是把剩下的都读出来然后再写一次,先想想看
xiaocongzhi 2009-03-10
  • 打赏
  • 举报
回复
还有如果我想把某条记录删除 怎么操作?
xiaocongzhi 2009-03-10
  • 打赏
  • 举报
回复
procedure ModifyTSInfo();
begin
try
Seek(TSFile,0);//指向第一条记录
While not EOF(TSFile) do
begin
Read(TSFile,TSTemp); //读取数据
if (TSTemp.TS_ID=StrToInt(frmTS.edtTS_ID.Text)) then
begin
TSTemp.TS_ID:=StrToInt(frmTS.edtTS_ID.Text);
TSTemp.TS_Name:=(frmTS.edtTS_Name.Text);
TSTemp.TS_IP:=(frmTS.edtTS_IP.Text);
TSTemp.X:=StrToInt(frmTS.cbX.Text);
TSTemp.Y:=StrToInt(frmTS.cbY.Text);
TSTemp.State_Conn:=0;
TSTemp.State_Error:=0;
Seek(TSFile,FilePos(TSFile)-1);指向当前位置
Write(TSFile,TSTemp);
Seek(TSFile,FilePos(TSFile));//指向下一条,注:这个是在if体内!
end;
end;
我这样改了,居然可以修改了!"Seek(TSFile,FilePos(TSFile));//指向下一条,注:这个是在if体内!"这一句在if体内,那while循环靠什么来向后移动指针!是不是“Read(TSFile,TSTemp);//读取数据”这个Read函数 读取完了并会移动指针!
Harryfin 2009-03-10
  • 打赏
  • 举报
回复
不是指向下一条,是指向你要修改的那一条
xiaocongzhi 2009-03-10
  • 打赏
  • 举报
回复
Seek(TSFile,0);//指向第一条记录
While not EOF(TSFile) do
begin
Read(TSFile,TSTemp); //读取数据
if TSTemp.TS_ID=StrToInt(frmTS.edtTS_ID.Text) then
begin
TSTemp.TS_Name:=Pchar(frmTS.edtTS_Name.Text);
TSTemp.TS_IP:=Pchar(frmTS.edtTS_IP.Text);
TSTemp.X:=StrToInt(frmTS.cbX.Text);
TSTemp.Y:=StrToInt(frmTS.cbY.Text);
TSTemp.State_Conn:=0;
TSTemp.State_Error:=0;
Write(TSFile,TSTemp); //写入数据
end;
Seek(TSFile,FilePos(TSFile));//指向下一条记录
end;
其实就是:把记录文件TSFile中 TS_ID字段 等于 frmTS.edtTS_ID.Text的记录 改为 Edit框中输入的内容!
xiaocongzhi 2009-03-10
  • 打赏
  • 举报
回复
Seek(TSFile,FilePos(TSFile)); //指向下一条记录
代码里有的
Harryfin 2009-03-10
  • 打赏
  • 举报
回复
好久没用这套命令了,不知道有没记错。

write不行吗? help里面的描述应该是可以的:
In Delphi code, Write writes a file to a file component. F is a file variable, and each V is a variable of the same type as the component type of F. For each variable written, “the current file position” is advanced to the next component. If the current file position is at the end of the file (that is, if Eof(F) is true), the file is expanded.


写之前有定位到你要修改的记录吗?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧