以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  事务报错,如何处理?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193609)

--  作者:lgz518
--  发布时间:2024/9/29 16:07:00
--  事务报错,如何处理?
需求:如果表A 分组是经理或总经理,表A的审核 = \'已审核\',审核人 = _Name,审核日期 = Date.Today(),表B的当前数量 = 当前数量+表A.数量,否则,提示("你无审核权限!") \'否则,提示无审核权限,\'回滚事务。
附件中代码报错,如果解决?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建 文本文档 (3).zip



--  作者:有点蓝
--  发布时间:2024/9/29 17:11:00
--  
表A的表结构是怎么样的? _Group 是列名?
--  作者:lgz518
--  发布时间:2024/9/29 18:41:00
--  
表A结构:日期,进货编号,审核,审核人,审核日期,
表C结构:进货编号,产品编号,单位,单价,数量
表B结构:产品编号,单位,单价,当前数量,
用户表结构:用户名Group
_Group 是Group的全局变量

--  作者:有点蓝
--  发布时间:2024/9/29 20:16:00
--  
表A是怎么和分组关联的。表A.审核人= 用户表. 用户名?
--  作者:lgz518
--  发布时间:2024/10/9 11:18:00
--  
下面代码是没有用事务进行审核,可以正常运行,
现想改用事务来实现:如果授权人对表A审核成功,将改变表B的产品的数量,也就是表A审核后的产品的数量加到表B的产品的数量,
如果失败则回到原来,如何实现?

审核事件
 If _Group = "经理" Or _Group = "总经理" Then \' 
    Tables("窗口_Table1").Current("审核") = "已审核" \'
    Tables("窗口_Table1").Current("审核人") = _Name \'
    Tables("窗口_Table1").Current("审核日期") = Date.Today() \'
    Tables("窗口_Table1").Current.Save() \'保存
Else
    MessageBox.show("你无审核权限!")            
End If


数据加载
Dim db = HySq-l.DataBaseFactory.CreateDatabase("t04") \'
If _Group = "经办" Then
    Dim Sq-l = "selec-t * from  表A  where  用户ID =" & _用户ID & " ;"
    Dim dt As system.data.DataTable = db.ExecuteDataSet(Sq-l).Tables(0)
    Dim t As Table = e.Form.Controls("Table1").Table
Else
    Dim Sq-l2 = "Selec-t  a.*,b.jID  " & _
    "From   " & _ 
    "表A   as  a   " & _ 
    "Inner Join    " & _ 
    "gxb  as  b  " & _ 
    "On  " & _ 
    "(a.用户ID = b.用户ID) " & _
    " Where " & _ 
    "b.jID =" & _用户ID & " ; "
    Dim dt2 As system.data.DataTable = db.ExecuteDataSet(Sq-l2).Tables(0)
    Dim t2 As Table = e.Form.Controls("Table1").Table
End If

--  作者:有点蓝
--  发布时间:2024/10/9 11:24:00
--  
要全部使用sql处理,比如:

Dim db = HySql.DataBaseFactory.CreateDatabase() \'获取数据库对象
Dim tran = db.BeginTransaction() \'开始一个事务
Dim sql As String = "UPDATE 表A SET 列1 = \'xxx\',列2=\'xxx\' WHERE xx列  = \'xxx\';" 
Try 
    Dim res As Integer = db.ExecuteNonQuery(tran, sql) 
    If res = 0 Then 
        db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
        msgbox("取消事务") 
    Else
        Dim sql2 As String = "UPDATE 表B SET 列1 = \'xxx\',列2=\'xxx\' WHERE xx列  = \'xxx\';"
        res = db.ExecuteNonQuery(tran, sql2)
        If res = 0 Then 
            db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
            msgbox("取消事务") 
        Else
            db.CommitTransaction(tran, True) \'提交事务,同时关闭数据库连接
            msgbox("执行成功")
        End If
    End If 
Catch ex As Exception 
    db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
    msgbox("取消事务,原因:" & ex.Message) 
End Try 

--  作者:lgz518
--  发布时间:2024/10/9 13:37:00
--  
If _Group = "经理" Or _Group = "总经理" Then \'
    \'    Tables("窗口_Table1").Current("审核") = "已审核" \'
    Tables("窗口_Table1").Current("审核人") = _Name \'
    Tables("窗口_Table1").Current("审核日期") = Date.Today() \'
    
    Dim tran = db.BeginTransaction() \'开始一个事务
    \'Dim sq-l As String = "UPDA-TE  表A  SET 审核 = \'已审核\',审核人 = _Name,审核日期 = Date.Today()   WHERE   _Group = \'经理\' Or _Group = \'总经理\';"
    Dim sq-l As String = "UPDAT-E  表A  SET 审核 = \'已审核\';"
    
    Try 
        Dim res As Integer = db.ExecuteNonQuery(tran, sq-l) 
        If res = 0 Then 
            db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
            msgbox("取消事务") 
        Else

           Dim sql2 As String = "UPDAT-E  表C SET   当前数量 = 当前数量+ 表B.数量   WHERE   产品编号 = 表B.产品编号;"
           res = db.ExecuteNonQuery(tran, sq-l2)

报错:Unknown column \'表B.产品编号\' in \'where clause\',如何处理?

            If res = 0 Then 
                db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
                msgbox("取消事务") 
            Else
                db.CommitTransaction(tran, True) \'提交事务,同时关闭数据库连接
                msgbox("执行成功")
            End If
        End If 
    Catch ex As Exception 
        db.RollbackTransaction(tran, True) \'回滚事务,同时关闭数据库连接
        msgbox("取消事务,原因:" & ex.Message) 
    End Try
   
Else
    MessageBox.show("你无审核权限!") \'否则,提示无审核权限
End If

--  作者:有点蓝
--  发布时间:2024/10/9 13:52:00
--  
使用的什么数据库?
--  作者:lgz518
--  发布时间:2024/10/9 15:16:00
--  
数据库MYSQL
--  作者:有点蓝
--  发布时间:2024/10/9 15:17:00
--  
https://www.baidu.com/s?wd=mysql%20update%20%E5%85%B3%E8%81%94%E6%9B%B4%E6%96%B0