分享
 
 
 

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

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

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

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

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

图1.12

新建一个程序,在窗体上放置一个TAXCalendar控件。再放上一个DataSource 和Table控件。设定DataSource的Dataset为Table1,然后设定Table1的DataBaseName 属性为DBDEMOS,TableName 属性为EMPLOYEE.DB,最后设定Table1.Active属性为True。

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

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

图1.13

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

图1.14

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

图1.15

创建数据明了的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属性页(见下图1.16)。

图1.16

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

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

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

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

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

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

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

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

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

图1.17

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有