首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么保存数据,前一条数据不被覆盖(即所有数据都存在)

2012-08-15 
如何保存数据,前一条数据不被覆盖(即所有数据都存在)描述:在主窗体show一个小窗体,小窗体有俩个edit和一个

如何保存数据,前一条数据不被覆盖(即所有数据都存在)
描述:
在主窗体show一个小窗体,小窗体有俩个edit和一个button 其中button代码如下:
procedure TForm1.btn1Click(Sender: TObject);
var
sys:TIniFile;
begin
  try
  sys:=TIniFile.Create(extractFilepath(paramstr(0))+'sys\system.dt');
  sys.writestring('Field','value',Trim(Edit1.text));
  sys.writestring('caption','value',Trim(Edit2.text));
  finally
  sys.Free;
  end;
self.close;
end;
现通过ini写进system.dt后然后再在下次程序打开是主窗体中去读,现在的问题是:我在主窗体中show了俩次这个小窗体(点了俩次button),按道理来说是保存了俩条记录,现在system.dt只保存有一条记录(第二条数据,第一条数据被第二条数据覆盖了),我现在要求是俩条数据都存在,请问用ini能实现吗?如果能怎么做?如果不能则用什么list什么的 怎么实现?
谢谢!
 

[解决办法]
没用过TiniFile类啊。此类是否有把指针指到文件末尾再对文件写入的属性提供呢?
[解决办法]
Ini格式是:

节[section]
键=值keyName=value

节与键相同了,那么value就会被覆盖; 要存多笔只能让它任何1个不同;

或者用txt文件吧,用TStringList处理,用LoadFromFile/SaveToFile方法加载与保存,相当于操作一个Memo控件一样
[解决办法]
2楼解释得很清楚了。除了2楼的方法外,还可以使用 TClientDataSet 来存放。

如果你一定要用ini文件保存两次信息,就需添加一个键,样式大概如下:

节[section]
键一=最后一次操作的值
键二=倒数第二次操作的值

每次写入时,先将键一的值写到键二,然后再将要保存的值写到键一。
[解决办法]
用Clientdataset 是不是好点?
[解决办法]

sys:=TIniFile.Create(extractFilepath(paramstr(0))+'sys\system.dt');
sys.writestring('Field','value',Trim(Edit1.text));
sys.writestring('caption','value',Trim(Edit2.text));
//***************************************

如果这样写的话,肯定只能保存一条信息喽..
你还是想用Ini文件操作的话, 那就 在 'Field','value' 这个对应的value 后加个计数值 
比如从 value1 开始, 每次添加之前先做一次从1开始循环的判断,直到找到 不存在的 'value'+inttostr(n) 那么 这次就添加 这个 'value'+inttostr(n).

或者你就用TXT来保存喽..

不过不建议用Clientdataset,用Clientdataset保存的话, 你的程序中就要加入Midas. 这样就会让程序增大200多K.

热点排行