MS Access运行时错误3464

时间:2015-06-12 15:31:37

标签: sql vba access-vba

我正在为我的工作开发一个数据库,我正在尝试在vb编辑器中插入和更新带有sql的表中的值 这是我的代码:

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

尝试按下按钮后,首先添加两个条目,然后停在第三个条目,只是抛出一个错误,说“运行时错误:3464”。 按下调试后,它标记了行DoCmd.RunSQL strSQL3

我很感激我得到的任何答案。 非常感谢提前。

2 个答案:

答案 0 :(得分:0)

快速谷歌“运行时错误3464”表明这是一种数据类型不匹配。当您尝试将日期值保存在字符串字段或类似内容中时,通常会看到此内容。

仔细检查传递给SQL语句的类型是否与应保存的列匹配 - 如果发现差异,则应用任何必要的转换。

同样最后一个问题......通过动态构建SQL字符串,您会让自己容易受到SQL注入攻击 - 您应该考虑使用带参数的ADOCommands。

答案 1 :(得分:0)

我的错误是尝试将整数与字符串进行比较。即使你创建一个新条目,sql确实将它从一个整数转换为一个字符串,如果你想在一个地方进行比较,它就不会强制转换它。