MS Access VBA SQL 查询运行,但不插入

amzshow

我正在尝试制作一个 MS Access 应用程序,对 VBA 来说相当新,但已用于 MySQL。我遇到的问题是我试图向表中插入值,代码运行时没有给出错误,但表没有更新。任何人都可以帮忙吗?

我主要有这条线的问题:

 db.Execute ("INSERT INTO Transaction ([TranDate], TranItem365, TranAmount, TranOperation) VALUES ( #" & Now() & "# , " & txtTranItem365.Value & ", " & txtTranAmount.Value & ", '" & txtTranOperation.Value & "')")

这是上下文的完整代码。

Private Sub btnApplyTransaction_Click()

Dim db As Database
Dim sql As String
Dim oper As String

Set db = CurrentDb()

If txtTranItem365.ListIndex = -1 Then
    MsgBox "Please select an item.", vbCritical
ElseIf txtTranAmount.Value = "" Then
    MsgBox "Please enter an amount.", vbCritical
ElseIf txtTranOperation.Value = "Issue" And txtIssuedToDept.ListIndex = -1 Then
    MsgBox "Please select a department to issue to.", vbCritical
Else:


    sql = DLookup("[ItmStock]", "Items", "[Itm365]=" & txtTranItem365.Value)

    oper = "+"

    If txtTranOperation.Value = "Issue" Then
        oper = "-"
    End If

    db.Execute ("Update Items set ItmStock = (" & sql & oper & txtTranAmount & ") where Itm365=" & txtTranItem365.Value)
    db.Execute ("INSERT INTO Transaction ([TranDate], TranItem365, TranAmount, TranOperation) VALUES ( #" & Now() & "# , " & txtTranItem365.Value & ", " & txtTranAmount.Value & ", '" & txtTranOperation.Value & "')")
    If txtTranOperation.Value = "Issue" Then
        sql = "32"
        MsgBox "INSERT INTO Issueance values (" & sql & ", " & txtIssuedToDept.Value & ", " & txtIssuedTo.Value & ")"
        db.Execute ("INSERT INTO Issueance values (" & sql & ", " & txtIssuedToDept.Value & ", '" & txtIssuedTo.Value & "')")
    End If

    txtTranAmount.Value = ""
    txtTranItem365 = ""
    txtTranOperation = "Add"
    txtIssuedTo = ""
    txtIssuedToDept = ""
    DoCmd.RefreshRecord
    db.Close

End If

更多上下文:TranDate 是 Date+Time,本质上是 Now() 函数。TranItem365 是一个数字。TranAmount 是一个数字。TranOperation 是 ["Add", "Issue"]。

完美的

从您的表定义解决完整性违规问题后,请考虑使用 MS Access QueryDefs 的参数化查询,以获得更具可读性和可维护性的工作流。

它有助于将 SQL 与 VBA 分开,以避免混乱、难以阅读、容易出错的串联和引用附件。此外,请使用纯 SQL,因为您DLookUp不需要If块,Now()并且可以在查询中使用。

SQL Update Query (另存为查询对象,根据需要调整数据类型)

PARAMETERS txtTranAmountParam Double, txtTranOperationParam Text, txtTranItem365Param Long;
UPDATE [Items] 
SET ItmStock = IIF([txtTranOperationParam] = 'Issue',
                   ItmStock - [txtTranAmountParam],
                   ItmStock + [txtTranAmountParam])
WHERE Itm365 = txtTranItem365Param;

SQL Append Query (另存为查询对象,根据需要调整数据类型)

PARAMETERS txtTranAmountParam Double, txtTranOperationParam Text, txtTranItem365Param Long;
INSERT INTO Transaction ([TranDate], TranItem365, TranAmount, TranOperation) 
VALUES (Now(), [txtTranItem365Param], [txtTranAmountParam], [txtTranOperationParam]);

SQL Append Query (另存为查询对象,根据需要调整数据类型)

PARAMETERS SQLParam Long, txtIssuedToDeptParam Long, txtIssuedToParam Long;
INSERT INTO Issueance VALUES ([SQLParam], [txtIssuedToDeptParam], [txtIssuedToParam])

VBA (引用上述查询对象)

Private Sub btnApplyTransaction_Click()

   Dim db As Database
   Dim upd_qdef As QueryDef, apn_qdef As QueryDef, iss_qdef As QueryDef
   Dim sql As String, oper As String

   Set db = CurrentDb()

   If txtTranItem365.ListIndex = -1 Then
       MsgBox "Please select an item.", vbCritical
       Exit Sub 
   End If
   If txtTranAmount.Value = "" Then
       MsgBox "Please enter an amount.", vbCritical
       Exit Sub 
   End If
   If txtTranOperation.Value = "Issue" And txtIssuedToDept.ListIndex = -1 Then
       MsgBox "Please select a department to issue to.", vbCritical
       Exit Sub 
   End If

   ' ASSIGN QUERYDEFS, BIND PARAMS, AND EXECUTE ACTION
   ' UPDATE
   Set upd_qdef = db.QueryDefs("mySavedUpdateQuery")
   upd_qdef!txtTranAmountParam = txtTranAmount
   upd_qdef!txtTranOperationParam = txtTranOperation.Value
   upd_qdef!txtTranItem365Param = txtTranItem365.Value

   upd_qdef.Execute dbFailOnError

   ' APPEND
   Set apn_qdef = db.QueryDefs("mySavedAppendQuery")
   apn_qdef!txtTranAmountParam = txtTranAmount
   apn_qdef!txtTranOperationParam = txtTranOperation.Value
   apn_qdef!txtTranItem365Param = txtTranItem365.Value

   apn_qdef.Execute dbFailOnError

   If txtTranOperation.Value = "Issue" Then
        Set iss_qdef = db.QueryDefs("mySavedIssueanceAppendQuery")

        iss_qdef!SQLParam = 32
        iss_qdef!txtIssuedToDeptParam = txtIssuedToDept.Value
        iss_qdef!txtIssuedToDeptParam = txtIssuedTo.Value

        iss_qdef.Execute dbFailOnError
   End If

   txtTranAmount.Value = "": txtTranItem365 = "": txtTranOperation = "Add"
   txtIssuedTo = "": txtIssuedToDept = ""

   DoCmd.RefreshRecord

   Set upd_qdef = Nothing: apn_qdef = Nothing: iss_qdef = Nothing
   Set db = Nothing    
End If

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MS Access VBA 运行查询

来自分类Dev

MS Access SQL插入查询

来自分类Dev

MS Access:使用VBA进行SQL插入的日期格式

来自分类Dev

MS Access日期在VBA SQL查询中不起作用

来自分类Dev

MS ACCESS - VBA 中的错误运行时 3141 SQL

来自分类Dev

带子查询的SQL查询上的MS Access VBA运行时错误3075

来自分类Dev

MS Access数据库使用VBA和SQL查询在列上插入值

来自分类Dev

SQL查询可在MS-Access中运行,但不能以vb.net形式实现

来自分类Dev

SQL语法问题MS Access VBA

来自分类Dev

MS Access VBA,SQL脚本:In(),<>和AND语法

来自分类Dev

在Access VBA中运行SQL查询

来自分类Dev

使用 Excel VBA、SQL BETWEEN 日期查询查询 MS Access

来自分类Dev

MS Access查询未从VBA接收参数

来自分类Dev

MS Access VBA 查询多个表

来自分类Dev

DLookup:MS Access VBA 中的查询与表?

来自分类Dev

SQL查询中的MS Access VBA数据类型不匹配错误

来自分类Dev

MS Access-使用vba编辑查询的sql-更改“ SELECT Top n”

来自分类Dev

MS Access VBA IF()

来自分类Dev

Access VBA中的SQL查询

来自分类Dev

通过VBA在MS Access中编辑当前对象的SQL

来自分类Dev

在MS Access中使用Excel VBA进行SQL删除

来自分类Dev

MS Access VBA / SQL检查任何子级

来自分类Dev

使用MS Access插入SQL Server

来自分类Dev

使用MS Access插入SQL Server

来自分类Dev

MS Access UPSERT(更新/插入)SQL

来自分类Dev

MS Access:VBA代码正在导出查询,但不是最新结果

来自分类Dev

将SQl查询转换为MS Access

来自分类Dev

MS Access SQL查询IP地址范围

来自分类Dev

MS ACCESS SQL查询计数不同