以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 取字符检索问题求教 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=160431) |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:12:00 -- 取字符检索问题求教 我有个需求是这样,取A表的单号查找B表对应记录,但是由于B表首字符存在多种可能性,所以需要把首字符去除再查找。我写了下面的代码报错,求指点 For Each dr As DataRow In DataTables("供应商对账表").DataRows Dim drs As String = dr("单号") Dim gdh As String = drs.SubString(2,7) Dim sq As DataRow sq = DataTables("WH_STOCK").SQLFind("SUBSTRING(\'number\',2,7) = \'"& gdh &"\'") next 其中错误就在SQLFind("SUBSTRING(\'workbillno\',2,7) = \'"& gdh &"\'") ,个人觉得应该是SQLFIND不支持取字符的表达式?如果都不取字符,则代码能正常运行。但是加了取字符的表达式就报错“未将对象引用设置到对象的实例”。
[此贴子已经被作者于2021/2/2 14:19:11编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/2/2 14:13:00 -- 什么数据库? |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:18:00 -- SQL server 2005 |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:20:00 -- 抱歉,代码简化的有点乱了,实际应该是SQLFind("SUBSTRING(\'number\',2,7) = \'"& gdh &"\'") |
-- 作者:有点蓝 -- 发布时间:2021/2/2 14:22:00 -- sq = DataTables("WH_STOCK").SQLFind("SUBSTRING([number],2,len([number]) - 1) = \'" & gdh & "\'") |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:30:00 -- 蓝老师,仍然报错.........首字符后面的字符串长度是固定的,不需要len([number]) - 1,我用了len([number]) - 1和固定数值都报同样错误 |
-- 作者:有点蓝 -- 发布时间:2021/2/2 14:32:00 -- 完整代码发上来 |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:34:00 -- For Each dr As DataRow In DataTables("供应商对账表").DataRows Dim drs As String = dr("G单号") Dim gdh As String = drs.SubString(1,8) Dim sq As DataRow sq = DataTables("WH_STOCK").SQLFind("SubString([workbillno],1,8) = \'"& gdh &"\' and warehouse = \'内仓\' and inorout= \'in\' AND orderdate is not null") dr("workbillno") = sq("workbillno") dr("SupplierName") = sq("SupplierName") dr("CardBoard_l") = sq("CardBoard_l") dr("CardBoard_w") = sq("CardBoard_w") dr("material") = sq("material") dr("sort") = sq("sort") dr("planNumber") = sq("planNumber") dr("InNumber") = sq("InNumber") dr("orderdate") = sq("orderdate") dr("issuedate") = sq("issuedate") dr("Customerno") = sq("Customerno") dr("Itemname") = sq("Itemname") Next
|
-- 作者:有点蓝 -- 发布时间:2021/2/2 14:36:00 -- 示例三 Dim dr As DataRow 如果我们不加上判断,直接: Dim dr As DataRow 一旦订单表并不存在订购数量超过1000的订单,那么Find方法返回Nothing,导致后续代码运行出错。 |
-- 作者:hitzfeld -- 发布时间:2021/2/2 14:43:00 -- 蓝老师,加上判断虽然不报错,但是无法返回任何结果,且界面会卡住大约15秒。 实际上库数据量不大,如果不加取字符的SubString,运行时间不超过1秒。 即使我在sqlfind语句下面加上msgbox(sq(“workbillno”)),也不会返回结果。说明一直都是错误的
[此贴子已经被作者于2021/2/2 14:50:39编辑过]
|