Foxtable(狐表)用户栏目专家坐堂 → [求助]datatable相关方法的异步改造【已解决】


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

主题:[求助]datatable相关方法的异步改造【已解决】

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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
[求助]datatable相关方法的异步改造【已解决】  发帖心情 Post By:2018/12/24 9:26:00 [只看该作者]

由于网页异步改造,原来使用datatable的方法也需要改造成sql语句,但是这样工作量偏大,能否重新构建一个类或方法,按照原来方法的格式
比如
原来的 
Dim dr As DataRow
dr = DataTables("产品").Find("产品编号 = '03'"'找出编号为03的产品

是否可以自己构建一个类似的方法
Dim dr As DataRow
dr = xDataTables("产品").xFind("产品编号 = '03'"'找出编号为03的产品
来达到相同的效果?


[此贴子已经被作者于2018/12/27 20:04:41编辑过]

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


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


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2018/12/25 11:56:00 [只看该作者]

Dim dr As DataRow
dr = xDataTablesFind("数据库名","产品","产品编号 = '03'"'找出编号为03的产品

做成这个方式倒是可以,但是这个也不好快速替换
最好就是
dr = xDataTables("数据库名","产品").xFind("产品编号 = '03'"
能不能做成这个形式?
依葫芦画瓢,云里雾里,甜版能做个范例么?谢谢


[此贴子已经被作者于2018/12/25 11:56:32编辑过]

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


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


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2018/12/26 9:16:00 [只看该作者]

Public Class myTableCollection

Public Sub new
End Sub

Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Table)
Return foxtable.Tables.GetEnumerator
End Function


Default Public readonly Property Item(tname As String) As Table
Get
If Foxtable.Tables.Contains(tname) Then
    Return Foxtable.Tables(tname)
Else
    msgbox("测试,不存在表【" & tname & "】")
    Return Nothing
End If
End Get
End Property

Public readonly Property count() As Integer
Get
Return foxtable.Tables.count
End Get
End Property

Public readonly Property contains(tname As String) As Boolean
Get
Return foxtable.Tables.contains(tname)
End Get
End Property

End Class

Public mytables = new myTableCollection

readonly Property Tables As myTableCollection
Get
Return mytables
End Get
End Property


代码能解读一下吗?

这代码是调整系统table的方法的功能吗?

那么datatable的SQLFind方法也能自己调整吗?

如果改写成能在异步环境下使用的,需要怎么改呢?

如果官方能直接修改这个方法,让他适用异步环境,那就更好了!


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


加好友 发短信
等级:超级版主 帖子:106207 积分:540158 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/12/26 10:01:00 [只看该作者]

datatable暂时无法支持异步

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


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

以下是引用浙江仔在2018/12/26 9:16:00的发言:


代码能解读一下吗?

这代码是调整系统table的方法的功能吗?

那么datatable的SQLFind方法也能自己调整吗?

如果改写成能在异步环境下使用的,需要怎么改呢?

如果官方能直接修改这个方法,让他适用异步环境,那就更好了!

 

代码是调整替换tables的方法,这样处理以后,调用tables("xxx")就可以跳转到你自己的代码那里控制了。

 

1、同样的,你也可以改成datatable。请先看懂代码。

 

2、如果觉得替换成datatable有可能影响本来的datatable的功能,你也可以改成xdatatable。请先看懂代码。

 

3、关键看懂下面的用法

 

readonly Property Tables As myTableCollection
Get
Return mytables
End Get
End Property


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2018/12/27 15:13:00 [只看该作者]

甜版,需要支援:
1、Datatables(),改成xDatatables() 已经根据可以改好了,不知道是不是对的。
2、SQLFind,改成xFind,使用sqlcommand返回相关数据(datarow),需要怎么放在哪里?之前在全局代码定义了一个xFind(),但是不能和xDatatables()连接在一起,需要单独定义一个参数,用于确定表名,如果去掉表名这个参数,直接和xDatatables("表名").xFind(Filter,Sort,Index),该怎么做?

Public Class xdDataTables
Public Sub new
End Sub
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of DataTable)
Return foxtable.DataTables.GetEnumerator
End Function

Default Public readonly Property Item(tname As String) As DataTable
Get
If Foxtable.DataTables.Contains(tname) Then
Return Foxtable.DataTables(tname)
Else
msgbox("测试,不存在表【" & tname & "】")
Return Nothing
End If
End Get
End Property

Public readonly Property count() As Integer
Get
Return foxtable.DataTables.count
End Get
End Property
Public readonly Property contains(tname As String) As Boolean
Get
Return foxtable.DataTables.contains(tname)
End Get
End Property

End Class

Public mydatatables = new xdDataTables

readonly Property xDataTables As xdDataTables
Get
Return mydatatables
End Get
End Property



自己定义的函数:

Public Function  xdFind(stable As String , Filter As String,Optional Sort As String =""  ) As DataRow

Dim Index As Integer=0 
If DataTables.Contains(stable) =False  Then
msgbox("不存在"+stable)
Return Nothing
End If
Dim sname As String=DataTables(stable).ConnectionName
Dim cmd As new SQLCommand
Dim dt As DataTable
cmd.ConnectionName = sname
If sort > "" Then
cmd.CommandText ="sel ect  * from " + stable +" where " + Filter +  " order by " + sort
Else
cmd.CommandText = "sel ect  * from " + stable +" where " + Filter
End If

dt = cmd.ExecuteReader(True) 

If dt.DataRows.count>0 Then
Return dt.DataRows(Index)
End If

End Function



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


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

在你的 xdDataTables 类里面,定义函数即可。也就是拷贝代码进去。

 

要增加什么属性、方法,都在class里面定义即可。


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


加好友 发短信
等级:六尾狐 帖子:1316 积分:9484 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2018/12/27 15:53:00 [只看该作者]

Public Class xdDataTables
Public Sub new
End Sub
Private dname As String
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of DataTable)
Return foxtable.DataTables.GetEnumerator
End Function

Default Public readonly Property Item(tname As String) As DataTable
Get
If Foxtable.DataTables.Contains(tname) Then
    dname =tname
    Return Foxtable.DataTables(tname)
Else
    msgbox("测试,不存在表【" & tname & "】")
    Return Nothing
End If
End Get
End Property

Public readonly Property count() As Integer
Get
Return foxtable.DataTables.count
End Get
End Property
Public readonly Property contains(tname As String) As Boolean
Get
Return foxtable.DataTables.contains(tname)
End Get
End Property


Public readonly Property xFind(Filter As String,Optional Sort As String =""  ) As DataRow
get

Dim sname As String=Foxtable.DataTables(dname).ConnectionName
Dim cmd As new SQLCommand
Dim dt As DataTable
cmd.ConnectionName = sname
If sort > "" Then
    cmd.CommandText ="se lect  * from " + dname +" where " + Filter +  " order by " + sort
Else
    cmd.CommandText = "se lect  * from " + dname +" where " + Filter
End If
dt = cmd.ExecuteReader(True)

If dt.DataRows.count>0 Then
    Return dt.DataRows(0)
End If
End get
End Property


End Class

Public mydatatables = new xdDataTables

readonly Property xDataTables As xdDataTables
Get
Return mydatatables
End Get
End Property

还不行

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





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