1000分的问题!来抢吧!!

Commandor 2003-02-17 01:09:20
近日,我正在做一个三层的东东,用了ado 2.7 + winxp + sql 2000(sp3) + d7 。用 socketconnection来联结。
一个很简单的主从表结构。我用了sql 2000自带的northword数据库来试验以避免自建库带来的不稳定因素。主表suppliers和从表products。appserver端用了2个adodataset,1个datasource来建立主从关联,1个datasetprovider来建立输出dataset。使用的控件属性均使用默认值,在client端用了2个clientdataset来存放显示主从数据集,界面用了2个dbgrid来显示数据。
出现的问题是:
1、如果appserver的datasetprovider的resolvetodataset设为true,那applyupdates时,如只更新主表则一切正常。若只对从表进行更新时,更新错误为:field 'productid' cannot be modified。回回如此。(productid为关联字段)。
2、如果appserver的datasetprovider的resolvetodataset设为false时,那applyupdates时,如只对从表进行更新则一切正常,若只对主表进行更新时,主表记录更新后,新添加记录消失在dbgrid中,此时用close & open clientdataset,refresh clientdataset均看不到新增的记录。但这条记录已很真实的放在了后台数据库中。client却死活都看不到。
3、当datasetprovider可以使用客户端传来的sql语句时,在客户端传递一个sql,却报错,”不能在一个打开的记录集上执行这个操作?!“但同样的架构,换成dbexpress + interbase,一切ok!

经过不断努力,我在后台数据库为access的情况下已经解决了1、2两个问题。其实我也没想到会这么简单:就是把从表的sql语句不要select * ,而必须为具体的一个个的字段,而且,那个自增长字段“productid”不能在从表里面。而且在northword里一应用,全部ok。
但新的问题就是:我在我的自建sql2k数据库上使用时,错误为:主表更新时显示:key violation.从表更新时显示:no corresponding master record find.
同样的程序,后台数据库一换成northword,就没问题了。莫非是我的数据库设计有问题?
这里给出数据库结构的sql:
create table [dbo].[ttraininfo] (
[trainid] [bigint] identity (1, 1) not null ,
[empid] [bigint] not null ,
[trainname] [nvarchar] (50) collate chinese_prc_ci_as not null ,
[traincontent] [nvarchar] (50) collate chinese_prc_ci_as null ,
[kindoftrain] [nvarchar] (50) collate chinese_prc_ci_as null ,
[begintime] [datetime] null ,
[endtime] [datetime] null ,
[trainplace] [nvarchar] (100) collate chinese_prc_ci_as null ,
[trainunit] [nvarchar] (50) collate chinese_prc_ci_as null ,
[score] [char] (10) collate chinese_prc_ci_as null ,
[certificateid] [char] (20) collate chinese_prc_ci_as null
) on [primary]
go

create table [dbo].[thuman] (
[empid] [bigint] identity (1, 1) not null ,
[wid] [nvarchar] (12) collate chinese_prc_ci_as not null ,
[cid] [nvarchar] (21) collate chinese_prc_ci_as null ,
[name] [nvarchar] (10) collate chinese_prc_ci_as not null ,
[usedname] [nvarchar] (10) collate chinese_prc_ci_as null ,
[sex] [char] (2) collate chinese_prc_ci_as null ,
[birthday] [datetime] null ,
[edugrd] [bigint] null ,
[native_place] [nvarchar] (50) collate chinese_prc_ci_as null ,
[worktime] [datetime] null ,
[workage] [int] null ,
[homeaddr] [nvarchar] (100) collate chinese_prc_ci_as null ,
[worder_cadre] [char] (4) collate chinese_prc_ci_as null ,
[joinpartytime] [datetime] null ,
[partystation] [bigint] null ,
[nation] [bigint] null ,
[techpost] [bigint] null ,
[rank] [bigint] null ,
[marriage] [nvarchar] (50) collate chinese_prc_ci_as null ,
[dep] [char] (2) collate chinese_prc_ci_as null ,
[team] [char] (2) collate chinese_prc_ci_as null ,
[stateofemp] [bigint] null ,
[health] [bigint] null
) on [primary]
go
****************
thuman为主表(主键为empid),ttraininfo为从表(主键为trainid)。两表以empid来关联。
这里请哪位能人来捡分:1000分,指出错误,最好是能给出具体代码!绝不食言!
我的E-Mail :Commander@sina.com
...全文
36 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Commandor 2003-02-18
  • 打赏
  • 举报
回复
不会吧,放了一天,连一个回复都没有?1000分啊!!!!

1,593

社区成员

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

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