以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  窗口中按钮进行新增多行操作,如何避免命令未执行完毕,而用户关闭了程序,导致数据未新增完整?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140175)

--  作者:guosheng
--  发布时间:2019/8/30 20:16:00
--  窗口中按钮进行新增多行操作,如何避免命令未执行完毕,而用户关闭了程序,导致数据未新增完整?
确定按钮的click事件(一次新增刚估计好几百条), for i=1 ... dim dr as row=tables(...).addnew dr(...)=... dr(...)=... dr.save next
--  作者:有点蓝
--  发布时间:2019/8/30 20:44:00
--  
按钮第一行加上代码:
vars("runing") = true
‘按钮原来其它代码for i=1 ... dim dr as row=tables(...).addnew dr(...)=... dr(...)=... dr.save next
vars("runing") = false

项目BeforeCloseProject事件
if vars("runing") = true then
    e.Cancel = True
    msgbox("请等候命令执行完毕!")
end if

--  作者:guosheng
--  发布时间:2019/8/30 21:34:00
--  
如果用户在新增行的过程中,误以为死机而通过任务管理器强制关闭程序,该如果处理啊?
[此贴子已经被作者于2019/8/30 21:35:07编辑过]

--  作者:有点蓝
--  发布时间:2019/8/30 21:40:00
--  
做个提示,比如:http://www.foxtable.com/webhelp/topics/0793.htm


--  作者:guosheng
--  发布时间:2019/8/30 22:20:00
--  
看帮助有事务处理,不知道能不能解决数据的一致性问题啊?
不知道for和next的位置放的对不对啊?

Try
    Connections("数据源").BeginTransaction() \'开始事务
    Dim cmd As new
SQLCommand
    cmd.ConnectionName = "数据源"

    for i=1 to 100
    cmd.CommandText = "Insert Into 表1 (列名1, 列名2, 列名3....) Values(值1, 值2, 值3...)"
    cmd.
ExecuteNonQuery
    Connections("数据源").Commit \'提交事务,所有操作生效
    next
Catch ex As Exception \'如果出错
    Connections("数据源").Rollback() \'回滚事务,撤销所有操作


End Try
[此贴子已经被作者于2019/8/30 22:20:15编辑过]

--  作者:有点蓝
--  发布时间:2019/8/30 22:22:00
--  
可以,但是循环多,程序一样会卡住

    for i=1 to 100
    cmd.CommandText = "Insert Into 表1 (列名1, 列名2, 列名3....) Values(值1, 值2, 值3...)"
    cmd.
ExecuteNonQuery
    next
    Connections("数据源").Commit \'换一下位置
Catch ex As Exception \'如果出错 
    Connections("数据源").Rollback() \'回滚事务,撤销所有操作

--  作者:guosheng
--  发布时间:2019/9/18 15:26:00
--  

这种导出报表,该怎么用进度条来显示进度啊?感觉应该是在Dim dlg As New SaveFileDialog之前加一个进度条显示,之后加一个进度条显示。不知道该怎么计算程序运行的总体时间。
加了两行打开模式窗口的代码后,程序一直停留在模式窗口这,模式窗口一直没关闭掉,不知道怎么回事。
forms("等待窗口").open()
Dim jb As New SQLJoinTableBuilder("查询表1","租赁项目结转明细表")
jb.C
jb.AddTable("租赁项目结转明细表","合同编号","租赁合同结转情况表","合同编号",JoinModeEnum.Left)
jb.AddCols("{租赁项目结转明细表}.合同编号", "客户名称","房间名称","项目名称","租赁类别","合同开始日期","合同终止日期", "应结转租金税额","应结转租金金额","应结转服务费税额","应结转服务费金额","应结转日期","实际结转日期","红冲确认人","红冲确认日期")
\'jb.AddCols("{租赁项目结转明细表}.合同编号", "客户名称","房间名称","项目名称","租赁类别", "应结转租金税额","应结转租金金额","应结转服务费税额","应结转服务费金额","应结转日期","实际结转日期","红冲确认人")
jb.filter= filter
jb.Build()
DataTables("查询表1").DataCols.Add("不含税租金金额",Gettype(Double), "isnull(应结转租金金额,0)-isnull(应结转租金税额,0)" )
DataTables("查询表1").DataCols.Add("不含税服务费金额",Gettype(Double), "isnull(应结转服务费金额,0)-isnull(应结转服务费税额,0)" )
Tables("查询表1").Cols("不含税租金金额").Move(8)
Tables("查询表1").Cols("不含税服务费金额").Move(11)

forms("等待窗口").close()

Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
     Tables("查询表1").SaveExcel(dlg.FileName,"明细表")  \'保存文件
        Dim Proc As New Process
        Proc.File = dlg.FileName
        Proc.Start()
End If

[此贴子已经被作者于2019/9/18 15:45:05编辑过]

--  作者:有点蓝
--  发布时间:2019/9/18 15:51:00
--  
这种导出无法使用进度条。除非这种循环导出的用法:http://www.foxtable.com/webhelp/topics/1148.htm
--  作者:guosheng
--  发布时间:2019/9/18 15:58:00
--  
导出执行过程中,加了模式窗口(窗口有句话,正在执行稍后……的提示)的打开和关闭,为什么模式窗口打开了,但是一直没有关闭,往下执行啊?应该怎么解决啊。
forms("等待窗口").open()
…… 

forms("等待窗口").close()
[此贴子已经被作者于2019/9/18 16:00:13编辑过]

--  作者:有点蓝
--  发布时间:2019/9/18 16:14:00
--  
模式窗口是阻塞式的,和对话框一样,关闭之前,后面的代码都不会执行的