当前位置:编程学习 > VB >>

求助:VB中批量修改ACCESS数据库表中(20万条记录)某个字段,老报错,请帮忙解决!!!! (在线等)

刚学习VB,自己编写的,想把数据表中18位的身份证全部转换为15为, 
大家帮忙分析下问题所在!数据表记录大概在20万条左右,运行后老报错:键列信息不足或不正确,更新影响到多行。(附件有截图) 
Dim Cnn As ADODB.Recordset 
Dim Cn As String 

Private Sub Form_Load() 
    Set Cnn = New Recordset 
    Cn = "select sfz from Admission" 
    Cnn.Open Cn, Str, adOpenKeyset, adLockOptimistic, adCmdText 

    update 
End Sub 

Private Sub update() 
    Dim aaa As String 
    Do While Not Cnn.EOF 
        If Len(Cnn("sfz")) = 18 Then 
        aaa = Left(Cnn("sfz"), 6) & Mid(Cnn("sfz"), 9, 9) 
        Cnn("sfz") = aaa 
        Cnn.update 
        End If 
    Cnn.MoveNext 
    Loop 
     
End Sub 
--------------------编程问答-------------------- 补充:    每次只能执行修改几十条记录就报错:实时错误:2147467259(80004005),键列信息不足或不正确。更新影响到多行 --------------------编程问答-------------------- '我想你最大的问题在于ADODB 的使用语法

'引用 Microsoft ADO Ext 2.5 for ddl and security
'添加Command1

'c:\bwscale.mdb是我的数据库名 bwmain是表名, netwt是一个字段(Val属性)
'我的If rs("netwt") < 0 Then
'你改为If Len(rs("sfz")) = 18 Then


Option Explicit
Dim i%, strSQL$
Dim Conn As Connection
Dim rs As New ADODB.Recordset
Private Sub Form_Load()
   Set Conn = New Connection
   Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & "c:\bwscale.mdb;Persist Security Info=False"
   '******************** Combo1 添加此库的所有表名
   strSQL = "select * from bwmain"
   rs.Open strSQL, Conn, adOpenStatic, adLockOptimistic
   If rs.RecordCount > 0 Then rs.MoveFirst
End Sub

Private Sub Form_Unload(Cancel As Integer)
   rs.Close
   Conn.Close
   Set rs = Nothing
   Set Conn = Nothing
   End
End Sub

Private Sub Command1_Click()
   For i = 0 To rs.RecordCount - 1
      If rs("netwt") < 0 Then
         rs("netwt") = rs("netwt") + 100
         rs.Update
      End If
      rs.MoveNext
   Next i
   MsgBox "更新完成"
End Sub

--------------------编程问答-------------------- 更正:

工程引用Microsoft ActiveX Data Objects 2.5 Library  

--------------------编程问答-------------------- aaa = Left(Cnn("sfz"), 6) & Mid(Cnn("sfz"), 9, 9)  
Cnn("sfz") = aaa 

这两句语法有问题否?? --------------------编程问答--------------------

Public Sub OpenX()
    On Error GoTo ErrorHandler

    Dim Cnxn As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strCnxn As String
    Dim strSQLEmployees As String
    Dim varDate As Variant
    
    ' Open connection
    strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
        "Initial Catalog='Pubs';Integrated Security='SSPI';"
    Set Cnxn = New ADODB.Connection
    Cnxn.Open strCnxn
    
    ' Open employee table
    Set rstEmployees = New ADODB.Recordset
    strSQLEmployees = "employee"
    rstEmployees.Open strSQLEmployees, Cnxn, adOpenKeyset, adLockOptimistic, adCmdTable
--------------------编程问答-------------------- 你这样写会得到

最左边的 6位 跳过第7第8位后, 再加上第9位起算9位 9-17, 第18位你并没得到.

Cnn("sfz") = aaa 我的代码是 rs("sfz") = aaa

建议你库名与表名使用的变量分开使用.

还有一个最要命的地方就是你的这行
Private Sub update()  

别用VB保留字update当事件名称,用upd 或 updatea 就是别用 update


--------------------编程问答--------------------  语法 
 recordset.Open Source, ActiveConnection, CursorType, LockType, Options --------------------编程问答--------------------
1. 缺少connection 
2. rs.open 语法错误 --------------------编程问答-------------------- 由于您是新用户,所以特此介绍一下结贴的方法 
  
  
 如果您问题已经得解决,请您及时结帖给分,以感谢帮助您的朋友。  
  
 结帖方法:点击版面右上方或右下方  <管理>  ,进入页面后就可以输入密码,分别给分,结帖。  
  或参考: 
 http://www.csdn.net/help/over.asp 
 http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html 
 ============================================================================= 
 问题解决,请及时结贴。   
  正确结贴方法:     
  管理帖子--> 给分--> 输入密码--> 结贴
--------------------编程问答-------------------- 谢谢!明天到单位试试看 --------------------编程问答-------------------- 直接用一条update语句试度?我看行! --------------------编程问答--------------------
引用 11 楼 WM_JAWIN 的回复:
直接用一条update语句试度?我看行!


怎么用? --------------------编程问答--------------------

  update Admission set Sfz= Left(sfz, 6) + right(sfz,9) where len(Sfz)=18

大概是这样子吧,不知ACC支不支持Left()和right()函数 --------------------编程问答--------------------  两者相比那个执行速度比较快点?? --------------------编程问答-------------------- 接分先! --------------------编程问答-------------------- 以后需再关注,现在先帮你顶一下
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,