delphi中两个bug的分析与修复
bug1.传参时中文被截断的问题: 【程序编程相关:DBGrid使用全书(三)】 在使用delphi 7进行三层数据库开发时,遇到了两个小问题,通过反复试验,终于找出了delphi 7中的两个小bug并进行了修复(好像delphi 6中也有相同的bug),撰写此文与大家一起分享成功的喜悦.我也是初学delphi,文中一定存在不少说的不对的地方,还请各位朋友多多指正. 【推荐阅读:多层数据库开发三:创建多层应用程序】 后台用sql server 2000,里面有一个xshetong表用于试验,您可以根据您的实际情况进行调整. 【扩展信息:DBGrid使用全书(四)】 bug再现的方法: 先创建一个数据服务器:新建项目,创建一个远程数据模块,上面放置adoconnection.adodataset.datasetprovider各一,并做好相应设置,其中adodataset的comamndtext留空,并把它的option中的poallowcommandtext设置为true.编译运行. 再创建客户端程序:新建项目,在窗体上放置dcomconnection,连上前面上创建的数据服务器,再放置一个clientdataset,把它的连接设成这里的dcomconnection,并设置它的providername为上面的服务器上的datasetprovider的名字.最后放置datasource与dbgrid各一并作相应设置用于查看结果,再放置一button用于测试. 在button的onclick中写下类似于下面的代码(这里我用了xshetong的表与它的两个字段hth(char 15).gcmc(varchar 100),您可以根据你的实际测试情况进行调整): with clientdataset1 do begin close; commandtext := insert into xshetong(hth, gcmc) values(:hth,:gcmc); params[0].asstring := 12345; params[1].asstring := 会截断的中文字; execute; close; commandtext := select * from xshetong; open; end; 运行程序,点击按钮,看到记录被插入了,可惜结果并不正确,“会截断的中文字”变成了“会截断”,但没有中文的“12345”倒是正确的插入了. bug分析与修复: 为了对照起见,我试着直接用一个adoconnection与adocommand.adotable进行c/s构架测试,结果是正确的,中文字不会被切断.这说明了此bug只在三层构架上出现. 用sql server事件探查器探查提交到sql server上运行的语句,发现两层构架与三层构架的情况有以下不同: 两层构架: ... 下一页