Member 14315552 Ответов: 2

Добавление данных из формы доступа в базу данных mysql


Привет, у меня есть приложение access, позволяющее пользователям добавлять учетные записи,в настоящее время программа добавляет,обновляет, удаляет информацию из связанной таблицы mdb. Чего я не могу понять, так это как также добавить ссылку на базу данных mysql, чтобы иметь информацию как в mdb, так и в mysql update-to-date.

Я создал ссылку на таблицу mysql (называемую accounts1) и попытался добавить код для создания dao.recordset, но полностью потерялся.

Также в моем запросе Insert для последнего поля company, на моей форме доступа у меня есть флажки, но в таблице mysql есть номера, связанные с каждым типом компании, как я могу преобразовать флажок, отмеченный в компанию. (для exmaple, если флажок отмечен для "Fed mutual", компании присваивается " 2 " в базе данных mysql)

Что я уже пробовал:

<pre>Private Sub AddCmdButon_Click()
    
    ValidateCmdButton_Click
    
    If Me.ProcessFlagTBox = False Then
       Dim dbs1 As Database
       Dim aTable As Recordset
       Dim srchKey As String
       Set dbs1 = CurrentDb
       Set aTable = dbs1.OpenRecordset("Accounts", dbOpenDynaset)
       srchKey = "[ShortDescription] = '" & Me.ShortDescriptionTBox & "'"
       aTable.FindFirst srchKey
       
       Dim db As DAO.Database
       Dim rstAccounts As DAO.Recordset
       Dim strSQL As String
       Set db = CurrentDb
       strSQL = strSQL = INSERT INTO accounts1 ('ShortDesc', 'Description',     'Account', 'Region', 'CostCode', 'LOB', 'State', 'StateReq', 'NAICPLS', 'Company')
                VALUES ('UCase(Me.ShortDescriptionTBox)', 'UCase(Me.DescriptionTBox)', 'UCase(Me.MajorAccountTBox)', 'UCase(Me.DivRegionTBox)', 'UCase(Me.CostCodeTBox)',
                'UCase(Me.LOBTBox)', 'UCase(Me.StateTBox)', 'Me.[NAIC-PageLineSubLineTBox]', '????';
       Set rstAccounts = db.OpenRecordset(strSQL)
       
       If aTable.NoMatch = True Then
          ' Record not found (Add it)
          aTable.AddNew
          aTable![ShortDescription] = UCase(Me.ShortDescriptionTBox)
          aTable![Description] = UCase(Me.DescriptionTBox)
          aTable![MajorAccount] = UCase(Me.MajorAccountTBox)
          aTable![DivReg] = UCase(Me.DivRegionTBox)
          aTable![CostCenter] = UCase(Me.CostCodeTBox)
          aTable.Update
          MsgBox "The record was successfully added.", vbOKOnly, "INFORMATIONAL MESSAGE BOX"
          ClearCmdButton_Click
          Me.DescrComboBoxCBox.Requery
          Me.DescrComboBoxCBox1.Requery
         Else
          ' Record found (Duplicate)
          MsgBox "The record already exist on file. ", vbOKOnly, "INFORMATIONAL MESSAGE BOX"
       End If
       aTable.Close
       dbs1.Close
    End If
    

End Sub

2 Ответов

Рейтинг:
2

Member 14315552

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

Dave Kreskowiak

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

Как правило, вы найдете одно из двух решений, связанных с подобной проблемой. Либо каждой компании присваивается произвольное значение, либо каждая компания имеет свою собственную запись, описывающую его в базе данных. В любом случае существует таблица сопоставления между компанией (recordId или value), которая связывает каждую выбранную компанию с родительской записью.

Таким образом, если у вас есть запись, которая может быть связана с несколькими компаниями, у вас будет таблица для записи, которую вы связываете, таблица, описывающая компании, и еще одна таблица, сопоставляющая их с двумя столбцами, один для идентификатора записи, с которым вы связываете, а другой содержит идентификаторы записей компаний, с которыми вы ее связываете.

Рейтинг:
10

Patrice T

Это неверный синтаксис vba

strSQL = strSQL = INSERT INTO accounts1 ('ShortDesc', 'Description',     'Account', 'Region', 'CostCode', 'LOB', 'State', 'StateReq', 'NAICPLS', 'Company')
                VALUES ('UCase(Me.ShortDescriptionTBox)', 'UCase(Me.DescriptionTBox)', 'UCase(Me.MajorAccountTBox)', 'UCase(Me.DivRegionTBox)', 'UCase(Me.CostCodeTBox)',
                'UCase(Me.LOBTBox)', 'UCase(Me.StateTBox)', 'Me.[NAIC-PageLineSubLineTBox]', '????';

И это также не является правильным sql-оператором.
Учебник по SQL[^]
SQL INSERT INTO оператор[^]

И, как я понимаю, он также подвержен уязвимости SQL-инъекции.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]