急死人了的难题!在线等待,如何实现一个表的数据更新另一个表的数据? (100分)

L

lcl800

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现一个表的数据更新另一个表的数据?

数据库:ADO+ACCESS
总表:xm fs1 fs2 fs3 (一个学生的各门课程成绩)
由若干分表,结构 xm fs(每个科任老师提交的数据,每科每班一个数据库)
如何实现自动将成绩汇总到总库中?望不吝赐教!

 
SQL语句来汇总
代码实现更新
 
先在总表根据学生中插入空记录
insert into 总表 (xm fs1 fs2 fs3) select xm,fs1=0,fs2=0,fs3=0 from 学生基本信息表

然后
update 总表 set fs1=分表.fs1 from 分表 where 分表.xm=总表的项目.xm
update 总表 set fs2=分表.fs2 from 分表 where 分表.xm=总表的项目.xm

。。。。
 
tomljh:
谢谢您的回答!
按照您的方法,
with adoquery1 do begin
close;
sql.Text :='update cj set zz=zzk.zf'
+' from zzk where ksbh=cj.ksbh';
execSQL;
end;


运行时出现如下错误:


---------------------------
Debugger Exception Notification
---------------------------
Project hc.exe raised exception class EOleException with message
'语法错误 (操作符丢失) 在查询表达式 'zzk.zf from cj' 中。'.
Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
 
如果XM是唯一的那么应该不是一件很困难的事
如果科目也是已知的,我想一句话就可以了
如果成绩单口中已有人员信息,(更新)
update m
set m.fs1=a.fs
,m.fs2=b.fs
,m.fs3=c.fs
from ReportCard m
left outer join subject1 a on m.xm=a.xm
left outer join subject2 b on m.xm=b.xm
left outer join subject3 c on m.xm=c.xm

如果成绩单中没有人员信息,则
insert into ReportCard(xm,fs1,fs2,fs3)
select m.xm,a.fs,b.fs,c.fs
from ReportCard m
left outer join subject1 a on m.xm=a.xm
left outer join subject2 b on m.xm=b.xm
left outer join subject3 c on m.xm=c.xm

如果成绩单表不存在
select m.xm,a.fs as fs1 ,b.fs as fs2,c.fs as fs3
into ReportCard
from ReportCard m
left outer join subject1 a on m.xm=a.xm
left outer join subject2 b on m.xm=b.xm
left outer join subject3 c on m.xm=c.xm

 
blackant:
谢谢您的回答!
上述代码在delphi+access中好像不行,是SQL server?
 
对不起,我理解错了,我想问一下你的总表中的xm字段是什么意思,是学生的id号吗?
你的总表是指一个学生一个汇总表吗?
分表中的xm与总表中的xm是两个表之间的关联吗??
 
我把政治课的成绩zzk.zf更新到总成绩表的政治课中中cj.zz,
ksbh:学号,主键
写了下列代码
with adoquery1 do begin
close;
sql.Text :='update cj set cj.zz=zzk.zf'
+' from cj ,zzk where cj.ksbh=zzk.ksbh';
execSQL;
end;
运行时出现如下错误:
---------------------------
Debugger Exception Notification
---------------------------
Project hc.exe raised exception class EOleException with message
'语法错误 (操作符丢失) 在查询表达式 'zzk.zf from cj' 中。'.
Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
 
是不是,Acces不支持这样的语法,在Sql server 2000中是正确的
 
tomljh:
xm字段学生的id号
总表是指一个学生一个汇总表
分表中的xm与总表中的xm是两个表之间的关联??但我没有建立, 如何建立关联?
 
我认为你应该更改你的数据库设计,应该把结构相同的数据放在一个表中!
就不用这么费力了,不过说真的数据库设计也应该做到这样的!!!!!!
 
misxjq:
分表与总表的字段名称可以一样,如主表 xh(学号)xm(姓名) zz(政治) yw(语文) sx
分表也可以是一样的结构。
问题的关键是:每个分表都只包含主表数据的一部分!
如表1 可能只有语文成绩,
如表2 可能只有数学成绩
如表3 可能只有政治成绩
如果每个表的字段有40个,如何写SQL语句?
 
to: sql.Text :='update cj set cj.zz=zzk.zf'
+' from cj ,zzk where cj.ksbh=zzk.ksbh';
你改为:sql.Text:='update cj set cj.zz=zzk.zf from zzk where zzk.ksbh=cj.ksbh'
试试。我的这里没有安装Access:)
 
如果你的分表一样长应该好办,
但Access 的 SQl 语法有限。
 
还是不行
 
还是不行!
 
insert into 总表 select * from fs1
 
用程序写最保险
 
Access与sql server的语法不一样,在Access中更新语句应该这样写。
update table1 a,table b set a.fd1=b.fd1 where a.id=b.id
 
顶部