Foxtable(狐表)用户栏目专家坐堂 → 每100行执行一次。。。


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

主题:每100行执行一次。。。

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
每100行执行一次。。。  发帖心情 Post By:2017/10/19 23:52:00 [只看该作者]

导入券号一次 只能到100个,我索性就一次一行(也就是一个券号)导入,
然后库存 +1

但是感觉这样效率很低,每一行都要去调用微信的接口,而不是100行100行地调用
但是这个一次100行的遍历的低级问题却不知道怎么写。。。
以下是我之前的代码
For Each r As Row In Tables("导入券").Rows
    Dim qh As String = r("券号")
    Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
    Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
    Dim jo As New JObject
    jo("card_id") = kaid
    jo("code") = qh
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    r("是否已导入") = "1"    
'以上是导入券的代码
'以下是让券的库存+1的代码

    Dim url1 As String = "https://api.weixin.qq.com/card/modifystock?access_token={0}"
    Dim hc1 As New HttpClient(CExp(url1,Functions.Execute("GetAccessToken")))
    Dim jo1 As New JObject
    jo1("card_id") = kaid
    jo1("increase_stock_value") = 1
    hc1.Content = jo1.ToString()
    jo1 = JObject.Parse(hc1.GetData)
Next
[此贴子已经被作者于2017/10/19 23:51:53编辑过]

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/10/20 9:05:00 [只看该作者]

一次导入100个卡卷可以这样

Dim maxCount As Integer = 100
Dim ja As Jarray
Dim count As Integer = Tables("导入券").Rows.Count
Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
Dim jo As New JObject
jo("card_id") = kaid
For i As Integer = 0 To count Step maxCount '按maxCount的数据进行分组
    ja = new Jarray
    Dim n = Math.Min(i + maxCount - 1,count )
    For j As Integer = i To n '添加当前组的项目到集合
        ja.Add(Tables("导入券").Rows(j)("券号"))
        Tables("导入券").Rows(j)("是否已导入") = 1
    Next
    jo("code") = ja
    hc.Content = jo.ToString()
    hc.GetData
Next

至于修改库存接口只能一个个来,只能分开处理,投放完成后再重新循环之前投放的卡卷进行修改了

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/20 9:09:00 [只看该作者]

Dim tb As Table = Tables("表A")
Dim prs As Integer = 20 '每页20行
For p As Integer = 0 To math.Ceiling(tb.Rows.Count / prs) - 1
    For r As Integer = p * prs To math.min(tb.Rows.Count - 1,( p + 1) * prs - 1)
        output.show(r)
    Next
    output.show("--------------")
Next

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/20 10:24:00 [只看该作者]

谢谢甜老师!!
我试一下!!

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 15:59:00 [只看该作者]

甜老师,这样可以批量导入,但是有个问题:
每导10个(我是设成10个导一次),第一个10个会成功导入,第二个就会出现这个问题:
第一个弹出错误:
请求被中止: 连接被意外关闭。
第二个弹出错误
Error reading JObject from JsonReader. Path '', line 0, position 0.
[此贴子已经被作者于2017/10/22 16:09:15编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/22 16:36:00 [只看该作者]

msgbox弹出返回的内容,看报什么错?

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 17:18:00 [只看该作者]

第一次的10行弹出的是导入成功的内容。

接下去就是依次弹出那两个错误。
第一个弹出错误:
请求被中止: 连接被意外关闭。
第二个弹出错误
Error reading JObject from JsonReader. Path '', line 0, position 0.


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 17:50:00 [只看该作者]

甜老师,我换种方法,可以成功!
Dim ja As Jarray
Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
Dim jo As New JObject
jo("card_id") = kaid
ja = new Jarray
Dim count As Integer = Tables("不定向卡券导入券号").Rows.Count
If Count >= 10 Then
    For j As Integer = 0 To 9 '添加当前组的项目到集合
        ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
    Next
    
    jo("code") = ja
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    output.Show(jo.ToString)
    
    For j As Integer = 0 To 9 '添加当前组的项目到集合
        Tables("不定向卡券导入券号").Rows(j)("是否已导入") = "1"
    Next
    
    Dim drs As List(Of DataRow)
    drs = DataTables("不定向卡券导入券号").Select("是否已导入 = '1'")
    For Each dr As DataRow In drs
        dr.Delete
    Next
    Dim btn As WinForm.Button = e.Form.Controls("Button2")
    btn.PerformClick() '模拟单击
Else
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
    Next
    
    jo("code") = ja
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    output.Show(jo.ToString)
    
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        Tables("不定向卡券导入券号").Rows(j)("是否已导入") = "1"
    Next
    
    Dim drs As List(Of DataRow)
    drs = DataTables("不定向卡券导入券号").Select("是否已导入 = '1'")
    For Each dr As DataRow In drs
        dr.Delete
    Next
End If

305条用了16'

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171022175550.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/10/22 17:55:25编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/22 19:52:00 [只看该作者]

贴出你本来写的代码。你每次都要重新 New HttpClient 的。


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 22:32:00 [只看该作者]

哦,甜老师,那意思是这样:
Dim maxCount As Integer = 100
Dim ja As Jarray
Dim count As Integer = Tables("导入券").Rows.Count
Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
Dim jo As New JObject
jo("card_id") = kaid
For i As Integer = 0 To count Step maxCount '按maxCount的数据进行分组
Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))   '这句放在循环里哈
    ja = new Jarray
    Dim n = Math.Min(i + maxCount - 1,count )
    For j As Integer = i To n '添加当前组的项目到集合
        ja.Add(Tables("导入券").Rows(j)("券号"))
        Tables("导入券").Rows(j)("是否已导入") = 1
    Next
    jo("code") = ja
    hc.Content = jo.ToString()
    hc.GetData
Next



 回到顶部
总数 16 1 2 下一页