快来看看这个数据库问题,很有趣。

hongtao924 2001-12-11 06:43:57
VB6+ACCESS2000
有两张表结构如下:
A表
编号 姓名  次数
001 张三  0    
002 李四 0
003 王五 0
004 小七 0

B表
编号  姓名  日期  迟到  
001  张三   略   3
003  王五   略   2
001  张三   略   1

问题:
如何将B表中的数据更新到A表中去,并使它们编号对应
通过更新需达到的目的如下: 
A表
编号 姓名  次数
001 张三   4  
002 李四 0
003 王五 2
004 小七 0

能帮我解决吗?谢谢
...全文
146 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongtao924 2001-12-13
  • 打赏
  • 举报
回复
能调试了给我吗?我自己老是调试不好
hongtao924 2001-12-12
  • 打赏
  • 举报
回复
谢谢你们,我先试试。
hydnoahark(诺亚方舟)你是不是斑竹?如果不是,如果有选举的话,我投你两票
wfzn 2001-12-12
  • 打赏
  • 举报
回复
这样不可以吗?
注:zn为数据源名,T1和T2分别为这两个表的名字
Option Explicit
Dim conn As New ADODB.Connection
Dim Rs1 As New ADODB.Recordset
Dim Rs2 As New ADODB.Recordset

Private Sub Command1_Click()
conn.Open "dsn=zn"
Dim num As Integer
Dim tt As String
Rs1.Open "t1", conn, adOpenDynamic, adLockBatchOptimistic

Rs1.MoveFirst

Do While Not Rs1.EOF

Rs2.Open "select sum(迟到) from t2 where 编号='" & Rs1(0) & "'", conn, adOpenDynamic, adLockBatchOptimistic
Rs2.MoveFirst
If IsNull(Rs2(0)) Then
num = 0
Else
num = Rs2(0)
End If
Rs1(2) = num
Rs1.UpdateBatch adAffectCurrent
Rs1.MoveNext
Rs2.Close
Loop

Rs1.Close
conn.Close
End Sub
hydnoahark 2001-12-12
  • 打赏
  • 举报
回复
修改一下
update A表 set A表.次数=DD.TotalCD
from A表
inner join
(
select AA.编号,sum(迟到) as TotalCD from A表 as AA
inner join B表 as BB
on AA.编号=BB.编号
group by AA.编号,AA.姓名
) as DD
on A表.编号=DD.编号
hongtao924 2001-12-12
  • 打赏
  • 举报
回复
斑竹哪去了?
hongtao924 2001-12-12
  • 打赏
  • 举报
回复
这道题很难吗?有人帮助我吗?
hongtao924 2001-12-11
  • 打赏
  • 举报
回复
还是不对,
先一个SELECT语句返回一个我需要的记录
再嵌套一个SQL语句时,WHERE怎么写
BASS 2001-12-11
  • 打赏
  • 举报
回复
呆呆哥,你真帮,我要想你学习!
我们可以先做个朋友么?

sonicdater 2001-12-11
  • 打赏
  • 举报
回复
那只是 一个 例子。 你用代码 遍历 一下。 把 姓名="张三" 换为 姓名=strName

再 根据 strName 执行 上面的 语句。

懂 我的意思吗?
hongtao924 2001-12-11
  • 打赏
  • 举报
回复
姓名="张三"
那我的人名有1000个不是要写1000个张三出来呀.
好像不对哦
sonicdater 2001-12-11
  • 打赏
  • 举报
回复
你在 试我的这个:

strSQL = " Select Sum(迟到) From B where 姓名='张三'"
'如果 你的 ‘次数’字段的 类型 是 数字 ,则:

strSQL = " Update A Set 次数 =" & strSQL & " Where 姓名='张三'"

hongtao924 2001-12-11
  • 打赏
  • 举报
回复
提示语法不对.
还有AA BB CC totalcd 到底是取的什么别名呀?

hongtao924 2001-12-11
  • 打赏
  • 举报
回复
次数 迟到字段都是数字型
其它为字符型

谢谢诺亚方舟,我马上试一下
hydnoahark 2001-12-11
  • 打赏
  • 举报
回复
一句SQL搞定:
update A表 set A表.次数=DD.TotalCD
from A表
inner join
(
select AA.编号,isNull(sum(迟到),0) as TotalCD from A表 as AA
left join B表 as BB
on AA.编号=BB.编号
group by AA.编号,AA.姓名
) as DD
on A表.编号=DD.编号

sonicdater 2001-12-11
  • 打赏
  • 举报
回复
哦。 不好意思。没看清 题。

mis98ZB 2001-12-11
  • 打赏
  • 举报
回复
楼上的,不对啊!
Count(姓名算出来是有迟到的天数,不是迟到的次数——一天可以迟到多次。
sonicdater 2001-12-11
  • 打赏
  • 举报
回复
FieldValue = "张三"

strSQL = " Select Count(姓名) From B where 姓名='张三'"
'如果 你的 ‘次数’字段的 类型 是 数字 ,则:

strSQL = " Update A Set 次数 =" & strSQL & " Where 姓名='张三'"

'如果 你的 ‘次数’字段的 类型 是 文本 ,则:

strSQL = " Update A Set 次数 ='" & strSQL & "' Where 姓名='张三'"

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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