INSERT IF NOT NOT EXISTS in access

时间:2013-10-24 18:00:37

标签: forms ms-access insert

我有一个[订单]表单,您可以在其中注册要保存在[订单]表中的订单。在这种形式中有2个领域;您从组合框中选择了提供者的名称,当您这样做时,该提供者的公司代码将使用名为[providers]的表中的dlookup进行自动填充。

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

我被告知:INSERT ....如果不是EXISTS ..但我似乎无法在VBA查询中写出来。含义;我想将我的(Me!providers)和(Me!code)插入[providers]表。我尝试了以下SQL语句:

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

但是没有用。谁能帮助我使用正确的SQL?

2 个答案:

答案 0 :(得分: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子句。

答案 1 :(得分:0)

我会做这样的事情:检查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