以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何查找后台数据,找到后加载并对其进行更新修改?!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135675)

--  作者:qtxsp
--  发布时间:2019/5/31 17:13:00
--  如何查找后台数据,找到后加载并对其进行更新修改?!

1、外部数据库与数据源,启动系统后,当前表已打开,未导入数据(用[_Identify] is null )过滤。

2、问题描述(设计主要思路):(1)通过 find 查找判断有无数据,有就更新此数据(此步正常)。(2)如没有,则通过 SQLFind 对外部数据源后台数据进行查找,发现有数据,(3)则通过datatables("全省网点余额").Loadfilter(条件) 与.load 语句来载入数据,同时通过.find 来定位记录,对此记录进行更新数据。 (以下用黄底标注)

   

  问题发现:

  (1)没有导入外部已经存在与查找到的数据记录;以前好象可以正常执行,导入后台数据并实施更新(实际上后台是有此数据的)。最近发现,无法实现此功能了。

  (2)一是后台数据没有找到或找到未载入当前数据表中,或无法定位;二是实施了新增记录的代码(见如下的桔黄色底的代码),百思不得其解,


敬请老师指导,代码错了哪了?谢谢。



以下附近代码:


For Each file As String In filesys .GetFiles("D:\\百度云同步盘\\丽水\\数据\\金融客管系统\\网点余额"\'获取该目录下的所有文件集

    If file.EndsWith(".xls"OrElse file.EndsWith(".xlsx"Then

        Dim Book As New XLS.Book(file)

        Dim Sheet As XLS.Sheet = Book.Sheets("页面1_1"\'打开工作表

        Dim LB As String = left(right(sheet(4,0).Text,4),2\'是否是代理数据

        If Lb <> "代理" Then

            MessageBox.show("对不起,当前数据(" & lb & ")不是代理网点数据,无法执行,任意键退出!","警告!",messageboxbuttons.ok)

            Return

        End If

        

        Dim rq As Date = sheet(4,4).Text

        Dim rq1 As String = sheet(4,4).text

        Dim rq_y As String = left(rq1.trim(" "),4)

        Dim rq_m As String = Format(rq.month,"00")         

        If IsDate(rq1Then  \'确定表达式expression能否转换成日期格式. len(rq1.trim(" ")) = 10 And

            MessageBox.show("当前月份[" & rq_y & "年 " & rq_m & "月]!","警告!",messageboxbuttons.ok)

        Else

            MessageBox.show("当前日期[" & rq1 & "]格式错误,请按[YYYY-MM-DD]重输!","警告!",messageboxbuttons.ok)

            Return

        End If

        For n As Integer = 8 To Sheet.Rows.Count -1

            Dim jgdm As String = sheet(n,0).Text

            jgdm=jgdm.trim(" ")

            Dim je As Double = val(sheet(n,1).Text)

            \' If  MessageBox.Show("je =" & je & "]  行,将对其进行更新!选【 Y 】中止!"," 提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then

            \'     Return

            \' End If

            If ( je = 0 OrElse je = Nothing OrElse jgdm = " " ) Then \'1

                Continue For

            Else

                Dim dr As DataRow = DataTables("全省网点余额").Find("年度= \'" & rq_y & "\' and 网点名称 = \'" & jgdm & "\'","年度 DESC")

                If dr Is Nothing  Then

                    \'If  MessageBox.Show("到后台找 " & rq_y & "  网点名称=[" & jgdm & "]的行,将对其进行更新!选【 Y 】中止!"," 提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then

                    \'    Return

                    \'End If

                    Dim lsdm,ls_s,ls_x,ls_find As String

                    ls_find = "年度= \'" & rq_y & "\' and 网点名称 = \'" & jgdm & "\'"

                    dr = DataTables("全省网点余额").SQLFind(ls_find,"年度 DESC")

                    If dr IsNot Nothing Then \'如果不存在同日期与机构代码的,将增加数据(自动过滤机构代码为空的行数)

                        DataTables("全省网点余额").LoadFilter = ls_find

                        DataTables("全省网点余额").Load

                        dr = DataTables("全省网点余额").Find(ls_find,"年度 DESC")

                        dr("ye" & rq_m & "") = je \'sheet(n,1).text \'期末余额

                        Continue For

                    Else

                        Dim dr1 As DataRow = DataTables("全省网点余额").SQLFind(" 网点名称 = \'" & jgdm & "\'","网点名称")

                        If dr1 IsNot Nothing Then

                            lsdm = dr1("机构号")

                            ls_s = dr1("市")

                            ls_x = dr1("县")

                            

                        Else  \'找不到在机构代码中查找,

                            Dim dr2 As DataRow = DataTables("机构代码").SQLFind(" 网点名称 = \'" & jgdm & "\'")

                            If dr2 IsNot Nothing Then

                                lsdm = dr2("老机构号")

                                ls_s = dr2("市")

                                ls_x = dr2("县")

                                

                            ElseIf dr2 Is Nothing Then

                                If MessageBox.Show("第n=[" & (n+1) & "]行  单位 =" & jgdm & "; 金额= " & je & " 找不到此单位,请记录!选【 Y 】中止!"," 提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then

                                    Return

                                Else

                                    Continue For

                                End If

                            End If

                        End If

                        dr =  DataTables("全省网点余额").AddNew()

                        dr("年度") = rq_y

                        dr("机构号") = lsdm

                        dr("市") = ls_s

                        dr("县") = ls_x

                        dr("ye" & rq_m & "") = je \'sheet(n,1).text \'期末余额

                        Continue For

                    End If

                End If

                If e.Form.Controls("checkbox1").Checked = True Then

                    dr("ye" & rq_m & "") = je \'sheet(n,1).text \'期末余额

                End If

                

                application.Doevents

                

                

            End If

        Next

    End If

Next

\'End If

Tables("全省网点余额").ResumeRedraw()

DataTables("全省网点余额").save


--  作者:有点甜
--  发布时间:2019/5/31 18:17:00
--  

如果你的年度列,是整数列,改成下面这样子那个

 

ls_find = "年度= " & rq_y & " and 网点名称 = \'" & jgdm & "\'"


--  作者:qtxsp
--  发布时间:2019/5/31 18:59:00
--  
“年度”列是字符型数据啊!


--  作者:qtxsp
--  发布时间:2019/5/31 19:00:00
--  
但“网点名称”列是表达式列,有没有关系?


--  作者:qtxsp
--  发布时间:2019/5/31 19:02:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:aa.jpg
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2019/5/31 20:14:00
--  
Find可以使用表达式列,sqlfind不能使用表达式列。因为sqlfind是从数据库查数据的,而表达式是不存在数据库的
--  作者:qtxsp
--  发布时间:2019/5/31 20:43:00
--  
正是如此,谢谢!又懂得了一个知识点!狐表,越用越喜欢。