我用clientdataset去修改一个记录,为什么修改不成功呢?

xdxycx 2003-09-18 01:50:36
我用clientdataset去修改一个记录,为什么修改不成功呢?
用delphi7,sql2000,使用ado2.7
我试了两种方法
一种是用参数形式,我把字符串传过去,他自动把我的字符串截掉了(字母不截掉,中文截掉).当然数据库中的字段是够长的.不知道是什么原因.是不是ado的问题还是bug,我应该怎么解决呢.
二是用fieldbyname直接修改.数据库跟踪显示是发生了回滚.
...全文
39 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdxycx 2003-09-19
  • 打赏
  • 举报
回复
经过一晚的努力问题终于解决,原来是由于在数据库的表的字段中多了一个datatime字段,而这个字段是由getdate自动生成的.把这一字段去掉就没问题的,但还不知道为什么这样.在此谢谢帮我的人们
tiexinliu 2003-09-19
  • 打赏
  • 举报
回复
你说的情况我也遇见过,我想是微软和borland对汉字的编码的不同认识造成的,汉字不要用参数,直接嵌入到sql语句中可以解决这个问题.
xuecswl 2003-09-19
  • 打赏
  • 举报
回复
mark
hiflower 2003-09-18
  • 打赏
  • 举报
回复
我上面的函数可以解决中文字符串作为 ClientDataset 的参数的问题。

对于第二个问题,可在 ClientDataset 的字段的 ProviderFlags 属性中设置 pfInWhere 的状态
KingCrane 2003-09-18
  • 打赏
  • 举报
回复
mark
decem 2003-09-18
  • 打赏
  • 举报
回复
楼上的大虾写的是什么意思呢?看不懂~~~
你在ClientDataSet中的onReconcileError把错误调出来看看哦
showmessage(e.message);
hiflower 2003-09-18
  • 打赏
  • 举报
回复
function ToCDSParamsString(s:string):string;
var
ws:WideString;
i:Integer;
begin
ws:=s;
for i:=1 to Length(ws) do
begin
if Ord(ws[i])>255 then
s:=s+' ';
end;
Result:=s;
end;
xdxycx 2003-09-18
  • 打赏
  • 举报
回复
我看他在更新的时候在where后把整个表的字段都做为条件,有没有办法自己定义几个字段

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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