我遇到了一个问题,即用一种形式的信息填充三个表,这些信息在相关形式的INSERT INTO
事件上运行3行On Click
。
我有一个需要填写的表格,并且有一个提交按钮。单击提交按钮后,表单中的信息应该填充3个不同的表(下面提供的代码)。
这些表是Networks
,Radios
和Scans
。
Networks
的主键为SSID
,它与SSID
表中的Radios
字段具有一对多的关系。 Radios
表的主键为BSSID
,它与BSSID
表中的Scans
字段具有一对多的关系。 Scans
表具有一个称为index
的主键,它只是一种自动编号类型,所有其他字段都必须能够接受重复项。
关系完整时,仅networks
表被填写;但是如果我删除这些关系,则networks
和scans
表将被填写,但是Radios
表仍为空白。
目前我不知道问题是什么;除了推测之外,它还与Radios
表有关。
BSSID
表中BSSID
的表单字段和Radios
字段的掩码都为:
AA:AA:AA:AA:AA:AA;
主键设置为必填,BISSD
的长度不为零,已索引(无重复)。
所有三个表都是空的,所以我知道没有重复的问题。
此外,如果我通过GUI以指定的顺序填写表格,则没有问题。
这是我正在使用的代码,请记住我上面提到的关系。 (还请注意,如果删除所有关系,将填充Networks
和Scans
表,但填充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 & "')"
我希望这三个表在执行此代码后都会填充一条新记录。
答案 0 :(得分:0)
正如您所解释的, Scans 是基表,其中 Radios 是其子表,而 Networks 是其子表。因此,由于相关字段的不同,请首先使用 Scans 和最后使用 Networks 更改操作查询的顺序。另外,考虑使用QueryDefs进行参数化,以使SQL和应用程序层(VBA)之间的代码更整洁,更易于维护和可读:
SQL (将每个保存为存储的访问查询)
扫描追加
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);
广播附加
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);
网络附加
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