我在数据库中有两个表。一个叫做salesreceipt,另一个叫salesreceiptlinedetail。
salesreceiptlinedetail中的每一行都有一个字段IDKEY,它与salesreceipt中一行中的字段TxnID相匹配。 salesreceiptlinedetail中可以有多行可以匹配salesreceipt中的同一行。
我有第三方软件,可以将我的访问数据库与Salesforce同步。该软件只允许一次查询数据库中的一个表。
我需要自动将salesreceipt表中的一些字段复制到salesreceiptlinedetail表中的新字段,以便我可以正确同步数据。
我对MS访问非常新。在尝试了许多不同的事情后,我找到了一个我认为可行的解决方案,但我不知道该怎么做。看起来我可以设置字段的默认值。我想我需要做一个DLookup来找到我要在salesreceipt表中复制的字段,并以某种方式使用条件来检查IDKEY是否匹配TxnID。我想我需要创建一个具有执行此功能的模块,但我不确定如何以及如何调用它。
我可能会对此不以为然。我可以使用一些帮助或想法。我已经研究了几个小时,可能会朝着正确的方向努力。提前谢谢。
答案 0 :(得分:1)
这里有一些你可以尝试的事情,虽然我对你所获得的表格以及你正在寻找的结果做了一些假设。
因此,您有一个名为 salesreceipt 的表格,ID字段 TxnID 以及其他一些数据(例如CustomerRef_FullName):
然后您有一个 salesreceiptlinedetail 表,其中有一个字段 IDKEY 字段,该字段与salesreceipt表的TxnID字段匹配(即外国字段) key)和一个空字段(例如FullName),您希望通过将记录匹配到salesreceipt表来获取数据。
我可以想到实现这一目标的几种方法,以便最终得到一张包含您想要的信息的表格,但我不确定哪种方法最适合您。显示的所有这些选项都使用Access 2013。
1)使用SELECT查询获取数据并将结果导出到第三方软件:
在Access中,转到创建/查询设计:
将salesreceipt和salesreceiptlinedetail表添加到查询中,然后关闭Show Table窗口:
单击并将TxnID字段拖到IDKEY字段以创建连接(由Access中的一行表示):
双击salesreceiptlinedetail中的IDKEY和salesreceipt表中的CustomerRef_FullName;它们应该显示为底部区域中的字段(如果您还有其他字段,那么也要添加它们,我只是为了说明目的而在1个字段上):
点击“运行”查看此查询的结果:
希望这会显示一张桌子,开始填补你想要的空白:
然后您可以保存查询(右键单击查询表并选择"保存"并根据需要为其命名):
并将结果导出到电子表格(假设电子表格是您的第三方软件采用的格式)。转到外部数据/然后单击" Excel"来自出口集团:
使用您保存的名称的查询将存在于Access Objects侧栏中,以便您可以运行它并再次导出结果(双击它再次运行它):
这种方法的好处在于它比使用DLOOKUP更快(如果你有大量记录,这些可能是资源很多),并且如果你的salesreceipt和salesreceiptlinedetail表中有新的数据/记录,查询将在该新数据上运行,并将其包含在结果中,而无需您修改查询。
对于你的问题,听起来你可能想要用你需要的数据填充你的salesreceiptlinedetail表...这个SELECT查询不会这样做。如果要填充实际的salesreceiptlinedetail表,则需要UPDATE查询...
2)使用与salesreceipt记录匹配的UPDATE查询填充salesreceiptlinedetail中的空字段
在此示例中,我们将填充salesreceiptlinedetail中的空字段,即FullName字段。我们通过使用IDKEY和TxnID字段将salesreceiptlinedetail中的记录与salesreceipt匹配,然后将CustomerRef_FullName字段中的相应数据带到FullName字段来实现此目的。
为此,请按照我们在上面(1)中所做的相同方式设置新查询,并在完成此阶段后停止:
将查询类型更改为"更新"查询:
双击要填充的空白字段,例如salesreceiptlinedetail表中的FullName:
在"更新到"在框中,键入要用于填充空字段的相应表和字段的名称。将表格和字段用一对方括号括起来,并用点分隔。所以看起来应该是这样的:
[salesreceipt].[CustomerRef_FullName]
在条件框中,匹配您的IDKEY和TxnID字段,如下所示:
[salesreceiptlinedetail].[IDKEY]=[salesreceipt].[TxnID]
点击"运行"和Access应显示一条警告,表示它将更新表中的某些记录。单击是以允许它执行此操作:
如果你回到salesreceiptlinedetail表,你会看到现在填充了一次空的FullName字段:
然后您可以保存您的UPDATE查询以便以后再次使用 - 请注意,双击查询将打开它并再次运行UPDATE(即它将尝试使用新数据填充salesreceiptlinedetail表),所以如果你不希望发生这种情况您可以右键单击它并在选择运行它之前打开它。
如果您想在现有表中填充数据,而不是在使用SELECT查询时按照(1)中所述从现有表中构建新的结果表,则此方法很有用。
如果salesreceiptlinedetail或salesreceipt中有新数据,您将再次运行此UPDATE查询。
答案 1 :(得分:1)
这是为了补充Matt的答案。对于微型报告数据库,我们有类似的情况,我们需要在一天之内多次更新数据库。我们将查询包装在一个函数中,并在Windows中安排一个任务,每4小时运行一次,执行Access函数并更新数据。