想請問各程式撰寫先進與高手,使用VBA進行介面設計(圖一)要連結Access資料庫(圖二),請問該如何撰寫程式讓介面輸入的內容記錄進Access內呢?目前撰寫的程式都無法記錄(圖三),有什麼地方有錯誤呢?
ACCESS版本?Sherry0812 wrote:使用VBA進行介面設計(圖一) 看書,爬文,到圖書館借本書先照範例做一次,你就知道了..Sherry0812 wrote:請問該如何撰寫程式讓介面輸入的內容記錄進Access內呢? 截圖太小,建議直接把程式碼複製貼上來,或帶檔讓人下載Sherry0812 wrote:目前撰寫的程式都無法記錄(圖三),有什麼地方有錯誤呢?
※Access的版本為2010※有去圖書館借了多本書來查看練習,但仍未能有效貫通,所以希望能有先進協助確認與指導!※相關的程式碼如下:Private Sub CommandButton1_Click()Dim datapath As StringDim cclass As StringDim cclear As Stringdatapath = ActiveWorkbook.Path + "\HData.accdb"Dim conn As ObjectSet conn = CreateObject("ADODB.Connection")Dim cn As ObjectDim rs As ObjectDim strSql As StringDim strConnection As StringSet cn = CreateObject("ADODB.Connection")strConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & datapath & ";"cn.Open strConnectionstrSql = "INSERT INTO cleanerdata (cleanerid, cleanername, add, tel, emer_name, emer_tel, relation) VALUES (' & Me.cleanerid.Text & ', ' & Me.cleanername.Text & ',' & Me.add.Text & ',' & Me.tel.Text & ',' & Me.emer_name.Text & ' , ' & Me.emer_tel.Text & ',' & Me.relation.Text & ')"'rs.Closecn.CloseSet cn = NothingMsgBox "更新完畢!"Me.HideUserForm3.ShowEnd Sub
我沒有進行測試,但以程式碼上看起來,您指定了一個SQL的語法(INSERT INTO.....),但您沒有任何一行程式碼去執行這段SQL語法,所以應該不會寫入資料庫。試試在cn.Close這句之前,加上一句:cn.execute strSql希望有幫上忙
Sherry0812 wrote:謝謝您的協助,不過...(恕刪) 至少程式有反應了,再來請在cn.execute strSql這句之前,再加上一句:Msgbox strSql。您得到的錯誤是說您的SQL語法有誤,所以在執行前先跳出來看看,再找找錯誤發生的地方,有可能是某空格導致,修正SQL語法的錯誤後應可成功
Sherry0812 wrote:錯誤的地方…就是後...(恕刪) 您原先的程式碼中,包含2個錯誤:A:少加了一句執行SQL語法的程式碼B:要被執行的SQL語法本身有錯誤cn.Execute strSql 這句的意思是去執行strSql這句語法所以加上 cn.Execute strSql = 解決了錯誤A但 cn.Execute strSql 這句中的 strSql 本身可能存在錯誤加上 cn.Execute strSql 這句雖然解決了錯誤A,但因為這句去執行了一句錯誤的SQL語法(錯誤B),所以一樣報錯!您應該去找出您的strSql這個變數所代表的SQL語法哪裡出了錯,cn.Execute strSql <==這句本身沒錯!GOOD LUCK!
Sherry0812 wrote:錯誤的地方…就是後來加上去的cn.這一串...(恕刪) 用您的命名方式(access 資料庫的命名、欄位,也用一樣的方式)寫了一個簡短的範例,自己比較看看錯在那裡就像qekqo這位高手說的,您忘了加上執行,而且sql語法錯誤Sub test()Dim cn As Object, strSql As String, strConnection As String, datapath As StringSet cn = CreateObject("ADODB.Connection")datapath = "d:\test.accdb"strConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & datapath & ";"a = "xxxxxx"b = "yyyyyy"strSql = "INSERT INTO cleanerdata (cleanerid, cleanername) VALUES ('" & a & "', '" & b & "')"cn.Open strConnectioncn.Execute strSqlcn.CloseSet cn = NothingEnd Sub