用clientdataset与adotable进行记录的添加,第一条可以,以后就不可以了,在第一条添加了后用clientdataset与adoquery作了多次查询操作,

明行 2002-03-25 03:40:09
添加的代码如下:
DataModule1.ClientDataSetDW.Active:=false;
DataModule1.ClientDataSetDW.Active:=true;
DataModule1.ClientDataSetDW.Insert;
DataModule1.ClientDataSetDW.FieldByName('单位或部门名称').asstring:=bminformation.text;
DataModule1.ClientDataSetDW.FieldByName('法人或管').asstring:=frname.text;
DataModule1.ClientDataSetDW.FieldByName('部门代码').asstring:=bmnum.text;
DataModule1.ClientDataSetDW.FieldByName('电话').asstring:=telpho.text;
DataModule1.ClientDataSetDW.FieldByName('传真').asstring:=faxnum.text;
DataModule1.ClientDataSetDW.FieldByName('Email').asstring:=email.text;
DataModule1.ClientDataSetDW.FieldByName('部门职能描述').asstring:=memostring;
DataModule1.ClientDataSetDW.Post;
DataModule1.ClientDataSetDW.applyupdates(0);

没有什么错嘛!只是去看表里面就没有数据!
...全文
146 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
明行 2002-03-25
  • 打赏
  • 举报
回复
rmy(小任) 老兄
你知道为什么不早点来!!!!!!!!!!!!
rmy 2002-03-25
  • 打赏
  • 举报
回复
解决了吗,来晚了,是不是表里面字段设置时出的问题,比如字段中设置了不能为空属性,我以前也遇到过。
明行 2002-03-25
  • 打赏
  • 举报
回复
我自己解决了!

是SQLServer数据库表中的设置问题!
明行 2002-03-25
  • 打赏
  • 举报
回复
没有人了呀,都走了吗?
明行 2002-03-25
  • 打赏
  • 举报
回复
我的主键是“部门代码"
单位中的“部门代码”我随便给了个别人不会给的字符串.
lyxinfo 2002-03-25
  • 打赏
  • 举报
回复
那还真的奇怪了,你的表主键是什么。
要撤了,晚上再帮你看。
呵呵,如果能把代码发过来,可以帮你调调。
明行 2002-03-25
  • 打赏
  • 举报
回复
不一样的,第一次与二次有点不同,我是把单位名称与部门名称放在一个表中的。
问题是为什么第一次可以,第二次就不可以?
lyxinfo 2002-03-25
  • 打赏
  • 举报
回复
我怎么看你好像两次插入了一样的数据?
明行 2002-03-25
  • 打赏
  • 举报
回复
没有,它就是select,所以我也奇怪呀!

而且后面也没有了!

上面没有错的代码的是这样的:
sp_executesql N'insert into 本单位信息库
(单位或部门名称, 部门代码, 税务登记号, 工商登记号, 法人或主管, 开户行及账号, 地址, 邮编, 电话, 传真, Email, 单位网页)
values
(@P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12)
', N'@P1 varchar(60),@P2 varchar(6),@P3 varchar(18),@P4 varchar(18),@P5 varchar(8),@P6 varchar(50),@P7 varchar(50),@P8 char(6),@P9 varchar(14),@P10 varchar(20),@P11 varchar(30),@P12 varchar(40)', '绵阳每天xecu', 'bdwdxx', 'dfgdfg', 'dgdfgd', 'dfgfd', 'dfgdf', 'dfgdfgd', 'gdf', 'gfdgdf', 'fdgdg', 'dfgdfg', 'dfgdfgdfg'
lyxinfo 2002-03-25
  • 打赏
  • 举报
回复
呵呵,还要往后看,'sdfs'就是他的值,这个Sql是动态构造的,后面应该有每个参数
(就是@P1等等)的值。
不过应该是sp_executesql N'INSERT INTO ...这样的啊,你那里怎么会是Select,贴错了,你这个是查询
明行 2002-03-25
  • 打赏
  • 举报
回复
没有错的代码:
if (application.MessageBox('你确认你的填写正确无误了吗?','确认?',MB_OKCANCEL + MB_DEFBUTTON1)=IDOK)
then begin
{databaseok.Enabled:=false;
cleanwrite.Enabled:=false;}
DataModule1.ClientDataSetDW.Active:=false;
DataModule1.ClientDataSetDW.Active:=true;
DataModule1.ClientDataSetDW.Insert;
DataModule1.ClientDataSetDW.FieldByName('部门代码').asstring:='bdwdxx';
DataModule1.ClientDataSetDW.FieldByName('单位或部门名称').asstring:=dwname.text;
DataModule1.ClientDataSetDW.FieldByName('税务登记号').asstring:=taxnum.text;
DataModule1.ClientDataSetDW.FieldByName('工商登记号').asstring:=gsnum.text;
DataModule1.ClientDataSetDW.FieldByName('法人或主管').asstring:=frname.text;
DataModule1.ClientDataSetDW.FieldByName('开户行及账号').asstring:=blaknameandnum.text;
DataModule1.ClientDataSetDW.FieldByName('地址').asstring:=addass.text;
DataModule1.ClientDataSetDW.FieldByName('邮编').asstring:=addassnum.text;
DataModule1.ClientDataSetDW.FieldByName('电话').asstring:=telpho.text;
DataModule1.ClientDataSetDW.FieldByName('传真').asstring:=faxnum.text;
DataModule1.ClientDataSetDW.FieldByName('Email').asstring:=email.text;
DataModule1.ClientDataSetDW.FieldByName('单位网页').asstring:=interntehome.text;
DataModule1.ClientDataSetDW.Post;
DataModule1.ClientDataSetDW.applyupdates(0);
MessageBoxFormData:=TmessageboxFormData.create(application);
MessageBoxFormData.Caption:='提示信息!';
MessageBoxFormData.RxLabel1.Caption:='单位信息初始化成功';
MessageBoxFormData.showmodal;
MessageBoxFormData.Update;
MessageBoxFormData.Free;
end;


有错的代码:

if (application.MessageBox('你确认你的填写正确无误了吗?','确认?',MB_OKCANCEL + MB_DEFBUTTON1)=IDOK)
then begin
linememovial:=MemoLinesVisible(bmzzmemo);
if linememovial<>0
then for i:=0 to linememovial-1 do memostring:=memostring+bmzzmemo.lines[i];
DataModule1.ClientDataSetDW.Active:=false;
DataModule1.ClientDataSetDW.Active:=true;
DataModule1.ClientDataSetDW.Append;
DataModule1.ClientDataSetDW.FieldByName('单位或部门名称').asstring:=bminformation.text;
DataModule1.ClientDataSetDW.FieldByName('法人或主管').asstring:=frname.text;
DataModule1.ClientDataSetDW.FieldByName('部门代码').asstring:=bmnum.text;
DataModule1.ClientDataSetDW.FieldByName('拼音简码').asstring:=byjmbmname.text;
DataModule1.ClientDataSetDW.FieldByName('五笔简码').asstring:=wbjmbmnane.text;
DataModule1.ClientDataSetDW.FieldByName('电话').asstring:=telpho.text;
DataModule1.ClientDataSetDW.FieldByName('传真').asstring:=faxnum.text;
DataModule1.ClientDataSetDW.FieldByName('Email').asstring:=email.text;
DataModule1.ClientDataSetDW.FieldByName('部门职能描述').asstring:=memostring;
DataModule1.ClientDataSetDW.Post;
DataModule1.ClientDataSetDW.applyupdates(0);
DataModule1.ClientDataSetDW.CancelUpdates;
{DataModule1.ClientDataSetDW.Close;
DataModule1.ClientDataSetDW.Open;
DataModule1.ClientDataSetDW.InsertRecord([bminformation.text,bmnum.text,byjmbmname.text,wbjmbmnane.text,Null,Null,frname.text,Null,Null,Null,telpho.text,faxnum.text,email.text,Null,memostring]);
DataModule1.ClientDataSetDW.Post;
DataModule1.ClientDataSetDW.applyupdates(-1);}
MessageBoxFormData:=TmessageboxFormData.create(application);
MessageBoxFormData.Caption:='提示信息!';
MessageBoxFormData.RxLabel1.Caption:='单位部门信息添加成功';
MessageBoxFormData.showmodal;
MessageBoxFormData.Update;
MessageBoxFormData.Free;
end;
明行 2002-03-25
  • 打赏
  • 举报
回复
lyxinfo()
我看了一下,你说的没错,的确是传过去的值有问题,可是我写的上面的代码,怎么把传过去的值都不对了呢?什么原因?

sp_executesql N'select
单位或部门名称,
部门代码,
税务登记号,
工商登记号,
法人或主管,
开户行及账号,
地址,
邮编,
电话,
传真,
Email,
单位网页,
部门职能描述
from 本单位信息库
where
部门代码 = @P1{这是什么哟,明明是汉字的}
', N'@P1 varchar(6)', 'sdfs'
lyxinfo 2002-03-25
  • 打赏
  • 举报
回复
通过SQL进行观察的SQL与insert
是有关系的,中间那一句。
sp_executesql ...
就是是构造的数据库操作的Sql语句,那里应该可以看到传递过去的值。
那里如果没有问题,就应该不会有错,否则真的只有看你的程序了。
一笑天下而已 2002-03-25
  • 打赏
  • 举报
回复
没辙了,除了看你全部的代码!
明行 2002-03-25
  • 打赏
  • 举报
回复
yexiao(叶开)

我试了一下你的方法,还是不行,没有出错提示,但数据表中没有记录。
明行 2002-03-25
  • 打赏
  • 举报
回复
各位,我用了InsertRecord方式后,提示出错:说数据设置没有在edit 与 insert 模式。


一笑天下而已 2002-03-25
  • 打赏
  • 举报
回复
我以前也出现过这种情况!
你用
DataModule1.ClientDataSetDW.append;
.
.
.
.
DataModule1.ClientDataSetDW.applyupdates(0);
DataModule1.ClientDataSetDW.CancelUpdates;
试试吧!

明行 2002-03-25
  • 打赏
  • 举报
回复
不会有什么错的!

我通过SQL进行观察发现它的SQL与我的insert一点关系都没有!:
第一句:select * from 本单位信息库
最后一句:IF @@TRANCOUNT > 0 COMMIT TRAN
lyxinfo 2002-03-25
  • 打赏
  • 举报
回复
应该没有什么问题啊,是不是你添加的数据没有通过服务器端对数据的有效性验证。
比如域完整性,引用完整性等,加一个TReconcileErrorForm
在ONReconcileError事件里加上
Action := HandleReconcileError(DataSet, UpdateKind, E);
看看是不是有什么错误
一笑天下而已 2002-03-25
  • 打赏
  • 举报
回复
这两种操作共用了什么组件?
加载更多回复(12)

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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