苏州三木软件科技有限公司

 找回密码
 立即注册
搜索
热搜: 活动
12
返回列表 发新帖
楼主: 13968559581

窗体里添加删除按钮出错

[复制链接]

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-10 09:29:38 | 显示全部楼层
SanmuGrid 发表于 2022-10-9 22:19
每个表的关联字段都不一样,你确定你能写好通用型的方法?唯一通用型的方法就是平台里面集成的删除功能。不 ...

我指的通用型指的是大多数的情况下,比如说,这种窗体,我一般都用单据编号这个字段来做关联的,在这个前提下,有没有写成通用型删除的方法 。我现在这么写的,有没有办法优化,把这个实际的表名替换掉

                If MessageBox.Show("确定要删除当前行吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes Then
                        Dim tblmain As SmGrid=Proj.CurrentClickedGridMenu.BaseGrid.BaseBaseGrid
                        Dim djbh As String
                        Dim dr As RowData=tblmain.CurrentRowData
                        If dr IsNot Nothing Then
                                djbh=tblmain.CurrentRowData("单据编号")
                                tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
                                Dim db As Database=Proj.SysDataFactory("tzxjbgxt")
                                db.ExecuteNonQuery("delete from szg零工工时明细表 where 单据编号='" & djbh & "'")
                                tblmain.Save
                                'tblsub.Save
                        Else
                                msgbox("请先选择某一行")
                        End If
                End If
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-10 10:33:17 | 显示全部楼层
你这要么就完全自定义,每个窗体都单独写代码。要么就想办法将子表加载出来。要是什么都不加载通用的好写,我自己就写了。
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-12 21:56:25 | 显示全部楼层
SanmuGrid 发表于 2022-10-10 10:33
你这要么就完全自定义,每个窗体都单独写代码。要么就想办法将子表加载出来。要是什么都不加载通用的好写, ...

帮我检查一下,我这个删除逻辑上有没有问题,会不会出现主表删除了,子表没有删除的情况

If MessageBox.Show("确定要删除当前行吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes Then
                        Dim tblmain As SmGrid=Proj.CurrentClickedGridMenu.BaseGrid.BaseBaseGrid
                        Dim djbh As String
                        Dim dr As RowData=tblmain.CurrentRowData
                        If dr IsNot Nothing Then
                                djbh=tblmain.CurrentRowData("单据编号")
                                tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
                                Dim db As Database=Proj.SysDataFactory("tzxjbgxt")
                                db.ExecuteNonQuery("delete from szg零工工时明细表 where 单据编号='" & djbh & "'")
                                tblmain.Save
                                'tblsub.Save
                        Else
                                msgbox("请先选择某一行")
                        End If
                End If
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-12 22:12:03 | 显示全部楼层
如果怕有异常的话,可以考虑使用事务来处理。
  1. If MessageBox.Show("确定要删除当前行吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes Then
  2.         Dim tblmain As SmGrid=Proj.CurrentClickedGridMenu.BaseGrid.BaseBaseGrid
  3.         Dim djbh As String
  4.         Dim dr As RowData=tblmain.CurrentRowData
  5.         If dr IsNot Nothing Then
  6.                 djbh=tblmain.CurrentRowData("单据编号")
  7.                 Dim db As Database=Proj.SysDataFactory("tzxjbgxt")
  8.                 Try
  9.                         '开启事务
  10.                         db.BeginTrans()
  11.                         '先删除子表,注意第二个参数使用统一的事务
  12.                         db.ExecuteNonQuery("delete from szg零工工时明细表 where 单据编号='" & djbh & "'",False)
  13.                         '再删除主表
  14.                         tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
  15.                         '保存的参数表示使用统一的事务
  16.                         tblmain.Save(False)
  17.                         '提交事务
  18.                         db.CommitTrans()
  19.                 Catch ex As Exception
  20.                         '回滚事务
  21.                         db.RollbackTrans()
  22.                         '提示错误信息
  23.                         UnhandledExceptionManager.ShowAndSaveLog(ex)
  24.                 End Try
  25.         Else
  26.                 msgbox("请先选择某一行")
  27.         End If
  28. End If
复制代码
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-14 09:50:43 | 显示全部楼层
SanmuGrid 发表于 2022-10-12 22:12
如果怕有异常的话,可以考虑使用事务来处理。

  我对这个事务有点迷糊,不过我感觉按你的思路,你这个代码是不是还是有点问题,
我现在需要主表和子表确保同步删除,你刚才的代码是不是主表的删除不会按事务处理了,是不是应该改成以下这种效果,也就是两个表都用SQL语句来删除才对

djbh=tblmain.CurrentRowData("单据编号")
                Dim db As Database=Proj.SysDataFactory("tzxjbgxt")
                Try
                        '开启事务
                        db.BeginTrans()
                        '先删除子表,注意第二个参数使用统一的事务
                        db.ExecuteNonQuery("delete from szg零工工时明细表 where 单据编号='" & djbh & "'",False)
                        '再删除主表
db.ExecuteNonQuery("delete from szg零工工时主表 where 单据编号='" & djbh & "'",False)
                       ' tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
                        '保存的参数表示使用统一的事务
                        'tblmain.Save(False)
                        '提交事务
                        db.CommitTrans()
                Catch ex As Exception
                        '回滚事务
                        db.RollbackTrans()
                        '提示错误信息
                        UnhandledExceptionManager.ShowAndSaveLog(ex)
                End Try
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-14 10:55:06 | 显示全部楼层
我提供的代码是按事务处理的,当然前提是主表跟子表是同一个数据源中的。你这种写法也可以,只是得注意要将当前行在表中移除掉,要不然当前主表中的这条记录还在。tblmain.CurrentRowData.Remove()
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-14 10:59:59 | 显示全部楼层
SanmuGrid 发表于 2022-10-14 10:55
我提供的代码是按事务处理的,当然前提是主表跟子表是同一个数据源中的。你这种写法也可以,只是得注意要将 ...

懂了,谢谢,我按你的方法实际使用一段时间看看 主子表会不会一致,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|苏州三木软件科技有限公司 ( 苏ICP备2022038390号 )

苏公网安备 32058502010732号

GMT+8, 2024-7-7 21:15 , Processed in 0.067154 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表