Board logo

標題: [發問] 引用ado cmd的execute方法失敗 [打印本頁]

作者: dechiuan999    時間: 2016-1-3 19:05     標題: 引用ado cmd的execute方法失敗

各位大大好:
小弟想引用adodb command語法來執行
更新資料庫欄位資料,但出現語法錯誤如下:
執行階段錯誤-2147217904 (80040e10)
無值提供給一或多個必要參數
語法如下:
  1. Sub mm()
  2.    
  3. Dim cmdCommand As New ADODB.Command
  4. Dim recSet As New ADODB.Recordset
  5. Dim cn As New ADODB.Connection
  6. Dim code, dateSold As String
  7. Dim conStr As String, mFile As String, strSQLCommand As String

  8. mFile = "D:\TEMP\EX6.mdb"
  9. conStr = "Provider=Microsoft.jet.oledb.4.0;Data Source=" & mFile
  10. cn.ConnectionString = conStr
  11. cn.Open

  12. cmdCommand.ActiveConnection = cn
  13.   code = 5
  14.   dateSold = "好喝沙士"
  15.   strSQLCommand = "UPDATE tb產品2A SET 單位數量='1200' WHERE ((產品編號)=" & code & ") AND ((產品名稱)=" & dateSold & ") "
  16.   cmdCommand.CommandText = strSQLCommand
  17.   cmdCommand.CommandType = adCmdText
  18.   Set recSet = cmdCommand.Execute
  19.   
  20. End Sub
複製代碼
[attach]23034[/attach]
作者: GBKEE    時間: 2016-1-4 09:31

回復 1# dechiuan999
  1. dateSold = "'好喝沙士'"
複製代碼

作者: dechiuan999    時間: 2016-1-4 20:20

回復 2# GBKEE

版主大大您好:

謝謝您。
小弟依版主大大提供的方式,
問題已克服。小弟已往前邁出
一大步。但心裡還是存有疑惑
,望版主大大能再開釋。
疑問一:
code=5為何不須加單引號
而dateSold = "'好喝沙士'"
須加單引號不知有何差異。
疑問二:
小弟原是引用ado recordset
來更新資料庫欄位資料,但遇
到mysql好像不是能完全支援。
因此,想嘗試改用此方法。
但小弟的疑惑是如依此就無法
使用sql語法縮小要更新範圍
及執行recordset並直接完成更新。
而目前excel資料表每一項次是
逐項引用execute來執行。
這樣是否很不適當而有另一方
法來
作者: GBKEE    時間: 2016-1-5 09:56

回復 3# dechiuan999
我沒有使用過資料庫軟體
資料庫的使用大同小異.附檔是網路上下載的可參考一下.

[attach]23043[/attach]
  1. Option Explicit
  2. Sub Ex()
  3.     '引用 Microsoft DAO 3.0 Object Libiary
  4.     Dim myData As String, myTable As String, SQL As String
  5.     Dim myDb As DAO.DataBase
  6.     Dim myRs As DAO.Recordset
  7.     Dim i As Integer
  8.     Dim code, dateSold
  9.     ActiveSheet.Cells.Clear          '清除工作表的全部資料
  10.     myData = "D:\TEMP\EX6.mdb"
  11.     Set myDb = OpenDatabase(myData)
  12.     code = 5                '資料表的欄位 FieldType 是dbSingle' 6
  13.     dateSold = "'好喝沙士'" '資料表的欄位 FieldType 是 dbText '10
  14.     SQL = "UPDATE tb產品2A  SET 單位數量=88 WHERE ((產品編號)=" & code & ") AND ((產品名稱)=" & dateSold & ") "
  15.     myDb.Execute (SQL)   '
  16.     SQL = "select * from tb產品2A  WHERE 產品編號<=" & code
  17.     Set myRs = myDb.OpenRecordset(SQL)
  18.     If myRs.RecordCount > 0 Then
  19.         For i = 1 To myRs.Fields.Count  '複製欄位名
  20.            Cells(1, i) = myRs.Fields(i - 1).Name
  21.         Next i
  22.         '設置欄位名字體為加粗並居中對齊
  23.         With Range(Cells(1, 1), Cells(1, myRs.Fields.Count))
  24.             .Font.Bold = True
  25.             .HorizontalAlignment = xlCenter
  26.         End With
  27.         Range("A2").CopyFromRecordset myRs '複製全部資料
  28.     End If
  29. '關閉記錄集及資料庫連接 , 並釋放變數
  30. myRs.Close
  31. myDb.Close
  32. Set myRs = Nothing
  33. Set myDb = Nothing
  34. End Sub
複製代碼

作者: dechiuan999    時間: 2016-1-5 14:37

回復 4# GBKEE

版主大大您好:

    讓版主大大勞心了。
小弟已先下載收藏,
也會好好研究它。

就感恩!




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