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


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

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

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望: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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望: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编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望: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方法也能自己调整吗?

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

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


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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望: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



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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望: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
图片点击可在新窗口打开查看





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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2018/12/27 20:04:00 [显示全部帖子]

非常感谢甜版,太开心了

Public Class myDatatables
Public Sub new
End Sub
Public dname As String = ""
Default Public readonly Property Item(tname As String) As myDatatables
Get
dname = tname
Return mytables
End Get
End Property

Public Function xFind(Filter As String,Optional Sort As String =""  ) As DataRow
Dim sname As String=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
Return Nothing
End Function

End Class

Public mytables = new myDatatables
readonly Property xDataTables As myDatatables
Get
Return mytables
End Get
End Property

 回到顶部