我在工作中的任务是,在没有不必要的努力的情况下,产生一组“由主管批准”的记录,通过报告.This每周从记录中识别出来,使用一个简单的select查询在一个链接表上运行,我对此没有控制,只有只读访问权限。
问题1)我正在从intranet上定期更新的源表中工作。这是一个我不能以任何方式编辑的表。我也不能让其他人编辑它。此表当前没有是/No字段,我只能链接到该表
请在答案中将此表称为“tblsource”。
到目前为止,我的WorkaRound是:-当前的工作原型想法是通过添加的是/否勾选框字段工具来实现批准。(勾选框是浏览所选记录并给予“已主管批准”(即我)批准的最快方法。通过组合框选择记录将远远慢得多)我目前已经成功地使用make table查询完成了这一操作,然后手动将yes/No字段添加到“tblmade”,但这导致了问题2)。
问题2)保持记录的“已批准”状态,直到下一次访问该列表,此时记录可能仍然存在于源表中,也可能不存在。我目前工作中的问题是..每次使用make table查询似乎都意味着重新开始,即所有记录都被擦除,然后重新填充,因此在重新审批现有记录时复制了大量工作
我克服问题2的另一个想法是,可以创建某种针对的查询,该查询将填充一个表,其中我的复选框相对于唯一记录保持不变,即,我研究了Dlookup但还看不到实现此tblsource的方法的源表的主键-我会很高兴地阐述我必须做的工作和我遇到的问题的性质
一些进一步的信息
tblsource中的主要索引是具有唯一序列号/letters的txt字段,我使用的tbsource中的其他3个字段都是txt字段
问题1)源tbl没有yes/ no字段,源表只有链接到时才可用,不能修改,即只读权限
问题2) tblsource每天更新/更改,大约有5-8%的删除和/或添加。这不是一个大型数据集,tblsource中只有1100-1200条记录,在我的简单select查询之后,我只需扫描150 -200条即可批准或不批准
请注意,从我的个人资料,我的MS访问技能水平是初级到中等我可以建立一个宏,但原始的VBA仍然是一个方法,但我可以剪切和粘贴相当好,如果你指向属性列表中的位置,如数据-“onUpdate”等
发布于 2014-07-03 04:04:42
这实际上很简单。
添加一个包含ID字段(这将是tblSource表的外键,因此在lookup选项卡中定义适当的关系)和一个approval字段(是/否)的新表tblForApproval。

然后创建一个新表单,并以它将tblSource与tblForApproval左连接的方式定义它的数据源。

然后,在表单中添加一些文本字段和复选框,并将它们绑定到查询的返回值(参见屏幕截图-属性表-数据-控件源[字段“已批准”已链接到表列“已批准”)。不要忘记用于批准的复选框以及相关的Save和Next Record按钮。

或多或少就是这样。现在您可以浏览您的记录集了。如果您尚未批准,左联接最初将提供一个空值,但一旦您保存记录,Access将自动在approval表中添加一条记录。
此方法还将保留对源表的更新-审批是单独保存的。
顺便说一句:这实际上不需要任何VBA,除非你想做一些像“点击批准时自动保存”的事情。
发布于 2014-06-30 01:10:45
一种解决方案是运行make-table查询来获取链接表的本地副本,然后将批准的Yes/No字段添加到本地副本中。这可以在VBA中完成,代码如下:
Option Compare Database
Option Explicit
Public Function GetDataForApproval()
Dim cdb As DAO.Database, qdf As DAO.QueryDef, fld As DAO.Field
Const LocalTableName = "tblForApproval" ' or whatever name you like
DoCmd.DeleteObject acTable, LocalTableName ' delete old copy
' run make-table query
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("", _
"SELECT * " & _
"INTO [" & LocalTableName & "] " & _
"FROM tblsource")
qdf.Execute
Set qdf = Nothing
' now add [Approved] Yes/No field
Set fld = New DAO.Field
fld.Name = "Approved"
fld.Type = dbBoolean
cdb.TableDefs(LocalTableName).Fields.Append fld
fld.Properties.Append fld.CreateProperty("DisplayControl", dbInteger, acCheckBox)
Set fld = Nothing
Set cdb = Nothing
End Functionhttps://stackoverflow.com/questions/24461704
复制相似问题