2013-10-29 45 views
1

我創建使用的MS Access(MS訪問基本上是唯一的選擇很輕的CRM工具,因爲我被要求做沒有超出人工成本,沒有任何服務器或基礎設施的支持超越網絡驅動器上的空間)。的MS Access - 分組字段爲更好地控制在VBA

我目前的工作任務分配形式,其中一個經理可以分配特定的客戶聯絡任務,客戶服務代表(CSR)上。我有一個表格。在這個表格上有九行 - 每個CSR一個 - 和9個欄 - 每個任務一個。經理通過填寫複選框然後單擊保存來分配任務。然後將這些數據保存到任務分配表中。現在,CSR名稱和當前分配的標籤和初始值由DLookups以編程方式提取 - 每個控制對象一個(90行)。然後通過「Do While r.EOF/r.MoveNext(其中r是從表中設置的記錄)循環(另外90行)將賦值寫入表中。

我的問題是創建了很多的垃圾代碼,我不滿意這不容易擴展,看起來像狗屎,我想要的是能夠將每行數據字段(CSR的名稱作爲一個文本框,他們的9個任務作爲檢查控制)作爲一個羣體,所以我可以遍歷該組編程

我想要的是組每組10個字段的在一起,然後可以做這樣的事情:

Private Sub Form_Open(cancel As Integer) 
    Dim db As DAO,Database 
    Dim r as DAO.Recordset 
    Dim CSR as TaskGrouping 'Where TaskGrouping is the new group name thing I have created 
    Set db = CurrentDb 
    Set r = db.OpenRecordset("tbl_TaskAssignments") 
    r.MoveFirst 
    For Each CSR in CSRGrouping 
     CSR.CSRName = r.Fields("CSRName") 
     CSR.Task1 = r.Fields("Task1") 
     CSR.Task9 = r.Fields("Task9") 
     r.MoveNext 'I am ignoring the case where I need to ensure that r.EOF is not reached. 
    Next CSR 
End Sub 
+1

爲什麼不使用連續表單?也就是說,假設您的表格設置了CSRName字段和9個任務字段。這樣,如果團隊中有更多(或更少)CSR,它會自動調整。你所做的事情將導致你不得不返回並編輯表單以進行手動調整。 –

+0

你可以創建一個私人收藏或字典與所有適當的映射,在一個單獨的方法初始化?然後你可以基本迭代,就像你所建議的那樣,邏輯看起來很乾淨。你仍然有難看的初始化,但它與你的邏輯隔離。 – enderland

+0

「每個控制對象一個(90行)」,爲什麼不是9x9 = 81行或9行?你能解釋一下嗎? – jacouh

回答

0

怎麼樣考慮2個表,tblManagers(關鍵IDManager,自動編號)和tblTask​​s(關鍵IDTask,自動編號)?

該表可以容易地更新添加或刪除項目。兩張桌子之間沒有關係(據我瞭解)。

第三個表是tblSelectedTasks這可能是您的選擇形式的來源。在這個表格中,您按每個經理選擇的選擇。 此表有兩個外鍵,MANAGER_ID和TASK_ID,在上表中鍵和一鍵IDSelectedTask(自動編號)有關。

當你登錄作爲經理,你定義MANAGER_ID的鍵值中所選任務的新紀錄寫。 組合框可以顯示您可以選擇的任務。它從tblTask​​s中選擇值並將其綁定到Task_ID。 此表可以有一個狀態,您可以使用它來過濾您的任務及其完成狀態。

循環掃描選定的任務,經理或任務會很短導致它會在形式

Dim rs as DAO.Recordset 
dim strSQL as string 

strSQL = "Select ... FROM ... WHERE ..." 
Set rs = Currentdb.OpenRecordset(strSQL, dbOpenDynaset) 

do while not rs.EOF 

    <your code here> 

    rs.movenext 
loop 

rs.close 
set rs = nothing 

讓我知道。