0 голосов
спросил от в категории VB6
Попробуйте завершить оператор с точкой с запятой и заключить ключевое слово VALUE по пробелам:
SQLSTR = "INSERT INTO Employee_Details (EmpNo,Employee_Name,Status) VALUES ('" & txtempno & "','" & empname & "','" & Combo1 & "');"
Я также добавил дополнительные пробелы и использовал все прописные слова для ключевых слов. Это не обязательно, но улучшает читаемость.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
0 голосов
ответил от
Не решение вашего вопроса, но еще одна проблема, которую вы имеете.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских входов, и это откроет дверь для уязвимости с именем «SQL injection», это опасно для вашей базы данных и подверженности ошибкам.
Одиночная цитата в названии и вашем крах программы. Если пользователь вводит такое имя, как «Брайан О'Коннер», это может привести к краху вашего приложения, это уязвимость в SQL-инъекции, и авария является наименьшей из проблем, вредоносного ввода пользователя и продвигается к командам SQL со всеми учетными данными.
Option Explicit Public con As New ADODB.Connection Public rs As New ADODB.Recordset ----------------------------------------------------------------------------- Private Sub cmdadd_Click()     Dim res As String     Dim SQLSTR As String     Dim ConString As String     Set rs = New ADODB.Recordset     ConString= "provider=Microsoft.jet.oledb.4.0;Data Source="D:My Project VB6Tubewell.accdb"     Set con = New ADODB.Connection     con.ConnectionString = ConString     res = MsgBox("Do you want to add this record?", vbQuestion + vbYesNo, "Add Employee")     If res = vbYes Then         con.Open         SQLSTR = "Insert into Employee_Details(EmpNo,Employee_Name,Status)values('"&txtempno&"','"&empname&"','"&Combo1&"')"         con.Execute SQLSTR         con.Close         Set con = Nothing     End If End Sub
# [#^ #]
#SQL Injection # [#^ #]
#SQL Injection Attacks by Example # [#^ #]
#PHP: SQL Injection - Manual # [#^ #]
#SQL Injection Prevention Cheat Sheet - OWASP # [#^ #]
-----
Получить привычку отступать ваш код, он помогает читать:
Option Explicit Public con As New ADODB.Connection Public rs As New ADODB.Recordset ----------------------------------------------------------------------------- Private Sub cmdadd_Click()     Dim res As String     Dim SQLSTR As String     Dim ConString As String     Set rs = New ADODB.Recordset     ConString= "provider=Microsoft.jet.oledb.4.0;Data Source="D:My Project VB6Tubewell.accdb"     Set con = New ADODB.Connection     con.ConnectionString = ConString     res = MsgBox("Do you want to add this record?", vbQuestion + vbYesNo, "Add Employee")     If res = vbYes Then         con.Open         SQLSTR = "Insert into Employee_Details(EmpNo,Employee_Name,Status)values('"&txtempno&"','"&empname&"','"&Combo1&"')"         con.Execute SQLSTR         con.Close         Set con = Nothing     End If End Sub

1
Option Explicit Public con As New ADODB.Connection Public rs As New ADODB.Recordset ----------------------------------------------------------------------------- Private Sub cmdadd_Click()     Dim res As String     Dim SQLSTR As String     Dim ConString As String     Set rs = New ADODB.Recordset     ConString= "provider=Microsoft.jet.oledb.4.0;Data Source="D:My Project VB6Tubewell.accdb"     Set con = New ADODB.Connection     con.ConnectionString = ConString     res = MsgBox("Do you want to add this record?", vbQuestion + vbYesNo, "Add Employee")     If res = vbYes Then         con.Open         SQLSTR = "Insert into Employee_Details(EmpNo,Employee_Name,Status)values('"&txtempno&"','"&empname&"','"&Combo1&"')"         con.Execute SQLSTR         con.Close         Set con = Nothing     End If End Sub
# [ 1#^ #]
1#SQL Injection # [1#^ #]
0 голосов
ответил от
Начните с исправления уязвимости
Private Sub cmdadd_Click()     If MsgBox("Do you want to add this record?", vbQuestion + vbYesNo, "Add Employee") <> vbYes Then         Exit Sub     End If          Dim ConString As String     ConString= "provider=Microsoft.jet.oledb.4.0;Data Source=""D:My Project VB6Tubewell.accdb"""          Dim con As ADODB.Connection     Set con = New ADODB.Connection     con.ConnectionString = ConString          Dim cmd As ADODB.Command     Set cmd = New ADODB.Command     cmd.ActiveConnection = con     cmd.CommandText = "INSERT INTO Employee_Details (EmpNo, Employee_Name, Status) VALUES (?, ?, ?)"          Dim p As ADODB.Parameter          Set p = cmd.CreateParameter(, adInteger, adParamInput, , txtempno.Text)     cmd.Parameters.Append p          Set p = cmd.CreateParameter(, adVarChar, adParamInput, 50, empname.Text)     cmd.Parameters.Append p          Set p = cmd.CreateParameter(, adVarChar, adParamInput, 10, Combo1.Value)     cmd.Parameters.Append p     con.Open     cmd.Execute     con.Close End Sub
# [#^ #] в вашем коде.

Параметрирование запросов не довольно как простой в VBA, как и в .NET, но это не так уж плохо:
#Append and CreateParameter Methods Example (VB) | Microsoft Docs # [#^ #]

Что-то вроде этого должно работать:
Private Sub cmdadd_Click()     If MsgBox("Do you want to add this record?", vbQuestion + vbYesNo, "Add Employee") <> vbYes Then         Exit Sub     End If          Dim ConString As String     ConString= "provider=Microsoft.jet.oledb.4.0;Data Source=""D:My Project VB6Tubewell.accdb"""          Dim con As ADODB.Connection     Set con = New ADODB.Connection     con.ConnectionString = ConString          Dim cmd As ADODB.Command     Set cmd = New ADODB.Command     cmd.ActiveConnection = con     cmd.CommandText = "INSERT INTO Employee_Details (EmpNo, Employee_Name, Status) VALUES (?, ?, ?)"          Dim p As ADODB.Parameter          Set p = cmd.CreateParameter(, adInteger, adParamInput, , txtempno.Text)     cmd.Parameters.Append p          Set p = cmd.CreateParameter(, adVarChar, adParamInput, 50, empname.Text)     cmd.Parameters.Append p          Set p = cmd.CreateParameter(, adVarChar, adParamInput, 10, Combo1.Value)     cmd.Parameters.Append p     con.Open     cmd.Execute     con.Close End Sub

Примечание: Вам нужно будет изменить размеры параметров для имени и параметров состояния, соответствующих базе данных.


#Everything you wanted to know about SQL injection (but were afraid to ask) | Troy Hunt # [#^ #]
#How can I explain SQL injection without technical jargon? | Information Security Stack Exchange # [#^ #]
#Query Parameterization Cheat Sheet | OWASP # [#^ #]

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...