三层结构应用服务器中的AdoQuery1的sql为: select * from table1 where mc=:@mc , 其中mc字段是varchar(60)类型.在客户端有一个clientDataSet1通过DataSet Provider 与AdoQuery1相联, 当使用如下代码对参数赋值时发现如下问题:
 with clientdataset1 do
 begin
   params.parameterByName('@mc').value='非技术问题';
   open;
 end; 但执行结果是:记录集为空. 通过sql profile跟踪,发现传递给sql server 的sql 语句及其参数都是以'N带头的,其中对参数@mc只是定义为varchar(5) , 使用双字节字符集进行传递参数.
我如何改变delphi这种内定行为??????

解决方案 »

  1.   

    1.params.parameterByName('@mc').value='非技术问题';
    改成 params.parameterByName('@mc').value=''''+'非技术问题'+'''';
    意思是说要作为一个字符串传过去才行。
    2.最好是把查询语句打印出来看看。
    可以用如下方法:
    如:
    s := 'select * from t where id=%d and name=''%s'' ';
    s := format(s,[varID,varName]);
    然后把语句放入cs中。
    这样可以在调试的时候把查询语句用 ctrl+f7 弄出来放到查询分析器中执行一下。我也没有真正的作过三层软件,好久以前看过一些。
    以上几点有可能不对,敬请参考。