Member 12774003 Ответов: 1

Я пишу код доступа для добавления и обновления данных из таблицы, но он говорит: "несоответствие данных в выражении критериев".


Возможность Сравнить Базе
Private Sub cmdAdd_Click()

    If Me.txtPartNumb.Tag & "" = "" Then
    
        CurrentDb.Execute "INSERT INTO PartList(PartNumb, PartName, PartCellIDFK)" & _
                " VALUES (" & Me.txtPartNumb & ",'" & Me.txtPartName & "','" & Me.txtCellID & "')"
    
    Else
        
        CurrentDb.Execute "UPDATE PartList" & _
                " SET PartNumb=" & Me.txtPartNumb & _
                ", PartName='" & Me.txtPartName & "'" & _
                ", PartCellIDFK='" & Me.txtCellID & "'" & _
                " WHERE PartNumb=" & Me.txtPartNumb.Tag
        
    End If
        
    cmdClear_Click
        
    partsearchsub.Form.Requery
                
End Sub

Private Sub cmdClear_Click()
    Me.txtPartNumb = ""
    Me.txtPartName = ""
    Me.txtCellID = ""
    
    Me.txtPartNumb.SetFocus
    
    Me.cmdAdd.Caption = "Add"
    Me.cmdEdit.Enabled = True
    
    Me.txtPartNumb.Tag = ""
    
End Sub

Private Sub cmdClose_Click()
    DoCmd.Close
    
End Sub

Private Sub cmdDelete_Click()
        
        If Not (Me.partsearchsub.Form.Recordset.EOF And Me.partsearchsub.Form.Recordset.BOF) Then
            If MsgBox("Are you sure you want to delete this?", vbYesNo) = vbYes Then
                
                CurrentDb.Execute "DELETE FROM PartList" & _
                        " WHERE PartNumb =" & Me.partsearchsub.Form.Recordset.Fields("PartNumb")
                
                Me.partsearchsub.Form.Requery
            End If
        End If
End Sub

Private Sub cmdEdit_Click()
    
    If Not (Me.partsearchsub.Form.Recordset.EOF And Me.partsearchsub.Form.Recordset.BOF) Then
    
        With Me.partsearchsub.Form.Recordset
            
            Me.txtPartNumb = .Fields("PartNumb")
            Me.txtPartName = .Fields("PartName")
            Me.txtCellID = .Fields("PartCellIDFK")
            
            Me.txtPartNumb.Tag = .Fields("PartNumb")
            
            Me.cmdEdit.Enabled = False
            Me.cmdAdd.Caption = "Update"
        End With
    End If
    
End Sub


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

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

[no name]

Вы пытаетесь сделать что-то, используя неправильный тип данных.

Suvendu Shekhar Giri

Проверьте все ваши запросы, которые вы использовали в коде, и убедитесь, что все строковые типы данных (varchar, nvarchar и т. д. В БД) должны быть заключены в пару одинарных кавычек (например, 'MyField') или поделитесь с нами своей структурой таблицы.

phil.o

Кроме того, ваш код оставляет дверь широко открытой для атак SQL-инъекций.
Вы должны найти "параметризованный запрос" и исправить его.

1 Ответов

Рейтинг:
1

OriginalGriff

Для начала перестаньте делать это так: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Во-вторых, учитывая, что txtPartNumb, txtPartName и txtCellID являются текстовыми полями, объединение их в строку SQL все равно не будет работать.
Попробуй:

Dim s as String = "---" & Me.txtPartNumb & "---"
Console.WriteLine(s)
Что это даст вам:
---System.Windows.Forms.TextBox, Text: ABCD---
Вам нужно указать свойство Text текстового поля при извлечении его значения!