设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1225|回复: 7
打印 上一主题 下一主题

[Access本身] 记录写入问题

[复制链接]
跳转到指定楼层
1#
发表于 2006-7-31 04:02:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有两个表 info 和inftotemp两表的结构完全相同,

info 表中有记录但是其中的成绩字段为空, 想把infotemp中的成绩字段的值一一对应的写入到info 表中,注意:infoetmp表中的记录顺序和info 的记录顺序可能不同。

我用下面的函数来实现:

但是有点小错误,如果两个表中考号(唯一索引)顺序不相同时,成绩采集不完全。望指正:

Public Sub insoure()

Dim rstemp1 As ADODB.Recordset '临时表记录集合
Dim rs1    As ADODB.Recordset '信息表正式集合
Dim totalin1
Dim j
Dim temps1
Dim isin1 '用于表识是否存在重复数据
totalin1 = 0
tatall2 = 0
Set rstemp1 = New ADODB.Recordset
rstemp1.Open "infotemp", CurrentProject.Connection, adOpenDynamic, adLockOptimistic, adCmdTableDirect
Set rs1 = New ADODB.Recordset
rs1.Open "info", CurrentProject.Connection, adOpenDynamic, adLockOptimistic, adCmdTableDirect

'If Not rs.BOF And Not rs.EOF Then
'rs.MoveLast
Do While Not rstemp1.EOF
temps1 = rstemp1("考号")
allnum1 = DCount("*", "info")
'If Not rs1.BOF And rs1.EOF Then
Do While Not rs1.EOF
'检测数据的冗余程度
'If Not rs1.BOF And Not rs1.EOF Then
'rs1.MoveFirst
'rs1.MoveLast
'For i = 1 To allnum1  '只检测条以内的记录
'If Not rs1.BOF Then
inwhat = rs1("考号")
If temps1 = inwhat Then
'存在重复记录时则跳过添加记录这一项目
'MsgBox "该数据已录入,请检查已输入的记录!", vbOKOnly + vbInformation, "提示"
'isin1 = 1 '说明记录存在 对该字段的名称进行修改....查看效果怎么样

rs1!成绩 = rstemp1("成绩")
rs1.Update

totalin1 = totalin1 + 1
'rs1.MovePrevious
rs1.MoveFirst
Exit Do
Else
'rs1.MovePrevious
rs1.MoveNext

'isin1 = 0

End If

'End If
Loop
'End If
tatall2 = tatall2 + 1
rstemp1.MoveNext

Loop
MsgBox "本次采集共输入数据" & totalin1 & "条" & tatall2, , "系统提示"
Set rs1 = Nothing
Set rstemp1 = Nothing

End Sub



[此贴子已经被作者于2006-7-30 21:24:00编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-7-31 04:21:00 | 只看该作者
用更新查询不是更简单吗?

记录中的顺序是没有什么太大的实际意义的,SQL处理记录没有先后顺序之说。

[此贴子已经被作者于2006-7-30 22:09:44编辑过]

3#
 楼主| 发表于 2006-7-31 04:31:00 | 只看该作者
我是作成按钮的形式的,直接点一下就能完成全部的工作, 或者谁有好的方式,请赐教
4#
发表于 2006-7-31 04:51:00 | 只看该作者
把例子放上来。

在按钮中同样可以执行查询的啊!
5#
 楼主| 发表于 2006-7-31 05:25:00 | 只看该作者
例子已经发上去了。请帮忙,多谢了
6#
发表于 2006-7-31 06:11:00 | 只看该作者
方法1:采用更新查询,速度较快,推荐!

Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim strSQL As String
Set conn = CurrentProject.Connection

    strSQL = "UPDATE info INNER JOIN infotemp ON info.考号 = infotemp.考号 SET info.成绩 = [infotemp.成绩];"
    conn.Execute strSQL

MsgBox "采集成功", , "系统提示"
   
    conn.Close
Set conn = Nothing
End Sub


[此贴子已经被作者于2006-7-30 22:13:19编辑过]

7#
发表于 2006-7-31 06:12:00 | 只看该作者
方法2:采用ADO,速度慢,不推荐。

Sub MyInsoure()
Dim conn As New ADODB.Connection
Dim rsTemp As New ADODB.Recordset '临时表记录集合
Dim rs As New ADODB.Recordset  '信息表正式集合
Dim strSQL As String

Set conn = CurrentProject.Connection

strSQL = "SELECT * FROM info;"
rs.Open strSQL, conn, adOpenDynamic, adLockOptimistic
    Do While Not rs.EOF
        strSQL = "SELECT * FROM infoTemp WHERE 考号='" & rs("考号") & "';"
        rsTemp.Open strSQL, conn, adOpenDynamic, adLockOptimistic
            If Not rsTemp.BOF And Not rsTemp.EOF Then
                rs("成绩") = rsTemp("成绩")
                rsTemp.Update
            End If
        rsTemp.Close
        rs.MoveNext
    Loop
rs.Close

Set rsTemp = Nothing
Set rs = Nothing
Set conn = Nothing


MsgBox "采集成功", , "系统提示"


End Sub
8#
 楼主| 发表于 2006-7-31 23:06:00 | 只看该作者
已经测试通过了。多谢了,方法一快很多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-3 01:25 , Processed in 0.085074 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表