我在从一个查询导入数据到另一个表时(ACCESS数据库),
由于有相同记录,故在导入时发生主键重复错误.
在ACCESS里设计查询来做时,它会提示是否继续导入,选择"是",则可以导入未重复的数据.
但我现在在VB程序中用cnn.Execute来做,如果使用 On error resume next 来忽略这个错误的话,则会一条记录也无法导入进去,请问高手如何解决这个问题?注: 开始使用 DISTINCT 关键字,但由于数据非常多, 发觉速度非常慢, 所以不希望这样做.(直接忽略错误导入的话,只是几秒钟就可以了,而如果使用DISTINCT, 则需要几分钟的时间)

解决方案 »

  1.   

    VB带的例子Visdata能够在执行这样的SQL时跳过错误,只加入正确的记录。看看他是怎么做的。
      

  2.   

    看了VISDATA的例子,不过还是糊里糊涂,把数据库转为97格式, 但在那里似乎连插入数据都插入也不对,也看不到结果,也不知是版本问题还是什么.小弟我才疏学浅,没能看懂,哪位知道的话,请告诉我该怎么写, 谢谢了!
      

  3.   

    这个问题困扰我很久了,完整的问题是:希望使用 Insert Into ... Select ... 语句来原表添加数据, 对于重复的数据使用新的数据给以更新.最好能用简单的一句SQL语句和错误处理完成, 
    如果更新重复数据的要求比较难实现,也可以不更新,直接忽略到重复的数据也可(这个ACCESS能简单的做到,我想在VB里应该也能实现的吧).不知有没有简单的解决方法,如果真的不行的话,只好在程序中一行一行的插了.我倒不是怕写代码,只是觉得这样效率太低.希望大侠们伸出援手,小生感激不尽!
      

  4.   

    如果是sqlserver可以写个存储过程
    access,不好作啊
      

  5.   

    我以前也是一条一条的插入的,效率好像不比Insert Into ... Select ...慢多少呀
    你可以试试的
      

  6.   

    如果要更新已有的记录,很麻烦(或者说效率很低),我以前用类似的方法做过,我用INSERT INTO ... VALUE ...一条一条插入, 检错时如果发现是重复主键错误,则先删除这条记录, 再resume, 即重新插入.
    慢就慢在删除时又整个表找了一遍,我试了四千条重复的插入,用insert into ... select到一个新表,只要几秒钟,而用先删除重复再插入的方法, 时间约用了1分钟!我想最好能够一开始就找出所有重复数据,删除之,再插入就没有错误了,
    不过这涉及两个库中表的查询操作,我没有做过,我想是不是用链接表的方法,不知怎么用法 ?
      

  7.   

    ERRORManipulate:  '错误处理
        If Err.Number = -2147467259 Then  '如主键重复,则执行下一条
            Resume Next
        End If'一条一条插入,此法不错,本人刚用过。不必把插入的再删除。
    '