以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请教版主获取网页数据项目的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=95141) |
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 10:27:00 -- 请教版主获取网页数据项目的问题 http://youjia.chemcp.com/YuanYouJiaGe.asp
想获得油价表格中的数据并保存到“国际市场油价数据表”中
参考这个例子:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=49278
我做得项目总有错误提示,紧接着我的整个预览窗口都无法关闭了,只能关闭整个进程,并且获取不到任何数据,清版主指导。
项目文件:
|
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 10:39:00 -- 好像web.Document.GetElementById("container")这个也不对,这个数据表没有 ID |
||||
-- 作者:有点色 -- 发布时间:2017/1/11 10:53:00 -- Dim web As New System.Windows.Forms.WebBrowser() Do Until web.ReadyState = 4
Dim elems As object = web.Document.GetElementsByTagName("table")(5).GetElementsByTagName("tr") |
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 11:02:00 -- 有点色版主效率越来越高了。 顺利获取数据,能把重复的数据删除了吗?如果存在相同的数据,就不再录入相同的了。因为要通过计时器自动获取数据,当前网页上有几天的数据,每天自动检查一遍,如果不剔除重复的数据的话,就会有多条相同的数据(录入时间不同)。
[此贴子已经被作者于2017/1/11 11:07:52编辑过]
|
||||
-- 作者:有点色 -- 发布时间:2017/1/11 11:20:00 -- 获取各列的值,这样写
tdelems(0).Innertext tdelems(1).Innertext tdelems(2).Innertext
那么,你合并成条件,然后find表格,不就行了? |
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 11:29:00 -- 不太明白。你的意思是,判断表格中的数据,包括名称,涨跌额,涨跌幅等,如果存在相同的,然后find? |
||||
-- 作者:有点色 -- 发布时间:2017/1/11 11:44:00 -- 1、请读懂代码;
2、直接合成条件查表,如果存在,就不新增数据 |
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 11:50:00 -- 一会儿测试如下方案是否可行 http://www.foxtable.com/help/index.htm?page=2481.htm Select Case e.DataCol.name
Case "型号","规格" Dim dr As DataRow = e.DataRow If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then If e.DataTable.Compute("Count([_Identify])","型号 = \'" & dr("型号") & "\' And 规格 = \'" & dr("规格") & "\'") > 1 Then MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入 End If End If End Select |
||||
-- 作者:有点色 -- 发布时间:2017/1/11 11:52:00 -- 你获取数据的时候,不是可以直接查找是否已经存在相同数据吗?判断名称和日期,就行。 |
||||
-- 作者:天若千颖 -- 发布时间:2017/1/11 12:38:00 -- Select Case e.DataCol.name Case "名称","发布日期" Dim dr As DataRow = e.DataRow If dr.IsNull("名称") = False AndAlso dr.IsNull("发布日期") = False Then If e.DataTable.Compute("Count([_Identify])","名称 = \'" & dr("名称") & "\' And 发布日期 = \'" & dr("发布日期") & "\'") > 1 Then MessageBox.Show("已经存在相同名称和发布日期的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入 End If End If End Select 把这个代码直接放在DataChanged中,虽然能投提示已经存在相同的行,但是同样会保存相同的数据。 Select Case e.DataCol.name Case "名称","发布日期" Dim xh As String Dim gg As String If e.DataCol.Name= "名称" Then xh = e.NewValue gg = e.DataRow("发布日期") Else gg = e.NewValue xh = e.DataRow("名称") End If If xh > "" AndAlso gg > "" Then Dim dr As DataRow = e.DataRow If e.DataTable.Find("名称 = \'" & xh & "\' And 发布日期 = \'" & gg & "\'") IsNot Nothing Then MessageBox.Show("已经存在相同名称和发布日期的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel = True End If End If End Select 把上述代码放在DataChanging中也无效。 [此贴子已经被作者于2017/1/11 12:51:21编辑过]
|