Foxtable(狐表)用户栏目专家坐堂 → SQL函数


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

主题:SQL函数

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
SQL函数  发帖心情 Post By:2014/3/9 12:13:00 [只看该作者]

Dim Val As Double
Val =
DataTables("订单").SQLCompute("Sum(数量 * 单价 * (1 - 折扣))","产品 = 'PD01'")
Output
.Show(Val)

类似于这样的函数 这个表必须在前台吗,不加载不行? 如果这样意义不大呀

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


加好友 发短信
等级:狐神 帖子:4761 积分:34613 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2014/3/9 12:19:00 [只看该作者]

数据可以不加载

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By:2014/3/9 13:08:00 [只看该作者]

数据我知道可以不加载 我说的是表

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


加好友 发短信
等级:狐神 帖子:4761 积分:34613 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2014/3/9 13:18:00 [只看该作者]

表是必须的
俺咨询过
当然不如直接用sql
[此贴子已经被作者于2014-3-9 13:18:20编辑过]

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By:2014/3/9 15:17:00 [只看该作者]

鱼和熊掌不可兼得呀

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/3/9 16:06:00 [只看该作者]

用SQLCommand,生成的DataTable,灵活方便。

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/3/9 16:34:00 [只看该作者]

以下是引用jianjingmaoyi在2014-3-9 12:13:00的发言:
Dim Val As Double
Val =
DataTables("订单").SQLCompute("Sum(数量 * 单价 * (1 - 折扣))","产品 = 'PD01'")
Output
.Show(Val)

类似于这样的函数 这个表必须在前台吗,不加载不行? 如果这样意义不大呀

应该不是一定要加载到前台吧。DataTables("订单")就是一个DataTable ,动态加载也可也指定啊。

 

 

动态加载还是要用到SQLCommand ,但对SQL语句不熟的人还是有吸引力的,语句简单了很多。

 

我试了一下这个,

 

Dim dt As DataTable

Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "SELECT TOP 1 * From 订单 "     
dt = cmd.ExecuteReader()
Dim Val As Double
Val = dt.SQLCompute("Sum(数量 * 单价 * (1 - 折扣))","产品ID = 'P01'")
Output.Show(Val)


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


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By:2014/3/9 23:22:00 [只看该作者]

逛逛说的对,这节帮助后面介绍了:

 

http://www.foxtable.com/help/topics/2916.htm

 

另一种执行方式

 

DataTable的所有后台处理方法,当然都要基于DataTable运行,所以上面的示例中,我们加载了一个空的行政区域表,然后基于此空表处理后台的行政区域表的数据。
虽然我们可以通过代码在Foxtale的主界面中隐藏这个空表,但还是有一定程度的不便,而且有较多数量只需后台处理不需要加载数据的表时,还会加大系统对资源的消耗。
如果愿意,我们可以考虑另一种方式,通过SQL语句生成一个临时表,基于这个临时表执行后台数据处理方法。

 

首先我们在全局代码中定义一个变量:

Public xzqy As DataTable

 

然后在AfterOpenProject事件中加上代码:

 

Dim cmd As New SQLCommand
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {行政区域} Where [省市] Is Null"
xzqy
 = cmd.ExecuteReader

 

上面的代码生成一个空的临时表,保存在全局变量xzqy中,这个临时表对应后台的行政区域表。

现在我们就可以通过此临时表处理后台的行政区域表的数据了,例如:

 

Tables("客户").Cols("省市").Combolist = xzqy.SQLGetComboListString("省市")

[此贴子已经被作者于2014-3-9 23:22:14编辑过]

 回到顶部