以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- web数据源疑似bug (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=178071) |
-- 作者:lgzhao -- 发布时间:2022/6/16 16:49:00 -- web数据源疑似bug SQL server 2019数据库。搭建了服务端的web数据源。 客户端在直连数据库的情况下没有问题。 切换到web数据源之后,定位到如下错误: 窗口表,类型“SQLTable”, 在该表的datacolchanging 事件中执行如下代码报错: Dim cmd As New SQLCom mand cmd.Connect ionName=_ConnectionName \'******************************************** cmd.Comm andText = "SE LECT * FROM {SalesOrdsForDispatch} where SalesON=\'" & e.DataRow("SalesON") & "\'" \'******************************************** Dim stb As DataTable = cmd.ExecuteReader(True) ===================================== 测试定位的错误代码是 Dim stb As DataTable = cmd.ExecuteReader(True)这一句。 报错信息: 注意,上述代码当我直接做成在一个窗口按钮内执行,则没有问题。目前仅发现在表的datacolchanging事件内执行就会报错。 我怎么也无法发现自己的问题,恳请提供帮助。 [此贴子已经被作者于2022/6/16 16:50:09编辑过]
|
-- 作者:lgzhao -- 发布时间:2022/6/16 17:00:00 -- 2022-01-30开发版 |
-- 作者:lgzhao -- 发布时间:2022/6/16 17:28:00 -- 被查询的数据库表的结构如下,都是用foxtable创建的表,(系统列无法打印出来) {SalesOrdsForDispatch}的结构 DispatchNo() ----> 字符型(16) SalesON() ----> 字符型(16) PartNo(Part) ----> 字符型(16) BayNo() ----> 字符型(16) DueDate(Due_Date) ----> 日期型 DueTime(Due_Time) ----> 字符型(25) Direction() ----> 字符型(40) Address_Street() ----> 字符型(100) Address_Suburb() ----> 字符型(50) address_City() ----> 字符型(40) Weight(Wt(T)) ----> 双精度小数 MaxLth(L(m)) ----> 双精度小数 BranchID() ----> 字符型(25) Progress_Stock(Progress_Stk) ----> 字符型(16) CnBProgress(Progress_CnB) ----> 字符型(16) CageProgress(Progress_Cge) ----> 字符型(16) Notes() ----> 字符型(255) SiteContact() ----> 字符型(103) OrderDate() ----> 日期型 DateDelivered(DateDlvd) ----> 日期型 CustomerID() ----> 字符型(16) StockMoved(Dlvd) ----> 逻辑型 Pickup(PkUp) ----> 逻辑型 Printed(Prtd) ----> 逻辑型 StockLocation(Location) ----> 字符型(25) SiteFeed_TimeDelivered() ----> 日期型 SiteFeed_UserName() ----> 字符型(40) SiteFeed_CustomerSignee() ----> 字符型(40) SiteFeed_HavePhotos() ----> 逻辑型 SiteFeed_Note() ----> 字符型(150) Status(STS) ----> 字符型(16) TruckLoading_TimeStarted() ----> 日期型 TruckLoading_TimeFinished() ----> 日期型 TruckLoading_Storemen() ----> 字符型(80) MarkedReady_Time() ----> 日期型 MarkedReady_By() ----> 字符型(30) CustON() ----> 字符型(150)
|
-- 作者:lgzhao -- 发布时间:2022/6/16 17:30:00 -- 我进一步测试,将被查询的表名换成其他表,则没有错误。所以怀疑是这个表的某些列带来的问题。其他的就无从得知了。 |
-- 作者:有点蓝 -- 发布时间:2022/6/16 17:30:00 -- 最新版我测试没有问题 |
-- 作者:lgzhao -- 发布时间:2022/6/16 17:37:00 -- 嗯。这块最近动过吗? 注意必须在上述的datacolchanging事件中测试,不然我即使用出问题的被查询的表名在外面按钮内执行,在web数据源也是没有问题的。 |
-- 作者:lgzhao -- 发布时间:2022/6/16 18:15:00 -- 进一步测试,我发现问题的焦点在于数据库内表的名字。我把表名字改短了,代码执行则没有问题。 一旦把名字改回去,无论是数据库内用老名字创建新表,还是如何折腾,必定报错。 所以问题的焦点就在于: 1. 必须在 sql table的datacolchanging事件内执行 2. 被查询的数据库表名字是"SalesOrdsForDispatch", (我怀疑是名字长度太长?但奇怪的是在其他地方执行sql则无问题) 3. 必须是web数据源 为以防其他因素,请使用窗口名字"SaleOrderDetais",窗口内的表名字"SalesOD", 表类型选择的是"SQLTable" sql server 2019数据源。 做到以上几点必定可以复现。 |
-- 作者:lgzhao -- 发布时间:2022/6/16 19:03:00 -- 又试了下把表名字改长了,也没有问题。就是一用那个表名字就有问题。真见鬼了。 |
-- 作者:lgzhao -- 发布时间:2022/6/16 20:09:00 -- 终于把整个项目内几百处代码涉及该表的表名字都改成了新的名字。都改完之后,同样故障又再次出现。那么现在开始怀疑datacolchanging事件在web数据源下触发有bug [此贴子已经被作者于2022/6/16 20:09:18编辑过]
|
-- 作者:lgzhao -- 发布时间:2022/6/16 20:31:00 -- 将 Dim stb As DataTable = cmd.ExecuteReader(True) 改成了 Dim stb As DataTable = cmd.ExecuteReader() 去掉了这个true,问题暂时得到了解决。 但如此可以推断以上相关事件、web数据源、sql命令之间应该存在某种关联性的bug
|