Board logo

標題: [發問] 引用ADO語法要清空某一筆資料內的某一欄位值失敗 [打印本頁]

作者: dechiuan999    時間: 2015-3-26 16:09     標題: 引用ADO語法要清空某一筆資料內的某一欄位值失敗

各位大大好:

小弟又遇到一個難題
想請各位大大協助。
小弟想引用ADO語法
來將資料庫指定合乎SQL語法某些資料
的某一欄位內資料並將其清空
可是會出現如下問題
ERROR NO:-2147217887
ERR DESCRIPTION:
多重步驟操作發生錯誤。請檢查每一個狀態值。
  1. Private Sub clearNwCmd6_Click()
  2.    
  3.     Call comBindCmd56
  4.     mLoadFile.mConstrCls = mconStr
  5.    
  6.     With mLoadFile
  7.         Set .mShtCls = upDataSht1        
  8.         .pDataSource = mDataBasePath
  9.         If .DataSourceExisted(dataPath) = True Then  'dataPath 為 combobox 指定資料庫名稱
  10.             'Call .LoadDataSource(dataPath, mData1)    ', multiPageNo)
  11.             Call .clearDataNWSource(dataPath, getAppTxt5.Text)
  12.         Else
  13.             MsgBox "指定報單號碼資料不存在"
  14.         End If
  15.     End With
  16.    
  17. End Sub
  18. Sub comBindCmd56()
  19.     With upDataSht1
  20.         getAppTxt5.Value = .Range("b2").Value
  21.     End With
  22.     dataPath = dataBaseComb2.Value     '先由comBoBox1取出資料庫名稱
  23.     Select Case dataPath        
  24.         
  25.     Case Is = "TRANCBS"
  26.         mDataBasePath = "D:\trancbs\database\cbsData.mdb"
  27.         mconStr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="
  28.         mLoadFile.mSqlCls = "SELECT 項次_INV主檔.MSGCODE,項次_INV主檔.SERSNO,項次_INV主檔.項次號碼,項次_INV主檔.數量,項次_INV主檔.UNITAMT,項次_INV主檔.報單淨重 FROM 項次_INV主檔 WHERE 項次_INV主檔.MSGCODE AND SERSNO= '" & getAppTxt5.Text & "' ORDER BY 項次_INV主檔.項次號碼  ASC"        '測試        
  29.    
  30.     End Select
  31. End Sub
  32. Public Function clearDataNWSource(ByVal dataPath As String, ByVal mAppNo As String)
  33.    
  34.     Application.ScreenUpdating = False
  35.    
  36.     On Error GoTo ErrHandle   
  37.     Set mCon = New ADODB.Connection   
  38.     Select Case dataPath   
  39.     Case Is = "MYSQL"
  40.         With mCon
  41.             .Open mconStr
  42.         End With
  43.     Case Else
  44.         With mCon
  45.             .Open mconStr & mDataSource
  46.         End With
  47.     End Select
  48.     Set mRst = New ADODB.Recordset
  49.     With mRst
  50.         .ActiveConnection = mCon
  51.         .CursorLocation = adUseClient
  52.         .CursorType = adOpenDynamic      
  53.         .LockType = adLockPessimistic   
  54.         .Source = mSql
  55.         .Open
  56.     End With
  57.         
  58.     If Not mRst.EOF Then
  59.        mData1 = mRst.GetRows
  60.     End If
  61.     's = mRst.Fields.Count
  62.     With mSht
  63.         mRow = .Range("c" & .Rows.Count).End(xlUp).Row
  64.     End With
  65.    
  66.     For m = 2 To mRow   
  67.         cStr1 = mSht.Cells(m, 1)
  68.         cStr2 = mSht.Cells(m, 2)
  69.         cStr3 = mSht.Cells(m, 3)
  70.         cStr4 = mSht.Cells(m, 4)
  71.         cStr5 = mSht.Cells(m, 5)      
  72.         
  73.         mRst.MoveFirst
  74.         Do Until mRst.EOF = True
  75.             mStr1 = mRst.Fields("MSGCODE")
  76.             mStr2 = mRst.Fields("SERSNO")
  77.             mStr3 = mRst.Fields("項次號碼")
  78.             mStr4 = mRst.Fields("數量")
  79.             mStr5 = mRst.Fields("UNITAMT")
  80.             If cStr1 = mRst.Fields("MSGCODE") And cStr2 = mRst.Fields("SERSNO") And cStr3 = mRst.Fields("項次號碼") And cStr4 = mRst.Fields("數量") And cStr5 = mRst.Fields("UNITAMT") Then                  
  81.                   mRst.Fields("報單淨重").Value = """"            '出現錯誤 執行至此即跳至ErrHandle  
  82.                   mRst.Update
  83.                   Exit Do
  84.             End If
  85.             mRst.MoveNext
  86.         Loop
  87.      Next

  88.    
  89.     mRst.Close
  90.     mCon.Close
  91.    
  92.     Set mRst = Nothing
  93.     Set mCon = Nothing
  94.     MsgBox "已完成新增指定簽審文號" & vbCrLf & "報單號碼:" & mAppNo & "至資料庫內"
  95.     Exit Function
  96. ErrHandle:
  97.     LastErrNumber = Err.Number
  98.     MsgBox Err.Number
  99.     Debug.Print Err.Number
  100.    
  101.     LastErrDescription = Err.Description
  102.     MsgBox Err.Description
  103.     Debug.Print Err.Description
  104.     If LastErrNumber = 13 Then           '如果遇到陣列 ERR 時,直接改由 MDATA1 陣列取出資料內容
  105.         mErr mData1, dataPath
  106.     End If
  107.    
  108.     Err.Clear

  109. End Function
複製代碼

作者: stillfish00    時間: 2015-3-27 17:15

回復 1# dechiuan999
沒試,我猜
mRst.Fields("報單淨重").Value = """"     <<這是指一個雙引號
改成下面看看
mRst.Fields("報單淨重").Value = ""
作者: dechiuan999    時間: 2015-3-27 20:11

回復 2# stillfish00


    大大您好:
您提供的語法正是小弟引用的方法,
可能貼文時出錯。此方法小弟試過是不可行。
mRst.Fields("報單淨重").Value = ""

小弟改試另一種方式是雙引號內加單引號
卻可以執行。只是如此資料欄內會延伸其
它問題了。

感恩大大!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)