如何在添加记录之前检查表中的现有列?

Posted

技术标签:

【中文标题】如何在添加记录之前检查表中的现有列?【英文标题】: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 值以及与该特定访问者相关的所有现有值。

【问题讨论】:

***.com/questions/2127698/… 我认为上面的链接与我的情况无关。我的表可以接受重复值。 访客姓名和日期的唯一索引将阻止您询问的条目类型。 【参考方案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 单独提出,请在需要时添加指向此问题的链接以获取上下文。

以上是关于如何在添加记录之前检查表中的现有列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有 AspNetUsers 表中添加列

解决如何在现有表中添加列

如何在 BigQuery 上展开数组以将列添加到现有表

TSQL - 如何在插入之前根据不同列中的值检查值?

Rails迁移以将主键添加到现有表

如何知道已使用哪种算法加密表中的现有密码