2015-10-10 67 views
3

我正在盡我所能建立我的第一個數據庫,但我遇到了一個問題,我找不到答案。我在這個論壇上是一個完整的新手,並且編寫任何代碼,所以請溫和。如何使用VBA或宏訪問表單來更新表格?

我想創建一個表中的新紀錄,當一個學生的名字被雙擊在一個窗體內的列表框內。

列表框,我想利用從第一(StudentID)列的值= lstStudent

組合框,其中我想從在第二個(CourseID)列值:cboCourseID

文本框在我想要從第三個(NoteID)列的值= txtCourseNoteID

正在創建新記錄在所需的表中並沒有不正確的代碼錯誤,但沒有值傳遞到字段。自動編號正在創建(AttendanceID),但其他列是空白的。這裏是我的代碼:

Private Sub lstStudent_DblClick(Cancel As Integer) 
    CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')" 
End Sub 

字段填充,所以這不是問題。目標字段的格式是正確的,我想不出任何其他的東西。

+1

檢查代碼試圖插入到表中的值。在查詢設計器中創建一個新的查詢,切換到SQL視圖,粘貼這個查詢並運行它:'SELECT'me.lstStudent'AS StudentID,'me.cboCourseID'AS CourseID,'me.txtCourseNoteID'AS NoteID' – HansUp

回答

2

新的記錄在所需的表創建並且沒有 不正確的代碼錯誤但沒有任何價值被傳遞到 的領域。自動編號正在創建(AttendanceID),但其他列爲空白。

有了這個INSERT說法,你提供的新行中的3個字段文本值...

INSERT INTO tblAttendance (StudentID, CourseID, NoteID) 
VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID') 

然而StudentIDCourseIDNoteID是數字字段,所以不會接受這些文本值。在這種情況下,數據庫引擎不能插入任何東西。您仍然會添加新行(新的自動編號值爲AttendanceID),但其他字段爲空。

如果包括dbFailOnError選項與.Execute,Access將通知您的問題(錯誤#3464,「標準表達式中數據類型不匹配」),並中止---插入新行不會加入...

CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')", dbFailOnError 

使用類似於@HarveyFrench建議的做法,但消除來自VALUES列表中的單引號?

Dim strInsert As String 
strInsert = "INSERT INTO tblAttendance (StudentID, CourseID, NoteID)" & vbCrLf & _ 
    "VALUES (" & Me.lstStudent.Value & "," & Me.cboCourseID.Value & "," & _ 
    Me.txtCourseNoteID.Value & ");" 
Debug.Print strInsert ' <- view this in Immediate window; Ctl+g will take you there 
CurrentDb.Execute strInsert, dbFailOnError 

根據您告訴我們的情況,我懷疑這會奏效,但我不確定這是達到目標的最佳方式。您可以打開一個DAO.Recordset並在那裏添加新行。或者,如果您可以使用綁定表單,則Access將自動處理存儲新行的操作,而無需編寫代碼。

+0

非常感謝HansUp,現在正在做我正需要的東西!我也非常欣賞這個解釋。表單不綁定到數據集的原因是數據從多個表中拉出來填充下拉框,我需要這些信息然後寫入另一個單獨的表。我不確定這是否是實現我的目標的最直接方式,但這是我第一次嘗試做這樣的事情,而且我正在學習。再次感謝您的幫助,也感謝@HarveyFrench。 – EnglischAlternativ

0

更改此

 CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')" 

是這個

CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) _ 
VALUES ('" & me.lstStudent & "','" & me.cboCourseID & "','" & me.txtCourseNoteID "');" 

參見here for useful info

+0

我想我剛剛收到你的邀請加入LinkedIn。問題在於它出現在LinkedIn上與我的錯誤配置文件相關的電子郵件地址。這裏是我正確的LinkedIn個人資料:https://www.linkedin.com/profile/edit?trk=nav_responsive_sub_nav_edit_profile –

相關問題