我正在使用TFDMemTable
,我创建了一个数据集并用数据填充了我的表,然后用于FDMemTable.saveToFile
保存我的数据。
现在问题来了,我怎样才能Field
在这个已经保存的数据中添加一个新的并用默认值填充所有记录?
我尝试将新的添加Field
到FDMemTable
然后加载信息,希望它会使用它自动填充每个字段,FieldName
并且新字段带有空白,但我收到错误消息:`------------ ---------------
调试器异常通知
Project Project1.exe 引发异常类 EDatabaseError,并带有消息“未找到字段 'Episode'”。
中断继续帮助
`
我该如何解决这个问题?是否可以解决向现有数据添加具有默认值的新字段的方法?
这是一个测试用例:
// here is a simple example, i have a few fields
FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, false);
FDMemTable1.FieldDefs.Add('name', ftString, 30, false);
FDMemTable1.FieldDefs.Add('QualityID', ftInteger, 0, false);
FDMemTable1.CreateDataSet;
// i fill the the table with some value
FDMemTable1.Open;
FDMemTable1.AppendRecord([1, 'Movie1', 1]);
FDMemTable1.AppendRecord([2, 'Movie2', 2]);
FDMemTable1.AppendRecord([3, 'Movie3', 1]);
// after seeing the value on the grid, i push a button and save the table as XML
FDMemTable1.saveToFile('Data.xml');
// now after closing the program and running it again, i want to load the data with a new FieldDef Called Episode with a default value 0
// the table is connected to cxGrid, and the moment i try to load, i get the error i mentioned.
FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, false);
FDMemTable1.FieldDefs.Add('name', ftString, 30, false);
// this line is NEW
FDMemTable1.FieldDefs.Add('Episode', ftInteger, 0, false);
FDMemTable1.FieldDefs.Add('QualityID', ftInteger, 0, false);
FDMemTable1.CreateDataSet;
// i try to load but i get an error
FDMemTable1.loadFromFile('Data.xml');
更新 1(基于维多利亚的回答):
//All the codes below are executed after the code at the top, after the loadFromFile.
FDMemTable1.ResourceOptions.StoreItems := FDMemTable1.ResourceOptions.StoreItems + [siMeta];
FDMemTable1.Close;
//i tried putting FDMemTable1 as the owner but when i try the line "FDMemTable1.Fields.add" i get an Duplicate error!
// and when i try putting nil, i get access violation ! so i tried putting the owner someother random table and it fixed the problem
fieldDefs := TFieldDefs.Create(someRandomFDMemTable);
fieldDefs.Add('Episodes', ftString, 30, false);
FDMemTable1.Fields.Add(fieldDefs.Items[0].CreateField(FDMemTable1));
FDMemTable1.Open;
如您所见,我有两个问题,
1-添加新字段时遇到问题!在我得到一个错误的地方,我首先尝试使用TFieldDef
而不是TFieldDefs
但我无法让它工作。
2- 是所有列都是空的并且网格上没有数据的事实。
当我尝试强行解决问题 1 时,会出现问题 2。