INSERT INTO метод не работает - PullRequest
1 голос
/ 16 мая 2019

У меня проблемы с заполнением трех таблиц информацией из одной формы, которая запускает 3 строки INSERT INTO для события 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, индексированная (без дубликатов).

Все три таблицы пусты, поэтому я знаю, что проблема с дубликатами отсутствует.

Кроме того, если я заполняю таблицы в указанном порядке через графический интерфейс, у меня нет проблем.

Это код, который я использую, пожалуйста, помните об отношениях, которые я изложил выше. (Также обратите внимание, что если я удаляю все отношения, таблицы 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 & "')"

Я ожидаю, что все три таблицы заполнят новую запись при выполнении этого кода.

1 Ответ

0 голосов
/ 18 мая 2019

Как вы объяснили, Сканирование - это базовая таблица с Радио в качестве дочернего элемента и Сети в качестве таблицы внука.Поэтому измените порядок запросов действий с помощью Сканирования сначала и Сети последнего из-за зависимых полей.Кроме того, рассмотрите параметризацию с помощью 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
...