如果访问中不存在则插入

Posted

技术标签:

【中文标题】如果访问中不存在则插入【英文标题】:INSERT IF NO EXISTS in access 【发布时间】:2013-10-24 18:00:37 【问题描述】:

我有一个 [Orders] 表格,您可以在其中注册要保存在 [Orders] 表中的订单。在该表格中有 2 个字段;您从组合框中选择了提供商的名称,当您这样做时,该提供商的公司代码会自动填充一个名为 [providers] 的表中的 dlookup。

不过,有时订单是针对新供应商的,其信息不在我的表格中。在这种情况下,用户必须手动输入名称和代码。如何使用此信息将其作为 [providers] 表中的新记录插入,以便下次出现此提供程序时,他的信息会在组合框中给出?

有人告诉我:INSERT ....IF NOT EXISTS .. 但我似乎无法在 VBA 查询中写出来。意义;我想将我的 (Me!providers) 和 (Me!code) 插入 [providers] 表。我尝试了以下 SQL 语句:

INSERT INTO providers (provider,code) VALUES ('"&Me!provider&"','"&Me!code&"') IF NOT EXISTS

但这没有用。任何人都可以帮我正确的 SQL 吗?

【问题讨论】:

【参考方案1】:

如果在提供者表中找不到提供者名称,此 SQL 将在提供者表中添加条目

INSERT INTO Providers (Provider, Code)
    SELECT TOP 1 
        'New Provider Name' AS Provider, 
        'New Provider Code' AS Code 
    FROM 
        Provider 
    WHERE 
        NOT EXISTS (SELECT TOP 1 Provider, Code 
                    FROM Provider 
                    WHERE Provider = 'New Provider Name' 
                      AND Code = 'New Provider Code');

替换“新提供者名称”和“新提供者代码”

如果提供者表只有一条记录或表为空,则在子查询中省略TOP 1 子句。

【讨论】:

您不需要AS ProviderAS Code【参考方案2】:

我会做这样的事情:检查代码是否存在于 Orders 表中,如果不存在,然后运行您的 Insert Into SQL。您可能需要稍微尝试一下,具体取决于您的代码字段是 TEXT 还是 INT,但这应该可以帮助您完成大部分工作。

Dim db as Database
Dim rec as Recordset
Dim sSQL as String

Set db = CurrentDB
Set rec = db.OpenRecordset("Select * from Orders WHERE Code = '" & Me.Code & "'")

'This refreshes the dataset so you can get an accurate record count
rec.MoveFirst
rec.MoveLast

'If your record count is 0, then the code isn't in the DB yet so you need to add it
If rec.RecordCount = 0 Then
  sSQL = "INSERT INTO providers (provider,code) VALUES ('"&Me!provider&"','"&Me!code&"')";
  DoCmd.RunSQL sSQL
EndIf

'Always set your connection variables to Nothing so the connection closes!
Set db = Nothing
Set rec = Nothing

【讨论】:

谢谢你,但我用 dcount 代替。对我来说似乎更简单 当 Select * 返回 0 条记录时,我收到运行时错误“3021”(无当前记录)。 rec.MoveFirst 和 rec.MoveLast 有必要吗? @ZacharyOrdo-GISP - 这是为了获得准确的行数。也许您需要一个 OnError 语句来捕获它? 如果你使用SELECT COUNT(*) as rowCount ... 而不是SELECT * ...,你总会得到一排。如果没有记录,则rowCount 将为 0。MoveFirst 或 MoveLast 上应该没有错误。

以上是关于如果访问中不存在则插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如果表中不存在则插入记录[重复]

如果列中不存在,则使用 Laravel eloquent 插入数据

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

如果行中不存在所有值,则插入记录[重复]

PHP MySQL:如果API数据中不存在则删除行

HSQLDB 如果不存在则插入,如果存在则更新