您的代码应该类似于以下内容。请注意,假设连接器已连接到适当的代理,数据库连接处于活动状态并且已创建数据库模式(您可以很容易地从模型资源管理器中执行后面的步骤)。
var
Band : TBand;
begin
// Query the database for all TCountry instances or descendants
CountrySelector.Close;
CountrySelector.Command.Text := 'SELECT * FROM ANY TCountry';
CountrySelector.Open;
if ContactSelector.ObjectCount > 0 then
begin
Band := TBand.Create(Connector);
try
// Take currently selected Country and assign to Band's Country property
// Reference counting is handled automatically
Band.Country := CountrySelector.CurrentObject as TCountry;
Band.Store;
finally
Band.Free; // Free reference to Band so we do not leak an object
end;
end;
end;
我还应该提到,我不经常使用 Selector,因为它不能满足我的典型应用程序需求。我的用户经常使用 DevExpress Quantum 网格从 Firebird 中检索 20k+ 条记录,并期望响应时间始终低于 2 秒。为了满足这个要求,使用 IBExpert(一个古怪但非常出色的工具)进行了一些非常仔细的设计和调整,因为我的查询经常跨越许多表并且具有复杂的过滤要求。
关于 IO,我可以说的是,它使数据建模变得容易,因为使用模型资源管理器将设计简化为点击过程。IO 也是一个很好的数据绑定框架,因为它允许您将甚至复杂的对象图“公开”为数据集并将属性绑定到可视控件。我喜欢的另一部分是我不再需要手动创建插入或更新查询以及设置列值以添加或修改持久对象。IO 只需很少的编码就可以在幕后为您完成这些以及更多工作。
大卫