INSERT INTO方法不起作用

时间:2019-05-16 16:45:40

标签: sql ms-access access-vba

我遇到了一个问题,即用一种形式的信息填充三个表,这些信息在相关形式的INSERT INTO事件上运行3行On Click

我有一个需要填写的表格,并且有一个提交按钮。单击提交按钮后,表单中的信息应该填充3个不同的表(下面提供的代码)。

这些表是NetworksRadiosScans

Networks的主键为SSID,它与SSID表中的Radios字段具有一对多的关系。 Radios表的主键为BSSID,它与BSSID表中的Scans字段具有一对多的关系。 Scans表具有一个称为index的主键,它只是一种自动编号类型,所有其他字段都必须能够接受重复项。

关系完整时,仅networks表被填写;但是如果我删除这些关系,则networksscans表将被填写,但是Radios表仍为空白。

目前我不知道问题是什么;除了推测之外,它还与Radios表有关。

BSSID表中BSSID的表单字段和Radios字段的掩码都为:

AA:AA:AA:AA:AA:AA;

主键设置为必填,BISSD的长度不为零,已索引(无重复)。

所有三个表都是空的,所以我知道没有重复的问题。

此外,如果我通过GUI以指定的顺序填写表格,则没有问题。

这是我正在使用的代码,请记住我上面提到的关系。 (还请注意,如果删除所有关系,将填充NetworksScans表,但填充Radios将不会)。

CurrentDb.Execute "INSERT INTO Networks (SSID, Network, Authentication, Encryption)" & "VALUES ('" & Me.txt_SSID & "', '" & Me.cmb_NetworkType & "', '" & Me.cmb_AuthenticationType & "', '" & Me.cmb_EncryptionType & "')"

CurrentDb.Execute "INSERT INTO Radios (BSSID, SSID, [Radio Type], Channel, [Base Rate], [Other Rate])" & "VALUES ('" & Me.txt_BSSID & "', '" & Me.txt_SSID & "', '" & Me.cmb_RadioType & "', '" & Me.txt_Channel & "', '" & Me.txt_BaseRate & "', '" & Me.txt_OtherRate & "')"

CurrentDb.Execute "INSERT INTO Scans ([Scan Date], Location, BSSID, [Signal Strength])" & "VALUES ('" & Me.cmb_ScanDate & "', '" & Me.cmb_ScanLocation & "', '" & Me.txt_BSSID & "', '" & Me.txt_SignalStrength & "')"

我希望这三个表在执行此代码后都会填充一条新记录。

1 个答案:

答案 0 :(得分:0)

正如您所解释的, Scans 是基表,其中 Radios 是其子表,而 Networks 是其子表。因此,由于相关字段的不同,请首先使用 Scans 和最后使用 Networks 更改操作查询的顺序。另外,考虑使用QueryDefs进行参数化,以使SQL和应用程序层(VBA)之间的代码更整洁,更易于维护和可读:

SQL (将每个保存为存储的访问查询)

  1. 扫描追加

    PARAMETERS Scan_date_param TEXT, Scan_loc_param TEXT, BSSID_param TEXT, Signal_param TEXT;
    INSERT INTO Scans ([Scan Date], Location, BSSID, [Signal Strength])
    VALUES (Scan_date_param, Scan_loc_param, BSSID_param, Signal_param);
    
  2. 广播附加

    PARAMETERS BSSID_param TEXT, SSID_param TEXT, Radio_param TEXT,
               Channel_param TEXT, Base_rate_param TEXT, Other_rate_param TEXT;
    INSERT INTO Radios (BSSID, SSID, [Radio Type], Channel, [Base Rate], [Other Rate]) 
    VALUES (BSSID_param, SSID_param, Radio_param,
            Channel_param, Base_rate_param, Other_rate_param);
    
  3. 网络附加

      
    PARAMETERS SSID_param TEXT, Network_param TEXT, Auth_param TEXT, Encryp_param TEXT;
    INSERT INTO Networks (SSID, Network, Authentication, Encryption)
    VALUES (SSID_param, Network_param, Auth_param, Encryp_param);
    

VBA (分配每个查询并绑定参数,不包括引号或字符串连接)

Dim qdef As QueryDef

Set qdef = CurrentDb.QueryDefs("myScansAppendQ")

qdef!Scan_date_param = Me.cmb_ScanDate
qdef!Scan_loc_param = Me.cmb_ScanLocation
qdef!BSSID_param = Me.txt_BSSID
qdef!Signal_param = Me.txt_SignalStrength

qdef.Execute dbFailOnError
Set qdef = Nothing

Set qdef = CurrentDb.QueryDefs("myRadiosAppendQ")

qdef!BSSID_param = Me.txt_BSSID
qdef!SSID_param = Me.txt_SSID
qdef!Radio_param = Me.cmb_RadioType
qdef!Channel_param = Me.txt_Channel
qdef!Base_rate_param = Me.txt_BaseRate
qdef!Other_rate_param = Me.txt_OtherRate

qdef.Execute dbFailOnError
Set qdef = Nothing

Set qdef = CurrentDb.QueryDefs("myNetworksAppendQ")

qdef!SSID_param = Me.txt_SSID
qdef!Network_param = Me.cmb_NetworkType
qdef!Auth_param = Me.cmb_AuthenticationType
qdef!Encryp_param = Me.cmb_EncryptionType

qdef.Execute dbFailOnError
Set qdef = Nothing