其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi深度探索之使用Bold开发数据库应用(3)


发布日期:2021年03月02日
 
Delphi深度探索之使用Bold开发数据库应用(3)

内建的Bold对象编辑界面

双击BoldGrid中左侧的箭头或者记录可以激活对象编辑对话框对象编辑对话框可以同时启动多个如下图所示意

在BoldGrid中我们可以使用ctrl+鼠标点击来多选对象也可以点击网格左上角来选中所有的对象但是默认的BoldGrid对象编辑器不支持人员和账目对象的关联的显示和编辑但弹出的对象编辑器则支持这些关联上图框起来的箭头可以用来拖放对象将哈巴狗拖动到PayPerson的位置就可以建立支付人同账目对象之间的关联了

还有一点要注意的是弹出式对象编辑器并不是同Grid同步绑定的因此我们可以打开多个编辑器的同时还可以在网格内的记录间导航到不同的位置两者可以做到互不影响游标而传统的数据库程序无法做到这点因为当游标改变时会同步改变所有同DataSource绑定的数据感知组件中的内容

退出系统后可以看到Dataxml中记录了刚才输入的信息

主从关系的实现

使用上面的Bold程序再输入一个大尾巴兔兔的用户你会发现有一个问题就是大尾巴兔兔同志目前没有任何账目支出但是点选到大尾巴兔兔对象上时账目网格组件仍然是显示所有的账目信息而没有实现主从关联

为了实现主从关系需要修改一下账目对象的BoldListHandle组件的属性将blhAcct的RootHandle属性由原来的DmMoneybshMoney改成blhPerson表示父对象是人员同时要将Expression属性改成Pay另外为了能够在账目网格中显示同账目关联的人员信息双击bgAcct网格添加一个新的Column设定它的BoldPropertiesExpression为PayPersonname表示字段用来显示支付账目人的名字见下图示意

再次运行程序可以看到这回实现了真正的主从关联当点击哈巴狗时只显示同哈巴狗关联的账目同时如果这时点击账目网格的添加命令的话新建的对象的PayPerson自动设定为哈巴狗如下图示意

级联删除的实现

前面虽然我们实现了主从关系但是将所有人员都删除后你会发现dataxml文件中仍然有账目信息这表明删除人员时没有将同人员绑定的账目信息删除也就是说并没有实现级联删除

为了更形象的察看这一现象在界面添加一个BoldGridBoldNavigator和BoldListHandle来显示系统中所有的对象设定BoldListHandle的RootHandle属性为DmMoneybshMoney设定Expression属性为MoneyModelRootallInstances表示显示系统中所有的对象实例

然后向前面一样将BoldListHandle绑定到BoldGrid和BoldNavigator并创建默认的Columns再次运行后的效果如下图所示意

可以看到全部对象列表中有两个字段type字段表示系统中对象的类型而AsString字段则显示对象的字符串表达但是默认Person对象的AsString字段里面显示的是对象组件加类别字符串而AcctItem对象的AsString显示的是对象的Amount属性但是为了观察对象被删除的情况我希望能够显示更有意义的字符串如显示人员的名称显示账目的名称及支付人

因此需要修改模型中对象默认字符串的定义双击数据模块中bmMoney激活Bold UML Editor选中Person对象设定Default string rep为name表示默认的AsString属性为人员的名称见下图示意

同样的设定AcctItem的Default string rep为payPersonname++name表示AsString由支付人的名称及账目名称构成

再次运行程序显示效果示意如下

这时将哈巴狗从人员列表中删除后界面示意图如下

可以看到账目对象大白菜和化妆品仍然还在只是支付人信息为空了看来账目对象确实没有被级联删除为了实现级联删除再次打开Bold UML Editor展开PayAssoc关联选中Pay然后设定Delete action为Cascade表示使用级联删除见下图示意

再次运行程序输入人员信息及人员账目信息后再删除人员会发现这回将绑定的账目信息也一同删除了

总结

综上所述使用Bold我们可以在只写一行代码不用设计任何数据库表的情况下建立一个具有初步功能的应用程序由此可见Bold的强大的快速开发数据库的能力接下来我将介绍一些更加高级的功能

上一篇:Delphi深度探索之使用Bold开发数据库应用(2)

下一篇:浅谈Delphi开发经验[2]