我正在使用MS Access创建一个非常轻便的CRM工具(MS Access基本上是唯一的选择,因为我被要求在没有人工成本的情况下执行此工作,并且在网络驱动器上没有超出空间的服务器或基础架构支持)。
我目前正在处理任务分配表单,其中经理可以将特定客户联系任务分配给客户服务代表(CSR)。我有一张表格。在该表格上有九行 - 每个CSR一个 - 和9列 - 每个任务一个。管理员通过填写复选框然后单击“保存”来分配任务。然后,此数据将保存到任务分配的表中。现在,由DLookups以编程方式提取CSR名称和当前分配的标签和初始值 - 每个控制对象一个(90行)。然后通过“Do While Not 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
答案 0 :(得分:0)
如何考虑2个表,tblManagers(密钥IDManager,自动编号)和tblTasks(密钥IDTask,自动编号)?
可以轻松更新表格添加或删除项目。两个表之间没有关系(据我所知)。
第三个表是tblSelectedTasks,它可能是您选择表单的来源。在此表中,您可以按每个经理选择选择。 该表有两个外键,Manager_ID和Task_ID,与上表中的键和一个键IDSelectedTask(Autonumber)相关。
当您以管理员身份登录时,您可以定义要在所选任务的新记录中写入的Manager_ID的键值。 组合框可以显示您可以选择的任务。它从tblTasks中选择值,并将其限制为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
让我知道。