数据库字段 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;
输入汉字时,汉字被除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;
sql1,sql2:string;
该了,还是不行。
nchar varchar都不行啊。
我的系统 win2000 professional+sql server2000+delphi6.0
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);//这一句解决了汉字被截断问题。结贴。