Office中国论坛/Access中国论坛

标题: 关于excel保存数据到access中,设置成主键报错,帮助看看 [打印本页]

作者: yanwei82123300    时间: 2014-1-28 14:01
标题: 关于excel保存数据到access中,设置成主键报错,帮助看看
关于excel保存数据到access中
请大家看看附件中的例子是,excel保存数据到access中但是有一个问题如果我将数据中的“用户编号”字段设置成主键,为了防止出现重复数据,但是在EXCEL中操作就会报错,请大家帮助修改一下代码,谢谢
作者: koutx    时间: 2014-1-28 15:36
db.mdb的表“用户表”中的“用户编号”字段,设为了主键且设为无重复,而该表中已存在用户编号为1001、1002、1003、1004的四条记录,所以再按保存时因出现重复而报错如,即再新加入的记录必须是编号大于“用户表”中现有最大用户编号1004的无重复记录才行。
作者: yanwei82123300    时间: 2014-1-28 15:59
koutx 发表于 2014-1-28 15:36
db.mdb的表“用户表”中的“用户编号”字段,设为了主键且设为无重复,而该表中已存在用户编号为1001、1002 ...

koutx 老师我明白,但是如果不小心操作呢?我想如何添加一个代码来提示“相关数据已经存在,不能重复”这个提示语句来替换系统的错误提示,谢谢
作者: koutx    时间: 2014-1-28 17:46
照下面改一下试试:
Private Sub CommandButton1_Click()
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim rst2 As New ADODB.Recordset
    Dim sq1 As String
    Dim sqlM As String
    Dim x As Long
    x = [a65536].End(xlUp).Row
   
    cnn.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.Path & "\db.mdb"
    sq1 = "select * from 用户表"
    sqlM = "select Max(用户编号) From 用户表"
    rst.Open sq1, cnn, adOpenKeyset, adLockOptimistic
   
    For i = 2 To x
        rst2.Open sqlM, cnn, adOpenKeyset, adLockOptimistic
        If Range("a" & i) > rst2.Fields(0) Then
            rst.AddNew
            rst.Fields("用户编号") = Range("a" & i)
            rst.Fields("姓名") = Range("b" & i)
            rst.Fields("年龄") = Range("c" & i)
            rst.Fields("基本工资") = Range("d" & i)
            rst.Fields("津贴") = Range("e" & i)
            rst.Fields("工资合计") = Range("f" & i)
        
            rst.Update
        
            rst2.Close
        Else
            MsgBox "重复"
            rst2.Close
        End If
    Next i
   
    cnn.Close
    Set cnn = Nothing

   
    MsgBox "保存成功"
End Sub
作者: yanwei82123300    时间: 2014-2-4 15:39
koutx 谢谢帮助!请问关于提示"重复"的提示框能否出现一次呢?而不是有多少条数据就提示多少次?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3