Я создаю интерфейс, в котором пользователи могут использовать Excel для плавного изменения базы данных SQL.Я могу нормально получать данные, однако при обновлении записей я получаю «недопустимый тип параметра».
Он прекрасно работает, просто объединяя значения в запросе, однако для предотвращения SQL-инъекций мне требуется параметризованный запрос.Я попытался заменить в типе данных ADO значение, однако это ничего не изменило.Я пробовал неназванные параметры, которые просто всегда отправляют в базу данных значение 16 вместо желаемого строкового значения
Private Sub Worksheet_Change(ByVal Target As Range)
ID = Cells(Target.Row, 1).Value
Dim locValue As String
locValue = Cells(Target.Row, 2).Value
Dim Cm As ADODB.Command
Set Cm = New ADODB.Command
Cm.NamedParameters = True
Cm.CommandText = "UPDATE issues SET " _
& "location = @location " _
& "WHERE id = " & ID
Dim locationParameter As ADODB.Parameter
Set locationParameter = Cm.CreateParameter("@location", adVarChar, adParamInput, 255)
Cm.Parameters.Append locationParameter
locationParameter.Value = locValue
SqlConnection(Cm)
End Sub
(я знаю, что ID еще не параметризован, проблема связана с расположением)
Public Function SqlConnection(Cm As ADODB.Command) As ADODB.Recordset
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Server_Name = "127.0.0.1" ' Enter your server name here
Database_Name = "issues_and_outages" ' Enter your database name here
User_ID = "root" ' enter your user ID here
Password = "password" ' Enter your password here
Set Cn = New ADODB.Connection
Cn.Open "Driver={MySQL ODBC 8.0 ANSI Driver};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"
Cm.CommandType = adCmdText
Cm.ActiveConnection = Cn
Set SqlConnection = Cm.Execute
End Function
Сервер MySQL с таблицей questions_and_outages, имеющей столбцы с:
id (целое число, без знака, ключ, auto_increment)
location (varchar (255), обнуляемый)
При обновлении ячейки, которая должна обновлять столбец местоположения, возникает ошибка
"Run-ошибка времени '-2147217887 (80040e21)': [MySQL] [драйвер ODBC 8.0 (a)] [mysqld-8.0.16] Указан неверный тип параметра "
, с ошибкой в строке Cm.Execute,Однако в базе данных есть столбец типа varchar размером 255, который должен быть adVarChar, поэтому я не ожидаю ошибки.