Foxtable(狐表)用户栏目专家坐堂 → SQL外部数据源进行模糊查找?


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

主题:SQL外部数据源进行模糊查找?

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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
SQL外部数据源进行模糊查找?  发帖心情 Post By:2009/11/2 19:39:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看

说明:整个出库主表与出库明细均为SQL外部数据源
      打开窗口时动态加前TOP 100

窗口中的表格为TABLE副本,如何进行如上图所示的模糊查找?(要求在整个外部数据库中查找)


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试项目.table

[此贴子已经被作者于2009-11-2 19:40:26编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/2 23:42:00 [只看该作者]

文件点了半天没打开。
SQL SERVER 数据源用
WHERE 字段 like '%关键字%' 


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2009/11/3 8:03:00 [只看该作者]


    
        Dim dst As Table = Tables("某表")
        Dim txb1 As WinForm.TextBox = .Controls("TextBox1")
        Tables("窗口中的Table").Filter = "[列名1] Like '*" & txb1.text & "*' or [列名2] Like '*" & txb1.text & "*'"    

    放在textbox的文本值改变的事件中.列名自己加.
       
      

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2009/11/3 8:12:00 [只看该作者]

 上面的代码只能用于已加载的数据,对于你这个还可以利用动态加载的方法查询.

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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
  发帖心情 Post By:2009/11/3 9:22:00 [只看该作者]

以下是引用lxl在2009-11-2 23:42:00的发言:

文件点了半天没打开。
SQL SERVER 数据源用
WHERE 字段 like '%关键字%' 

文件可以打开,请重试


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


加好友 发短信
等级:小狐 帖子:363 积分:2998 威望:0 精华:0 注册:2008/11/11 13:42:00
  发帖心情 Post By:2009/11/3 9:24:00 [只看该作者]

以下是引用blackzhu在2009-11-3 8:12:00的发言:
 上面的代码只能用于已加载的数据,对于你这个还可以利用动态加载的方法查询.

对,我就需要动态加载的查询,代码是怎么样的,有例子吗?


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/3 9:52:00 [只看该作者]

ExecuteReader示例

我们知道SQLCommand的ExecuteReader方法用于生成一个临时的DataTable。
我们知道动态生成查询的时候用QueryBuilder。
动态生成外部表的时候用OuterTableBuilder。
而GroupTableBuilder和CrossTableBuilder也可以直接统计后台数据,只需将其FromServer属性设为True即可。
那么SQLCommand提供的ExecuteReader方法,会有实际的用途吗?
一般来说,如果没有动态加载数据,而是一次性将所有数据加载到DataTable中,那么ExecuteReader确实没有什么用。
如果采用动态加载数据,那么数据表中的数据就不完整,此时ExecuteReader就派上用场了。

示例一

本示例可以参考CaseStudy目录下的文件“动态加载演示.Table”

假定你有一个订单表,也许有几百个产品,上十万个订单,那么将其全部载入到Foxtable中是不现实的。
能不能用一个目录树列出所有的产品和客户,当我们双击某个产品或客户时,才加载对应的订单呢?
实现这样的功能,其实很简单:

1、首先我们参考大容量数据的管理,使得打开项目的时候,订单表不会加载任何数据。

2、然后新建一个窗口,窗口中插入一个目录树(TreeView),窗口的AfterLod事件代码设为:

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.CommandText =
"SELECT DISTINCT 产品,客户 From {订单}"
dt = cmd.ExecuteReader()

Dim
trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildDataTree(dt, "",
"产品", "客户"
)

这样一旦打开窗口,该目录树列出所有的产品和客户。
由于订单表只是加载了部分数据,所以我们不能直接根据订单表来生成目录树,因为订单表的数据不完整,只能用ExecuteReader方法直接从后台提取完整的产品和客户数据。
注意Select语句中,一定要有DISTINCT关键词,这样返回的才是不重复的产品和客户名单,虽然对目录树的生成没有影响,但是会大大降低数据加载量,对于网络环境,这是非常重要的。

3、最后将目录树的NodeMouseDoubleClick事件设为:

Dim Value()As String
Dim
Filter As string
Value = e.Node.FullPath.Split(
"\")
Select
Case e.Node.Level
   
Case 0
        Filter =
"[产品] = '" & Value(0) & "'"
   
Case 1
        Filter =
"[产品] = '" & Value(0) & "' And [客户] = '" & Value(1) & "'"
End
Select
DataTables
("订单").LoadFilter = Filter
DataTables
("订单"
).Load()

这样我们只需双击某个节点,既可动态加载对应的订单。


此主题相关图片如下:无标题.jpg
按此在新窗口浏览图片
CasteStudy目录下还提供了外部数据源动态加载数据的例子,文件名为:动态加载数据(外部数据源).Table
为便于大家测试学习,使用了Access作为外部数据源,如果采用SQL Server,请修改或删除项目事件BeforeConnectOuterDataSource中的代码。

示例二

同样,假定窗口中有一个组合框(ComboBox),希望这个窗口能够列出订单表所有的客户名称,如果订单表采用动态加载,那么显然无法从订单表中获得所有客户名称,只能利用ExecuteReader直接从后台提取:

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
cmb As WinForm.ComboBox
cmd.CommandText =
"SELECT DISTINCT 客户 From {订单}"
dt = cmd.ExecuteReader()
cmb = e.Form.Controls(
"ComboBox1")
cmb.ComboList= dt.GetComboListString(
"客户"
)

上述代码可以设置在窗口的AfterLoad事件中。

示例三

QueryBuilder会生成一个Table,用于显示查询结果。
有的时候你可能希望不是以Table形式,而是以DataList的形式在窗口显示查询结果,可以参考:

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.CommandText =
"SELECT * From {订单} Where 产品 = 'PD01'"
dt = cmd.ExecuteReader()

Dim
dst As WinForm.DataList = e.Form.Controls("DataList1")
dst.
DataTable = dt
dst.Build()




自己试试:)
[此贴子已经被作者于2009-11-3 9:57:55编辑过]

 回到顶部