【问题标题】:How can I check existing columns in a table before adding a record?如何在添加记录之前检查表中的现有列?
【发布时间】:2021-04-04 09:42:14
【问题描述】:

我有一张名为 Visitor 的桌子。它可以接受重复值。我的意思是同一位访客可以多次光顾商店,但每天只能光顾一次。

Visitor_Name Purchase Price Date
John 200.00 USD 15/12/2020
Bob 150.00 USD 15/12/2020
Marshall 170.00 USD 16/12/2020

我需要添加一张支票。
如果我尝试使用现有日期(2020 年 12 月 15 日)添加 John,则使用弹出消息“访客已在该特定日期访问过商店”阻止记录插入。

这是我目前正在使用的代码。

Private Sub add()
    DoCmd.RunSQL "INSERT INTO Visitor([Visitor_Name], [Purchase Price], [Date] VALUES ([Text1].Value, [Text2].Value, [Text3].Value)"
End Sub

在添加记录之前,我需要检查 Visitor_Name 值和 Date 值以及与该特定访问者相关的所有现有值。

【问题讨论】:

  • 我认为上面的链接与我的情况无关。我的表可以接受重复值。
  • 访客姓名和日期的唯一索引将阻止您询问的条目类型。

标签: vba ms-access duplicates


【解决方案1】:

这可以通过使用DCount来计算表中有多少条目包含Visitor_NameDate,如果不是0则提前退出:

Private Sub add()
   If(DCount("Visitor_Name", "Visitor", "Visitor_Name=""" & [Text1].Value & """ AND [Date]=#" & [Text3].Value & "#") <> 0) Then
      MsgBox "Visitor already visited the shop in that particular day"
      Exit Sub
   End If
    
   DoCmd.RunSQL "INSERT INTO Visitor([Visitor_Name], [Purchase Price], [Date] VALUES ([Text1].Value, [Text2].Value, [Text3].Value)"
End Sub

【讨论】:

  • 非常感谢 sbgib。我还有一个问题。如果我也想在条件下检查 purchase_price 那么我应该如何更改代码?
  • 不客气!在DCount 函数中,您将更改第三个参数以包含它:If(DCount("Visitor_Name", "Visitor", "Visitor_Name=""" &amp; [Text1].Value &amp; """ AND [Purchase Price]=" &amp; CStr([Text2].Value) &amp; " AND [Date]=#" &amp; [Text3].Value &amp; "#") &lt;&gt; 0) Then。将其视为 Access SQL WHERE 条件。
  • 它将数字转换为字符串。这是reference documentation for CStr
  • @ZajjithVedha - 这个人很友好地回答了你的问题,你也很友好地接受了它。请不要用后续问题来纠缠他们。如果您有新问题 ask it 单独提出,请在需要时添加指向此问题的链接以获取上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2013-08-06
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多