posts - 235,  comments - 527,  trackbacks - 0
  2012年12月19日
摘要:Release NotesBreaking ChangesTo learn about breaking changes in this version, please refer to the following page:Breaking Changes - DevExpress VCL 12.2.2Known IssuesTo learn about known issues in this version, please refer to the following page:Known Issues - DevExpress VCL 12.2.2The following secti 阅读全文
posted @ 2012-12-19 10:45 xalion 阅读 (5297) 评论 (0) 编辑
  2012年11月12日
摘要:想利用TkbmMWUNIDACQuery插入一条记录,结果遇到问题,显示:不允许从数据类型sql_variant到varchar的隐式转换。请使用CONVERT函数来运行此查询。这是什么问题啊?下面是出问题的代码,很常规的写法。q:=TkbmMWUNIDACQuery.Create(self); tryq.ConnectionPool:=self.kbmMWUNIDACConnectionPool1;q.SessionName:=Self.kbmMWPooledSession1.SessionName;q.SQL.Text:= 'Insert into t (MaxSn) values 阅读全文
posted @ 2012-11-12 09:51 xalion 阅读 (1301) 评论 (4) 编辑
  2012年11月8日
摘要:首先,当一个企业要给外网用户提供服务时,应用服务器上应该配置外网IP,同时外网防火墙也要进行相关的配置,但是当对外的服务器比较多时,可能需要很多外网IP,同时防火墙上要频繁设置,非常麻烦。第二,分发客户端后,一般配置都要默认设置好(否则会给客户造成不必要的麻烦),那么客户端都会指向一个相对比较固定... 阅读全文
posted @ 2012-11-08 16:59 xalion 阅读 (1507) 评论 (4) 编辑
  2012年11月5日
摘要:关于kbmMW的事务控制,前文已经在客户端实现,通过kbmMWClientTransaction来控制多个数据集的提交,在客户端提交多数据集,实际上,是在客户端实现业务逻辑,并通过一个事务来完成数据处理,这是违反多层架构的做法,实际项目中,需要在服务端,往往是利用多个数据集进行业务处理,并且用事务来控制,那我们该怎么办呢?换句话说,如何在服务实现事务的控制。kbmMW在服务端,如同在客户端一样,为我们提供了方便的机制来处理事务。下面的代码,转自kbmMW的新闻组:var tx: TkbmMWTransaction;begintx := TkbmMWTransaction.Create;... 阅读全文
posted @ 2012-11-05 12:04 xalion 阅读 (871) 评论 (1) 编辑
  2012年10月23日
摘要:TStringList不是线程安全的,当我们在线程用到他是,要做保护。方法有两种,一种是用delphi自带的Critical,另外一种就是kbmMW为我们提供的TkbmMWLock类。现在我们看看如何用TkbmMWLock为TStringList做线程安全:1.基于TStringList声明自己的类:TThreadStringList=class(TStringList)2.在该类中增加kbmMWLock实例Private FLock:TkbmMWLock;在类的Create及Destructor方法中建立与取消3.调用方法当我们在操作ThreadStringList实例时,调用kbmMWLo 阅读全文
posted @ 2012-10-23 11:12 xalion 阅读 (794) 评论 (0) 编辑
  2012年10月19日
摘要:在kbmMW创建服务向导中,有个“Eventoperated service”,其描述信息:同TkbmMWSimpleService一样,就是公布了一个附加的事件,来控制客户端请求,取代了ProcessRequest.看一下TkbmMWEventService代码,原来是这样:1.TkbmMWEventService = class(TkbmMWSimpleService)这个事件服务类是从TkbmSimpleService继承的,那么,就具有了SimpleService一样的功能2.EventService的ProcessRequest的重新实现:我们能够看到,重新实现的本质,就是触发OnR 阅读全文
posted @ 2012-10-19 10:51 xalion 阅读 (654) 评论 (0) 编辑
  2012年10月16日
摘要:kbmMW提供了QueryService,供我们在客户端象传统数据库应用一样,直接利用ClientQuery做SQL查询,以及提交,并且能够在客 户端以事务的方式提交多个数据集,应该说,QueryService为我们提供了非常好的便利,快速将两层应用转为多层应用,如果用过ASTA,就会发 现,QueryService在对两层应用的转化上,要比其实现的更完美,层次更清晰。但在实际项目中,如果考虑应用服务器对多平台的支持以及业务逻辑的 集中实现,那么仅仅使用QueryService是不够的,我们可能还要使用WebService等kbmMW提供的其他服务,这时候涉及到一个问题,如 何自己控制数据集的 阅读全文
posted @ 2012-10-16 09:29 xalion 阅读 (976) 评论 (0) 编辑
  2012年10月11日
摘要:做一个简单的QueryService,在跟踪过程中发现,客户端一个查询,会被触发两次。怎么会这样,这严重影响服务器性能。客户端的代码非常简单,就是执行一个SQL,通过QueryService返回结果: kbmMWClientQuery2.Close; kbmMWClientQuery2.Open;于是利用服务器端的QueryService的事件OnQueryStatement进一步检查SQL的执行情况,把SQL写到Memo中:procedureTkbmMWQueryService3.kbmMWQueryServiceQueryStatement(Sender:TObject; Place: T 阅读全文
posted @ 2012-10-11 10:33 xalion 阅读 (882) 评论 (1) 编辑
摘要:kbmMW提供了稳顾机制,分为服务端的Cache及客户端的Cache。以客户端为例,当客户端发出相同的数据查询请求时,kbmMW会在客户端的Cache中查找,如果找到,则不再向服务器请求数据。为了启用一个ClientQuery使用稳存,首先要设置其以下两个属性:kbmMWClientQuery.Cached:=True;//打开数据集的稳存kbmMWClientQuery.CacheFlags:mwcfDontAge - 缓存的内容不过期,一直在Cache保留mwcfDontGarbageCollect - 缓存的内容不做垃圾回收,效果同mwcfDontAgemwcfDefsOnly - 仅缓 阅读全文
posted @ 2012-10-11 10:32 xalion 阅读 (834) 评论 (0) 编辑
  2012年10月10日
摘要:开始利用kbmmw实作项目,第一件事就是为的服务端加用户的认证。如果客户端发来的请求无法在服务器端通过认证,即客户端认证失败,会在客户端弹出一个错误提示窗口:Authorization failed.总不能让用户看到这样的提示信息,得想办法,截获这样的错误,并给出自己的提示。没想到,费了一翻周拆,最终发现,kbmMW没有提供机制来处理这样的问题。先看看服务器在哪里处理这样的错误:单元:kwmMWServer方法:procedure TkbmMWServer.InternalServeMessagePart'Authorization failed.')行号:5118,5182服 阅读全文
posted @ 2012-10-10 18:58 xalion 阅读 (922) 评论 (0) 编辑