Office中国论坛/Access中国论坛
标题: 记录写入问题 [打印本页]
作者: des 时间: 2006-7-31 04:02
标题: 记录写入问题
有两个表 info 和inftotemp两表的结构完全相同, [attach]19368[/attach]
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
[attach]19369[/attach]
[此贴子已经被作者于2006-7-30 21:24:00编辑过]
作者: fan0217 时间: 2006-7-31 04:21
用更新查询不是更简单吗?
记录中的顺序是没有什么太大的实际意义的,SQL处理记录没有先后顺序之说。
[此贴子已经被作者于2006-7-30 22:09:44编辑过]
作者: des 时间: 2006-7-31 04:31
我是作成按钮的形式的,直接点一下就能完成全部的工作, 或者谁有好的方式,请赐教
作者: fan0217 时间: 2006-7-31 04:51
把例子放上来。
在按钮中同样可以执行查询的啊!
作者: des 时间: 2006-7-31 05:25
例子已经发上去了。请帮忙,多谢了
作者: fan0217 时间: 2006-7-31 06:11
方法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编辑过]
作者: fan0217 时间: 2006-7-31 06:12
方法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
作者: des 时间: 2006-7-31 23:06
已经测试通过了。多谢了,方法一快很多
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |