请问各位朋友,我用VB6.0向Oracle10中文版数据库表增加记录时,某字段为char类型,长度为20,无法向里面保存任何汉字,一个汉字都无法保存,提示:ORA-12899值太大(实际值28,最大值20),但在Oracle客户端管理控制台是可以维护和保存汉字的,请教各位是什么原因呢?

解决方案 »

  1.   

    你插入的字符过长了,看看VB中的sql打印出来是个什么样子?
      

  2.   

    如果数据库的编码格式是utf-8,你可以显式指定该字段能保存20个字符,不管是英文还是汉字,只要定义的时候col_name char(20 char) 就ok
      

  3.   

    不是过长的问题,我就是保存一个汉字都不行的,数据库编码是CHS gb2312,请高人继续指点啊!
      

  4.   

    把sql打印出来放到sqlplus里面能插入汉字吗?是不是程序里面对应的sql搞错啦?
      

  5.   

    我测试了,在VB6里用SQL语句可以插入和修改,但用记录集就无法实现:
    注:t1表里有一条记录,dbconn:是ADO的数据库连接对象。
    1、记录集(这种方式就不行,提示:ORA-12899值太大(实际值28,最大值20),)
    dim rs as new adodb.recordset
    rs.open "select * from t1",dbconn,adOpenStatic, adLockOptimistic
    rs.movefirst
    rs!col1="汉字"
    rs.update
    rs.close2、命令语句(这种方式就可以)
    dbconn.execute "update t1 set col1='汉字'"请各位朋友给予解答,另外请问SQL语句里如何访问特殊字段名称啊?例如:字段名称为:a-b
    我是这样写的:dbconn.execute "update t1 set [a-b]='汉字'"
    但报错,提示字段名称不对,但这种写法在Sql Server里是可以的,Oracle里不行,请告之是什么问题呢?
      

  6.   

    rst.CursorLocation = adUseClient
    加这个看看
    我的代码
    可以执行
        Dim cn As New ADODB.Connection
        Dim rst As New ADODB.Recordset    '连接到数据库
        With cn
            .CursorLocation = adUseClient
            .CommandTimeout = 10
            .ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=jxc;Persist Security Info=True;User ID=jxc;Data Source=XE"
            .Open
        End With    rst.CursorLocation = adUseClient
        rst.Open "select * from emp", cn, adOpenStatic, adLockOptimistic
        rst.movefirst
        rst!empid = "胡仕强"
        rst!bm = "资讯部"
        rst.Update
        rst.Close
        cn.Close
        Set rst = Nothing
        Set cn = Nothing
      

  7.   

    这样也可以啊
        Randomize   ' 对随机数生成器做初始化的动作。
        
        rst.CursorLocation = adUseClient
        rst.Open "select * from emp", cn, adOpenStatic, adLockOptimistic
        'rst.movefirst
        rst.AddNew
        
        rst!empid = "胡仕强" & Int((10 * Rnd) + 1)
        rst!bm = "资讯部"
      

  8.   

    hlm750908这位朋友,你的rst!empid和rst!bm字段是char类型吗?,我的是char类型的,我加rst.CursorLocation = adUseClient这句还是不行啊
      

  9.   

    我是varchar2吧
    资料库已经删除了
      

  10.   

    varchar2当然没问题了,可是我的是char类型的就不行了。另外请问SQL语句里如何访问特殊字段名称啊?例如:字段名称为:a-b 
    我是这样写的:dbconn.execute "update t1 set [a-b]='汉字'" 
    但报错,提示字段名称不对,但这种写法在Sql Server里是可以的,Oracle里不行,请告之是什么问题呢?
      

  11.   

    char类型会自动补空格,试下把前后的空格都去掉看能不能插入。使用trim()函数试试