2012-01-13 109 views
5

我有一個工作跟蹤系統,並且有一個查詢返回所有逾期工作的結果。 我有一個顯示每個作業一個接一個的形式,並有兩個按鈕(作業已完成,作業未完成)。未完成只顯示下一條記錄。 如果按下「已完成」按鈕,我無法找到訪問當前記錄以更新其內容的方式,我能得到的最接近的是表示記錄位置的長數字。如何從表單編號直接更新數據庫中的記錄(Access 2007)

獲取表單中記錄索引的VBA如下。

Sub Jobcompleted(frm As Form) 
    Dim curr_rec_num As Long 
    curr_rec_num = frm.CurrentRecord 
End Sub 

這是我第一次拍在VBA和搜索我找不到任何解決我的問題的一個小時之後。 我是否完全錯誤地回答這個問題?在Microsoft Access工作2007

更多信息所有的表都是標準化

車表:包含vehicle_id(PK),以及雷戈和模型等

工作表:包含作業ID(PK), vehicle_id(fk)和其他信息,關於需要發生什麼以及下一個發生日期,每次發生作業(所有作業重複)和其他信息之間的天數

作業歷史記錄表:包含job_history_id(pk), job_id(fk),完成日期和評論

當按下任務完成按鈕,它應該建立在作業歷史表與當前日期的新條目,任何意見和作業ID

這是我試圖讓工作

腳本
Private Sub Command29_Click() 
    Dim strSQL1 As String 
    Dim strSQL2 As String 
    Set Rs = CurrentRs 
    Set db = CurrentDb 

    strSQL1 = "INSERT INTO completed_jobs(JOB_ID, DATE_COMPLETED, COMMENTS) VALUES " & Rs!job.ID & ", " & Date 
    db.Execute strSQL1, dbFailOnError 
    strSQL2 = "UPDATE job SET JOB_NEXT_OCCURANCE = JOB_NEXT_OCCURANCE+JOB_RECURRANCE_RATE WHERE job.ID = Rs!job.ID" 
    db.Execute strSQL2, dbFailOnError 
End Sub 

注意:行Set Rs = CurrentRs是完全不正確的,我相信這是我需要弄清楚的嗎?這被稱爲按下按鈕

我張貼圖像顯示窗體(非連續)。

@HansUp,我給你說的話,但我不挺認爲這是適用的(我沒有提供足夠的信息,第一次就你瞭解,我認爲)

@sarh我相信這個記錄,你正在談論的是我所需要的,但我無法弄清楚如何使用它,任何提示?

@Matt我90%確定我正在使用綁定表單(就像我剛纔所說的,Access的新功能,一直在查看人們建議和學習的所有內容)。當然有一個工作ID(只是沒有顯示,不需要可見),但我如何訪問它來執行操作? SQL我可以做的,與Access/VBA整合我是新的

Form for ticking off jobs as they are completed, calls code shown

+1

「我對這個完全錯誤的方式做了什麼?」我懷疑你可能是,做得很好,訪問很簡單。你的表格是連續表格嗎?爲什麼你不能訪問數據?您的記錄集是否複雜,因此無法更新?你是否設計過表格以包含唯一的ID?您是否通過閱讀關係數據庫開始您的工作?你看過任何Access模板嗎? – Fionnuala 2012-01-13 10:10:11

+1

順便說一句,如果另一個人也upvotes您的問題,您將有足夠的聲譽發佈您的表單的圖像,這可能是有益的,然後再次它可能不會:) – Fionnuala 2012-01-13 10:16:07

+0

我會upvote爲可能的圖像上傳,也似乎你正在使用綁定表單,因此應該能夠包含一個帶有作業唯一編號的字段(我當然希望它有一個),然後你可以在Update SQL中引用這個文本字段。 – 2012-01-13 11:24:42

回答

2

據我瞭解你的情況,你的表格是數據綁定綁定(你可以記錄索引),所以 - 你的表格已經位於在這張唱片上。如果您需要更新基礎數據集的一些領域,你可以寫類似

Me!SomeField = ... 
DoCmd.RunCommand acCmdSaveRecord 

如果你的形式也必然要「SomeField」控制,表單將自動更新。

如果這不會幫助,你可以看看一對夫婦的另一個方向:

1)使用SQL代碼更新記錄。例如,你有記錄的ID應在表單數據集進行更新,所以你可以寫這樣的:

Call CurrentDB.Execute(_ 
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges) 

2)你可以看一下書籤屬性 - 無論是記錄和形式都有這個屬性,它描述了記錄的位置。所以,你可以寫這樣的事情(不是最好的例子,但可以幫助你得到一個想法):

Dim Rs as Recordset 
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset 
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record 
+0

不確定如何堆棧溢出警報工作,但我已經張貼了更多信息 – StandOff 2012-01-16 05:41:59

+0

@StandOff我beleive記錄源表單包含字段JOB_ID,所以要使用它,你可以只寫我!JOB_ID(無需添加CurrentRs)。所以strSQL1(但沒有評論)我將重寫爲「INSERT INTO completed_jobs(JOB_ID,DATE_COMPLETED)VALUES(」&Rs!job.ID&「,Date())」 – sarh 2012-01-16 12:38:08

+0

剛剛注意到,我在第一個代碼中做了一個印刷錯誤snippet - 它應該是我!SomeField而不是Rs!SomeField,對不起,修正。 – sarh 2012-01-16 12:41:07

1

考慮一個更簡單的方法。我懷疑你需要關心窗體的CurrentRecord屬性。我不明白爲什麼你需要一個命令按鈕來表示「已完成」,另一個表示「尚未完成」。

將「是/否」數據類型字段添加到表單的記錄源使用的表中。將其默認值屬性設置爲0,表示False或No.將其稱爲「completion_status」。使用該記錄來源創建一個新表單。然後,您的表單可以有一個用於completion_status的複選框控件。

新添加的記錄將具有False/No作爲completion_status ---複選框將顯示爲未選中狀態。表單中其他記錄的completion_status可以使用複選框控件在「是」(已選中)和「否」(未選中)之間切換。

+0

不確定Stack Overflow警報是如何工作的,但我已經發布了更多信息 – StandOff 2012-01-16 05:42:36

相關問題