1

我有一个 [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?

4

2 回答 2

2

如果在提供程序表中找不到提供程序名称,此 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如果提供者表只有一条记录或表为空,则在子查询中省略子句。

于 2017-04-18T07:37:22.800 回答
1

我会做这样的事情:检查代码是否存在于 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
于 2013-10-24T19:15:52.297 回答