当用一个ado控件时,操作了一个insert语句,因为数据库中第二个字段中的数据是中文,在执行此语句时,程序报错“字符串右阶段”,只显示了一些乱码,当改为英文数据时,程序正常;将该语句放在sqlserver的查询窗口执行,无论是什么类型的数据,都可以运行,所以我怀疑是dephi的问题。但是又不知如何解决,请各位帮帮忙?

解决方案 »

  1.   

    代码很简单,就是基本的sql操作:insert into xxx(...) values(:....);
      

  2.   

    不可能是delphi 的问题看看你的代码!!!
      

  3.   

    可是将汉字改为英文就绝对正确,而且单引号也是正确运用了,我只是想问一下:抛开代码的可能性外,又没有其他的可能性,各位在用ado时(delphi)的时候是否遇到过类似的这个问题?
      

  4.   

    先从一个表中读出一些数据,存入中间数组(都是字符串类型):
    var stufield:array[1..10] of string;
    ...
    adoquery1.sql.add('select sno,sname... from educant');
    adoquery1.open;
    stufield[0]:=adoquery1.fieldbyname('sno').asstring;
    stufield[1]:=adoquery1.fieldbyname('sname').asstring;
    ..
    然后把这些数据传入insert语句中:
    ...
    adoquery2.sql.add('insert into student values(:data1,:data2,..)');
    adoquery2.parameters[0].value:=stufield[0];
    adoquery2.parameters[1].value:=stufield[1];
    ...
    adoquery2.prepared;
    adoquery2.execsql;运行时程序报错:字符串类型,右截断
    调试时发现凡是中文字符的域在stufield中是正常的,
    但是在adoquery2.parameters[].value中的值就变成了奇怪的字符,而且没有右引号请问各位这是怎么回事?如果代码不对的话应该怎么写?多谢!! 
      

  5.   

    如此的程序写法岂不太麻烦?
    应该这么写:
    var a,b,c:string;With ADOQuery2 do
    begin
        close;
        SQL.text:='insert into tablename(f1,f2,f3) values('''+a+''','''+b+''','+c+')';

        SQL.text:='insert into tablename(f1,f2,f3) select sno,sname,sex from student where 条件';
        execSQL;
    end;
      

  6.   

    改成
    ADOQuery2.Parameters.ParamByName('data1').Value
    试试
      

  7.   

    我都将它设为200了,都不成,不好意思,说句不客气的话,我不是一个新手。我以前用delphi时,只是用bde,那时就不会出现这种情况,而且当时我就听说他的ado的支持不够,所以这次我怀疑是由于的delphi的ado对汉语支持不够。
    我希望用过这方面编程的人给点建议和方法?
      

  8.   

    你说的有这个可能,我没有遇到过。你改一下区域设置或升级Ado吧
      

  9.   

    第一可能是ado版本,第二就是如果使用中文字段,请在字段名外面加[]试试。
      

  10.   

    可能是ado处理参数的时候,对中文的支持不够,要不别用参数了,直接拼字符串吧
      

  11.   

    各位,我用.text:=的方法解决了上面的问题,多谢!!