Foxtable(狐表)用户栏目专家坐堂 → 双击行弹出窗口报错


  共有3615人关注过本帖树形打印复制链接

主题:双击行弹出窗口报错

美女呀,离线,留言给我吧!
采菊东篱下
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/18 18:17:00 [只看该作者]

3楼你改后回传的双击弹窗菜单栏点单据录入按钮也有这问题。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/18 18:50:00 [只看该作者]

其实弹出的窗口菜单就是管理窗口里的同一菜单,为什么在窗口管理中不报错,在双击行弹出的窗口上报错。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/18 19:23:00 [只看该作者]

会不会是Forms("收款凭证").Controls("lblState").text = "2"的问题,Forms("收款凭证").Controls("lblState").text = "1"是新建单据,Forms("收款凭证").Controls("lblState").text = "2"是录入了数据的单据,在窗口中点预览,窗口中没数据的,不报错,当改为Forms("收款凭证").Controls("lblState").text = "2"时是有数据的,于是报错。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/19 9:52:00 [只看该作者]

调试步骤
1、测试双击打开窗口才会有问题,在窗口设计预览就没有问题,说明是双击事件代码的问题
2、打开双击事件代码,只保留打开窗口的代码,注释其它代码测试,没有问题,说明问题在注释掉的代码里
3、逐行启用注释的代码测试,发现启用给TextBox2控件赋值的代码后,就会有问题,说明问题和这个控件有关
            Forms("出纳录入收款数据").Controls("rq").text = e.Row("日期")
            Forms("出纳录入收款数据").Controls("dh").text = e.Row("出纳入账顺序号")
            Forms("出纳录入收款数据").Controls("dh1").text = e.Row("出纳账安日期生成单号辅助列")
            Forms("出纳录入收款数据").Controls("TextBox2").text = e.Row("前缀") & ":"
4、检查这个控件,没有任何事件代码,那就应该是用到这个控件的其它控件的代码有问题
5、往上看赋值使用到的控件是dh1,也没有事件代码,再往上看,dh控件有“Validating”事件代码,注释这个代码测试后没有问题,说明问题在这里
6、结合错误提示【标准表达式中数据类型不匹配。】,“Validating”事件用到表达式的只有使用的sql里,说明sql合并的查询条件有问题
7、逐个去掉查询条件测试,发现添加 【[出纳入账顺序号] = '" & ydh & "'"】 后出错,查看表结构 [出纳入账顺序号] 是双精度列,原因就出来了:http://www.foxtable.com/webhelp/topics/1284.htm

表达式中的日期用符号#括起来,数值则不需要任何符号括起来,这些和代码中的格式是一样的,唯一不同的是字符串用单引号括起来。

例如:

Tables("订单").Filter = "[产品] = 'PD01'"  '字符用单引号括起来
Tables("订单").Filter = "[日期] = #3/17/1999#"  '日期用#括起来
Tables("订单").Filter = "[折扣] = 0.1"  '数值直接使用


最后自己思考一下,为什么给TextBox2控件赋值后才会出错


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/19 14:25:00 [只看该作者]

   谢谢你这么仔细一步步地教我查找,并认真解释给我看,出纳入账顺序号列是双精度小数这是新建的项目出现的错误,我原项目是整数,数值列不用单引号,在看到错误提示时早已一行行代码检查过很多很多遍了,现在根据你指出的问题改过来,错误提示依然存在。
 Forms("出纳录入收款数据").Controls("TextBox2").text = e.Row("前缀") & ":"
必须加冒号,因为出纳数据记账源表的前缀列是没有冒号的。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.foxdb



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/19 14:28:00 [只看该作者]

请自行调试,找到错误的代码

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/19 16:04:00 [只看该作者]

结合错误提示【标准表达式中数据类型不匹配。】,“Validating”事件用到表达式的只有使用的sql里,说明sql合并的查询条件有问题,不明
Dim ydh As String = Forms("出纳录入收款数据").Controls("dh").text
Dim ydh1 As String = Forms("出纳录入收款数据").Controls("dh1").text
If ydh > "" And ydh1 > "" Then
    Dim y As Integer = cint(ydh1.substring(3,4))
    Dim m As Integer = cint(ydh1.substring(7,2))
    Dim Days As Integer = Date.DaysInMonth(y,m)
    Dim fd As Date = New Date(y,m,1) '获得该月的第一天
    Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
    If e.sender.value < "#" & fd & "#" OrElse e.sender.value > "#" & ld & "#" Then
        e.cancel = True '如果是,取消操作
        MessageBox.Show("修改的日期不能超出已保存单号所属月份","提示")
    End If
End If
在窗口中测试,能弹出提示窗口,已是我要的效果。这样写还有什么问题?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/19 16:09:00 [只看该作者]

sql有问题,改sql,和上面红色代码有什么关系
[此贴子已经被作者于2022/3/19 16:08:48编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/3/19 17:17:00 [只看该作者]

valueChanged中的Sql吗?那只是查找是否存在被删除的空号,如果存在就等于它,上面的代码是限制修改日期不得超过已录入当月日期。
'以这代码为准:
Dim yzdh As WinForm.TextBox = e.Form.Controls("dh")'dh是单号控件
Dim yzdh1 As WinForm.TextBox = e.Form.Controls("dh1")'dh是单号控件
Dim di As Integer = yzdh.Value 'di单号控件中的变量
Dim di1 As String = yzdh1.Value 'di单号控件中的变量
Dim d As Date  = e.Sender.Value
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim Days As Integer = Date.DaysInMonth(y,m)
Dim fd As Date = New Date(y,m,1) '获得该月的第一天
Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天
Dim Max0 As String
Dim max1 As String
Dim idx1 As Integer
If e.Sender.value IsNot Nothing Then
    Dim s As String = e.Form.Controls("TextBox2").text
    If s.length > 2 Then
        s = s.SubString(0,2)
        Dim bh As String = s & "-" & Format(d,"yyyyMM") & "-" '生成编号的前缀
        If e.Form.Controls("lblState").text = "1" Then '如果财务数据源表不存在控件上的凭证号和出纳账安日期生成单号辅助列,或当前窗口是新增单据.
            Dim kh As Integer
            Dim cmd As New SQLCommand
            cmd.CommandText = "Select top 1 MIN(出纳入账顺序号) FR OM {出纳数据记账源} Where 出纳入账顺序号 NOT IN (SELECT 出纳入账顺序号 FR OM {出纳数据记账源} Where [日期] >= #" & fd & "# And [日期] <= #" & ld & "# And [前缀] = '" & s & "')"
            kh = cmd.ExecuteScalar()
            If kh > 0 Then
                di = kh
                yzdh.Value = di
                di1 = bh & Format(di,"00000")
                yzdh1.Value = di1
            Else
                Dim flt As String = "[前缀] ='" & s & "'And [日期] >= #" & fd & "# And [日期] <= #" & ld & "#"
                Max0 = DataTables("出纳数据记账源").SQLCompute("Max(出纳入账顺序号)",flt) '取得该月的相同工程代码的最大单据编号
                If Max0 > "" Then '如果存在最大单据编号
                    yzdh.Value = di + 1
                Else
                    di = 1 '否则顺序号等于1
                    yzdh.Value = di
                End If
                max1 = DataTables("出纳数据记账源").SQLCompute("Max(出纳账安日期生成单号辅助列)",flt) '取得该月的相同工程代码的最大单据编号
                If max1 > "" Then '如果存在最大单据编号
                    idx1 = CInt(max1.Substring(10,5)) + 1 '获得最大单据编号的后五位顺序号,并加1
                    di1 = bh & Format(idx1,"00000")
                    yzdh1.Value = di1
                Else
                    idx1 = 1 '否则顺序号等于1
                    di1 = bh & Format(idx1,"00000")
                    yzdh1.Value = di1
                End If
            End If
        End If
    End If
End If
没改sql,改了di和kh的数据类型,依然报错。
[此贴子已经被作者于2022/3/19 22:17:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/3/19 17:30:00 [只看该作者]

麻烦再认真的看看14楼。

dh控件的“Validating”事件,错误代码 【[出纳入账顺序号] = '" & ydh & "'"】,至于怎么改......

表达式中的日期用符号#括起来,数值则不需要任何符号括起来,这些和代码中的格式是一样的,唯一不同的是字符串用单引号括起来。

例如:

Tables("订单").Filter = "[产品] = 'PD01'"  '字符用单引号括起来
Tables("订单").Filter = "[日期] = #3/17/1999#"  '日期用#括起来
Tables("订单").Filter = "[折扣] = 0.1"  '数值直接使用



 回到顶部
总数 21 上一页 1 2 3 下一页