2015-06-12 4 views
2

Я работаю в базе данных для моей работы, и я пытаюсь вставить и обновить значения из таблиц с SQL внутри редактора VB Это мой код:MS Access Ошибка выполнения 3464

Option Compare Database 

Private Sub Übernehmen_Click() 
    Dim strSQL1 As String 
    Dim strSQL2 As String 
    Dim strSQL3 As String 
    Dim ArtikelNr As Integer 
    Dim Stück As Integer 
    Dim Lieferant As String 
    Dim Bestellnr As Integer 
    Dim EkPreis As String 
    Dim Mwst As String 
    Dim Einkaufsort As String 
    Dim GhIndex As String 
    Dim Datum As String 
    Dim Uhrzeit As String 
    Dim Lager As String 
    Dim Beschreibung As String 

    ArtikelNr = [Forms]![Einkauf]![ArtikelNr].Value 
    Stück = [Forms]![Einkauf]![Stück].Value 
    Lieferant = [Forms]![Einkauf]![Lieferant].Value 
    Bestellnr = [Forms]![Einkauf]![Bestellnr].Value 
    EkPreis = [Forms]![Einkauf]![EK-Preis].Value 
    Mwst = [Forms]![Einkauf]![Mwst-Satz].Value 
    Einkaufsort = [Forms]![Einkauf]![Einkaufsort].Value 
    GhIndex = [Forms]![Einkauf]![GH-Index].Value 
    Datum = [Forms]![Einkauf]![Datum].Value 
    Uhrzeit = [Forms]![Einkauf]![Uhrzeit].Value 
    Lager = [Forms]![Einkauf]![Lager].Value 

    strSQL1 = "INSERT INTO Einkäufe (ArtikelNr, Stück, Lieferant, Bestellnr, EKPreis, MwstSatz, Einkaufsort, GHIndex) VALUES (" & ArtikelNr & "," & Stück & ",'" & Lieferant & "','" & Bestellnr & "','" & EkPreis & "','" & Mwst & "','" & Einkaufsort & "','" & GhIndex & "');" 

    Beschreibung = DLast("EinkaufID", "Einkäufe") 

    strSQL2 = "INSERT INTO Transaktionen VALUES ('" & ArtikelNr & "','" & Datum & "','" & Lager & "','" & Stück & "','EinkaufID ' + '" & Beschreibung & "' ,'Einkauf',NULL,NULL,'" & Uhrzeit & "');" 
    strSQL3 = "UPDATE Lagerbestand SET Stück = Stück+" & Stück & " WHERE ArtikelNr = '" & ArtikelNr & "' AND Lager = '" & Lager & "';" 

    DoCmd.RunSQL strSQL1 
    DoCmd.RunSQL strSQL2 
    DoCmd.RunSQL strSQL3 

End Sub 

После попытки чтобы нажать кнопку, она сначала добавляет две записи и останавливается на третьем, просто чтобы выдать сообщение об ошибке «Runtime Error: 3464». После того, как я нажимаю debug, он отмечает строку DoCmd.RunSQL strSQL3.

Буду признателен за любой ответ, который я получаю. Большое спасибо заранее.

+2

Используйте 'Debug.Print strSQL3' для вывода текста из сложного оператора UPDATE в окно Immediate. Скопируйте этот текст и вставьте его в свой вопрос. – HansUp

+0

'ArtikelNr' звучит, как будто он сокращен немецкий для номера статьи .. это правильно? Если типом данных этого поля является число, вы должны, вероятно, удалить эти одинарные кавычки, когда сопоставляете его с полем. Как это '' WHERE ArtikelNr = "& ArtikelNr &" AND Lager = '"& Lager & "';" ' –

+0

Да, но не нужно ли возвращать его обратно в Integer? –

ответ

0

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

0

Быстрая ошибка Google Runtime Error 3464 предполагает, что это несоответствие типа данных. Обычно вы увидите это, когда пытаетесь сохранить значение даты в поле строки или что-то в этом роде.

Двойная проверка типов, переданных вашим операторам SQL, соответствует столбцам, которые они должны быть сохранены, и применять любые необходимые преобразования, если вы обнаружите различия.

Кроме того, один финальный хедз-ап ... путем динамического создания вашей строки SQL, вы оставляете себя уязвимым для атак SQL-инъекций - вам следует рассмотреть возможность использования ADOCommands с параметрами.

+0

Да, я знаю, что это за ошибка. это происходит. Об этом SQL Injection, я не знаю, как делать ADOCommands.Я только начал использовать Access, чтобы я не был этим familier с ним. –

+0

Чтобы ответить, что мне нужно знать структуру (типы данных и т. д.) вашей таблицы и увидеть SQL, который генерируется вашим sql. Но тогда, если у вас есть это, вы, вероятно, сможете сами выяснить. – amcdermott

+0

Типы данных ar аналогичные тем, которые используются для переменных. Я не могу дать вам дополнительную информацию, пока я снова не заработаю. Я работаю там только в пятницу и в эту пятницу, я не могу. –

Смежные вопросы