先说明一下该系统的过程吧.
首先就认为是一个简单的本地(网络)打印机的调用过程罢了(一个南京的朋友有类似的DEMO,还提供了源码DOWNLOAD),没想到项目中有一个信息发布平台的子系统,结果用户就强烈的,非常强烈的要求要将打印在WEB上实现,也罢也罢,那就得要做一个内嵌WEB的控件来调用打印机了,想了想用DELPHI来开发算了,它的ACTIVEX FORM真不错.好不容易把控件搞定了,下面就是数据源的问题了.
![ActiveX%E6%8E%A7%E4%BB%B6%E6%8E%A5%E5%8F%A3.jpg](https://images.cnblogs.com/cnblogs_com/flyingyoko/ActiveX%E6%8E%A7%E4%BB%B6%E6%8E%A5%E5%8F%A3.jpg)
图1 - DELPHI ACTIVEX FORM INTERFACE LIST
也是因为自己经验不足,没有充分意识到数据源在本系统里面的重要性(其实已经早就意识到了,只不过....).下面介绍下票据数据源的信息:在该企业里有已上马的SAP系统,当然要我通过SAP写AB语言来进行访问,那就要了我的命算了.好在SAP数据库本身就是一个及其复杂的ORACLE而已(在SAP这层上进行的关联还是牛B的),而已也有对应字段的含义,于是建立一个ORACLE数据库连接不就了了么?众所周知,SAP数据库可不是想让你连过久连多久的,而已其服务器的资源是非常宝贵的,最可恶的是这其中涉及很多的非技术因素,如果每个企业应用都直连SAP,它就离死不远了.所以就有一个本地ORACLE数据库的存在,想想做个DTS就KO了吧,非也非也.SAP的数据库字符集和我们通常所有的ORACLE不同,SAP为德文字符集,而我们的是中文的,在做数据DTS时无法进行字符集的转换,造成应用时的展示为乱码,由于两个字符集在数据存储时的空间就不同(中文16位,德文8位),所以就要在其中做字符集的转换,但是又不能在ORACLE上创建第二个实例,郁闷啊郁闷啊,也不是SHUT DOWN,因为在本地ORACLE上还有其他的应用数据库,只好做了一个BUFFER SERVER结合UDP通讯进行数据库的操作.该操作的步骤如下:
- 1.BUFFER与SAP数据库建立DB LINK
2.BUFFER字符集转换为SAP字符集
3.清空BUFFER
4.利用DB LINK,用SAP数据填充BUFFER
5.改变BUFFER为中文字符集
6.清空LOCAL
7.用BUFFER填充LOCAL
下面是系统架构图,涉及到的东西比较多,针对这个图说明两点:
- 1.Application Database采用的是ACCESS数据库
2.WEBDEC / ZHS16GBK为ORACLE字符集的名称
![%E7%B3%BB%E7%BB%9F%E7%BB%93%E6%9E%84%E6%9E%B6%E8%AE%BE%E5%9B%BE.jpg](https://images.cnblogs.com/cnblogs_com/flyingyoko/%E7%B3%BB%E7%BB%9F%E7%BB%93%E6%9E%84%E6%9E%B6%E8%AE%BE%E5%9B%BE.jpg)
图2 - 系统整体架构图
由于过程中并非都由我进行编码,本着互相交流的愿望,所有源码提供下载(已经过初步测试).
向我的同事们鼓掌!同时也希望大家多提意见,共同进步.
Web Site
UDP SERVER
ACTIVEX控件