数据库字段 char(50) employeeName,char(200) address 这两个字段出现以上问题。
输入汉字时,汉字被除2截断了,而字母没有问题。 
为什么? 源代码还是数据库的问题?
源代码如下:
    begin
            sql1:='insert into employee(employeeNo,employeeName,sex,birthday,address,joindate,dimissiondate,phone,status,deptNo,positionNo,a,b,c,d)';
            sql2:=' values(:employeeNo,:employeeName,:sex,:birthday,:address,:joindate,:dimissiondate,:phone,0,:deptNo,:positionNo,0,0,0,0)';
            adoquery1:=TAdoQuery.Create(self);
            adoquery1.Connection:=adoconnection1;
            adoquery1.close;
            
            adoquery1.SQL.Clear;
            adoquery1.SQL.Add(sql1+sql2);            adoquery1.Parameters.Clear;            adoquery1.Parameters.AddParameter;
            adoquery1.Parameters[0].Name:='employeeNo';
            adoquery1.Parameters[0].DataType:=ftstring;
            adoquery1.Parameters[0].Direction:=pdinput;
            adoquery1.Parameters[0].Value:=trim(employeeNo.Text);
            
            adoquery1.Parameters.AddParameter;            
            adoquery1.Parameters[1].Name:='employeeName';
            adoquery1.Parameters[1].DataType:=ftstring;
            adoquery1.Parameters[1].Direction:=pdinput;
            adoquery1.Parameters[1].Value:=trim(name.Text);
            Application.MessageBox(PChar(trim(name.text)),'错误提示',MB_OK);
           //能获取完整的汉字。为什么插入数据库就被截取了
        
            adoquery1.Parameters.AddParameter;
            adoquery1.Parameters[2].Name:='sex';
            adoquery1.Parameters[2].DataType:=ftstring;
            adoquery1.Parameters[2].Direction:=pdinput;
            adoquery1.Parameters[2].Value:=trim(sex.Text);      
            
            adoquery1.Parameters.AddParameter;            
            adoquery1.Parameters[3].Name:='birthday';
            adoquery1.Parameters[3].DataType:=ftstring;
            adoquery1.Parameters[3].Direction:=pdinput;
            adoquery1.Parameters[3].Value:=trim(year.Text)+'-'+trim(month.text)+'-'+trim(day.text);            adoquery1.Parameters.AddParameter;            
            adoquery1.Parameters[4].Name:='address';
            adoquery1.Parameters[4].DataType:=ftstring;
            adoquery1.Parameters[4].Direction:=pdinput;
            adoquery1.Parameters[4].Value:=trim(address.Text);            adoquery1.Parameters.AddParameter;
            adoquery1.Parameters[5].Name:='joindate';
            adoquery1.Parameters[5].DataType:=ftstring;
            adoquery1.Parameters[5].Direction:=pdinput;
            adoquery1.Parameters[5].Value:=trim(year2.Text)+'-'+trim(month2.text)+'-'+trim(day2.text);;                      
            
            adoquery1.Parameters.AddParameter;
            adoquery1.Parameters[6].Name:='dimissiondate';
            adoquery1.Parameters[6].DataType:=ftstring;
            adoquery1.Parameters[6].Direction:=pdinput;
            adoquery1.Parameters[6].Value:='0';
            
            adoquery1.Parameters.AddParameter;            
            adoquery1.Parameters[7].Name:='phone';
            adoquery1.Parameters[7].DataType:=ftstring;
            adoquery1.Parameters[7].Direction:=pdinput;
            adoquery1.Parameters[7].Value:=trim(phone.Text);            adoquery1.Parameters.AddParameter;            
            adoquery1.Parameters[8].Name:='deptNo';
            adoquery1.Parameters[8].DataType:=ftstring;
            adoquery1.Parameters[8].Direction:=pdinput;
            adoquery1.Parameters[8].Value:=copy(trim(department.text),1,2);            adoquery1.Parameters.AddParameter;
            adoquery1.Parameters[9].Name:='positionNo';
            adoquery1.Parameters[9].DataType:=ftstring;
            adoquery1.Parameters[9].Direction:=pdinput;
            adoquery1.Parameters[9].Value:=copy(trim(position.Text),1,2);            adoquery1.ExecSQL;
            adoquery1.Close;            Application.MessageBox('新员工添加成功!','信息提示',MB_OK);
        //成功则
        address.text:=''   ;
        day2.text:=''          ;
        day.text:=''  ;
        department.text:=''  ;
        month2.text:=''  ;
        month.text:=''          ;
        name.text:=''          ;
        phone.text:=''          ;
        position.text:=''  ;
        sex.text:=''  ;
        year2.text:=''          ;
        year.text:=''    ;
        employeeNo.text:=''     ;
        name.SetFocus;
    end;

解决方案 »

  1.   

    晕啊,你把char换成nvarchar试试呢?
      

  2.   

    var     adoquery1:TAdoQuery;
            sql1,sql2:string;
      

  3.   

    "晕啊,你把char换成nvarchar试试呢?"
    该了,还是不行。
    nchar varchar都不行啊。
    我的系统 win2000 professional+sql server2000+delphi6.0
      

  4.   

    长度不够也不能这么巧就是截取一半啊,晕。你还有没有其他代码,比如设置字符串长度的地方?如果是中文字符串用widestring()转换一下试试。
      

  5.   

    谢谢各位。问题已解决,办法如下:    
            adoquery1.Parameters.AddParameter;            
                adoquery1.Parameters[1].Name:='employeeName';
                adoquery1.Parameters[1].DataType:=ftstring;
                adoquery1.Parameters[1].Direction:=pdinput;
                adoquery1.Parameters[1].Value:=trim(name.Text);
                adoquery1.Parameters.ParamByName('employeeName').Size:=length(adoquery1.Parameters[1].value);//这一句解决了汉字被截断问题。结贴。