其他语言

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

Delphi深度探索-数据库明了的ActiveX控件


发布日期:2018年02月13日
 
Delphi深度探索-数据库明了的ActiveX控件

强大的数据库开发功能无疑是Delphi王冠上的明珠至少有%以上的人每天使用Delphi来开发数据库程序基于积木式的VCL数据库控件以及Dev Express和WollWoll等公司提供的强大的第三方数据库明了控件毫不夸张的说只需要简单的设置一下属性拖拉几下鼠标我们就可以非常快速的完成数据库程序的开发由于Delphi的数据库功能过于强大了所以很多人就忽视了一个事实就是ActiveX同样可以提供灵活的数据库绑定遗憾的是Delphi本身所提供的几个第三方的ActiveX控件中没有一个是数据库明了的控件这间接导致了一个误解使得很多人误以为Delphi并不支持数据明了的ActiveX控件(也包括很久以前的我J)这当然是错误的看法

在Delphi中使用数据明了的ActiveX控件

在下面的例子中我们将使用随Office 安装到系统中的Microsoft Calendar 控件来进行演示它就是一个数据明了控件选择Component | Import ActiveX Control选择Microsoft Calendar (见下图把类名从TCalendar改成TAXCalendar以避免同系统中原有的同名控件沖突然后点Install按钮安装此控件

新建一个程序在窗体上放置一个TAXCalendar控件再放上一个DataSource 和Table控件设定DataSource的Dataset为Table然后设定Table的DataBaseName 属性为DBDEMOSTableName 属性为EMPLOYEEDB最后设定TableActive属性为True

接下来就该进行数据库绑定了注意一下引入的TAXCalendar具有DataSource和DataBindings这两个同一般ActiveX控件不同的属性这是因为ActiveX Import Wizard在引入ActiveX控件先判断是否是数据库明了的控件如果是就以TDBOleControl作为基类进行继承如果不是就从TOleControl开始继承而TDBOleControl实现了DataBindings和DataSource属性设定AXCalendarDataSource属性为Datasource

这时我们在窗体上用鼠标右键单击TAXCalendar控件的话会发现在右键菜单中多出了一个DataBindings…菜单项(见下图

点击菜单项后会显示数据绑定属性编辑框(见下图分别在FieldName列表框中选定HireDate在Property Name列表框中选择Value()(其中是Value的Dispid号)点击Bind按钮就会在数据库字段和Value属性间建立数据关联

最后再在窗体上放置一个DBGrid和DBNavigator控件并设定它们的DataSource为DataSource运行程序移动当前数据位置的时候你可以注意到ActiveX的日期显示也会随之变化同数据库中的Hiredate保持一致如图所示

创建数据明了的ActiveX控件

虽然我们已经清楚了Delphi的确可以使用数据明了的ActiveX控件那么一个新的问题就产生了Delphi本身可不可以创建数据明了的ActiveX控件呢?由于Delphi提供了一步到位的ActiveX控件转换生成就有很多人希望能够把Delphi中强大的数据库控件转换为ActiveX控件以便能在其他支持ActiveX的开发环境开发数据库程序时仍然能够享受到象在Delphi中一样的轻松愉快的感觉但是我在前面第一部分中已经提到了由于Delphi的数据明了控件同ActiveX数据库控件的在内部机制上差距过大因此Delphi无法简单的直接转换其强大的数据库控件那么是不是就意味我们就没有办法了呢?of course not! 其实使用类型库编辑器我们可以异常轻松的实现数据明了的ActiveX控件就让我们用TEdit控件来试验一下看看如何去做

选菜单命令New | ActiveX | ActiveX Control启动ActiveX Control Convert Wizard选TEdit控件作为转化对象生成EditXActiveX框架

接下来我们将改造TEdit的Text属性使其支持数据绑定选 View | Type Library来察看Delphi生成的类型库并选中Text属性然后切换到Flags属性页(见下图

注意在Flags属性页有很多多选框对于我们来说只关心同数据绑定相关的选项它们是BindableDisplay BindableDefault BindableImmediate Bindable和Request Edit选项

标记一个属性为bindable后并将其同数据库字段绑定后当用户修改了属性后控件就会通知数据库值已经变化并请求数据库记录更新状况数据库反过来也会通知记录更新是否成功

Bindable选项表明属性支持数据绑定如果把属性标记为bindable属性将在其值变化时通知其容器

Request Edit表明属性支持OnRequestEdit 通知消息这允许控件询问容器属性值是否允许用户修改

Display Bindable表示容器可以向用户显示这个属性是可绑定的

Default Bindable表示它是唯一的缺省的可绑定属性使用它必须同时标记了Bindable属性

Immediate Bindable当被标记时所有的改变都会被通知同时还需要设定bindable和Request Edit标记

下面我们就标记EditX控件的Text属性为BindableDisplay BindableDefault Bindable和Request Edit然后点Refresh按钮刷新类型库最后选Run | Register ActiveX Server注册ActiveX控件

再引入新的EditX ActiveX控件就会发现它确实实现了数据绑定的功能下面就是一个使用了数据明了的EditX的程序的运行示意图(Delphi的ActiveX数据明了功能的实现的确简单很COOL不是吗?

上一篇:用Delphi制作录音程序

下一篇:Delphi学堂之用Delphi制作DLL小结