用存储过程插入记录,为什么插入的汉字到数据库里都少了一半(8个字只有4个字进数据库)

Daviescai 2004-03-22 05:00:44
用midas做的三层。字母插入到数据库正常,可是汉字却会少了一半。例如输入8个进入数据库的只有4个,输入六个进入数据库的只有3个。
存储过程用查询分析器测试过,输入正常。而且转做两层,插入汉字也正常。但是三层就是少一半的汉字。是哪里类型不对吗?大家有遇到过这样的问题吗?这两天急着解决这个问题。大哥门帮帮忙。(我初步怀疑是.asstring的问题,可是不知道解决的方法).还有同样是三层,如果不用存储过程用dbedit利clientdataset的applyupdate插入汉字正常。
procedure Tfrmprecnt.Button1Click(Sender: TObject);
begin
try
Datamodule1.PreCntD.Close;
DataModule1.PreCntD.Params.ParamByName('@YS_DEBH').AsString:=dhbh.Text;
DataModule1.PreCntD.Params.ParamByName('@YS_XMMC').AsString:=xmbh.Text;
DataModule1.PreCntD.Params.ParamByName('@YS_SL').AsFloat:=StrToFloat(sl.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_DW').AsString:=dw.Text;
DataModule1.PreCntD.Params.ParamByName('@YS_DJ_ZCF').AsFloat:=StrToFloat(djzc.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_DJ_GZ').AsFloat:=StrToFloat(djgz.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_DJ_JXF').AsFloat:=StrToFloat(djjx.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_HJ_JXF').AsFloat:=StrToFloat(hjzc.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_HJ_GZ').AsFloat:=StrToFloat(hjgz.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_HJ_JXF').AsFloat:=StrToFloat(hjjx.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_LB').AsString:=lb.Text;
DataModule1.PreCntD.Params.ParamByName('@YS_Date_N').AsInteger:=StrToInt(n.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_Date_Y').AsInteger:=StrToInt(y.Text);
DataModule1.PreCntD.Params.ParamByName('@YS_Date_R').AsInteger:=StrToInt(r.Text);
DataModule1.PreCntD.Execute;
DataModule1.PreCntDlook.Close;
DataMoDule1.PreCntDlook.Open;
DataModule1.PreCntDlook.Last;
dhbh.Clear;
xmbh.Clear;
sl.Clear;
dw.Clear;
djzc.Clear;
djgz.Clear;
djjx.Clear;
hjzc.Clear;
hjgz.Clear;
hjjx.Clear;
except
on EConvertError do showmessage('数量价格等请输入数字');
end;
end;
...全文
117 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickeybird888 2004-03-22
  • 打赏
  • 举报
回复
要理解这个原因得先理解DELPHI和数据库的存储编码方式 。在BORLAND设计中,其编
码用的是ANSI STRING方式,而大多数的数据库厂商都采用的是UNICODE编码方式,这也是
为适应INTERNET发展的需要。而ADO是MS 发展出来的,DELPHI在调用ADO时,只是对其进行
简单的包装,内核还是用MS的那一套,所以在使用ADO时就存在着数据转换问题,尤其是对
非ASCII字符来说。所以要解决你的问题,可以在应用程序服务器的DataSetProvider的
Before事件中进行如下处理
procedure TAppLoginServer_new.DSPQueryBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
with ADOQuery do begin
Parameters.ParamByName('@t3').Size := Length(Parameters.ParamByName('@t3').value)+1;
end;
end;
经过这样处理后,就不会有问题了。


2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧