Foxtable(狐表)用户栏目专家坐堂 → 建议FoxTable进一步加强对SQL命令的支持!


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

主题:建议FoxTable进一步加强对SQL命令的支持!

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2009/5/14 18:58:00 [只看该作者]

以下是引用cpayinyuan在2009-5-14 18:15:00的发言:

      如果这样可以,直接把SQLcommand改进一下,同时支持两种方式岂不更好?虽然您感觉不值得去考虑,但是改动应该很简单,变动很小,改进后编制代码时会节省一些我们的时间.

  嘿嘿,说了半天,不就是一个for each吗?


Dim cmd As New SQLCommand
Dim sum As Double

Dim Tj,Ts As String
Ts = "Select * From {订单} where Month(日期) = 1"
Ts = Ts & "/Select * From {订单} where Month(日期) = 3"
Ts = Ts & "/Select * From {订单} where Month(日期) = 10"

for each Tj In Ts.split("/")
    cmd.CommandText = Tj
    sum = sum + cmd.ExecuteReader().compute("sum(数量)")
Next
msgbox(sum)


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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/15 7:58:00 [只看该作者]

以下是引用fox在2009-5-14 18:30:00的发言:

我见过执行多长SQL语句的,技术上应该没有问题,老六还是再考虑考虑吧


支持多长的SQL语句,是否允许多条SQL语句组合在一起执行,这些都取决于你所使用的数据源,和foxtable并无关系。


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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/5/18 11:40:00 [只看该作者]

以下是引用cpayinyuan在2009-5-14 12:50:00的发言:
       另外,以前我提过一个问题,就是如果使用SQL命令修改了表,并不会立即显示在表中,必须重新加载表才会显示,所以,在这种情况下就需要反复的使用Load命令加载表,在实际中很不方便,又影响速度,看能否改进一下,用SQL命令修改表后,自动修改狐表中的Table,以使显示的表与保存的表一致!
   

    贺老师,这个能不能想办法实现?
   另外,除了这个,使用SQL更新数据还有一个比较麻烦的问题,就是DataList的显示与数据库中的表,狐表中的表相互都不同步!.如果使用狐表的命令编辑表,不但会立即显示在Table中,而且会立即显示在DataList中(不需要使用DataList的build),即修改表时在保存之前就已经显示在Table中和DataList中,所以,仅需要再保存一下即可.而若用SQL命令更新表,表更新后不但不会更新Table,而且,即使使用Load命令重新加载表,加载后的表也不会同步更新DataList,如果想要把更新后的表显示在DataList中,需要把Datatable重新加载后,再重新加载一次DataList(即再build一次).而DataList的Build又非常非常慢,这样既麻烦又浪费了大量时间!
    尽管如此,当多用户联网使用时,使用SQL命令编辑数据仍然有着很大的优势,所以,希望狐表能够提供对SQL命令的进一步支持!

[此贴子已经被作者于2009-5-18 11:43:15编辑过]

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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/5/18 12:08:00 [只看该作者]

以下是引用cpayinyuan在2009-5-18 11:40:00的发言:

    贺老师,这个能不能想办法实现?
   另外,除了这个,使用SQL更新数据还有一个比较麻烦的问题,就是DataList的显示与数据库中的表,狐表中的表相互都不同步!.如果使用狐表的命令编辑表,不但会立即显示在Table中,而且会立即显示在DataList中(不需要使用DataList的build),即修改表时在保存之前就已经显示在Table中和DataList中,所以,仅需要再保存一下即可.而若用SQL命令更新表,表更新后不但不会更新Table,而且,即使使用Load命令重新加载表,加载后的表也不会同步更新DataList,如果想要把更新后的表显示在DataList中,需要把Datatable重新加载后,再重新加载一次DataList(即再build一次).而DataList的Build又非常非常慢,这样既麻烦又浪费了大量时间!
    尽管如此,当多用户联网使用时,使用SQL命令编辑数据仍然有着很大的优势,所以,希望狐表能够提供对SQL命令的进一步支持!

[此贴子已经被作者于2009-5-18 11:43:15编辑过]

补充:我总结一下,目前的狐表中用SQL命令直接修改表,并显示到DataList中需要以下3步:
(1)使用Update 或 Insert 修改数据或增加行.
(2)使用Datatables("表名").load重新加载表
(3)使用DataList的build重新加载数据列表.(加载时还需要考虑DataList的加载条件).

   但若使用狐表的操作表的命令,第2步和第3步都是不需要的(由系统自动完成),仅需要保存表一次即可.
所以,我建议在使用Sql命令操作表时,第(2)步和第(3)步能否也由系统自完成,这样可以节约大量的时间.尤其是第3步,DataList 的Build非常慢,如果系统能只把数据表文件中变化的行的数据自动重写到Table/DataTable/DataList中,可以节约大量的时间.


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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/18 12:30:00 [只看该作者]

1、看来你的DataList是邦定到DataTable的,那么有2就行。
2、不管是Table还是DataTable,数据都是和DataTable同步的。


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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/5/18 12:36:00 [只看该作者]

以下是引用狐狸爸爸在2009-5-18 12:30:00的发言:

1、看来你的DataList是邦定到DataTable的,那么有2就行。
2、不管是Table还是DataTable,数据都是和DataTable同步的。

好像不太对.我用SQL命令修改了表,这时候显示的表没有改变,然后用Load重新加载表, 表中的数据变了,但DataList中的数据仍然没有变,只有重新build之后,DataList的数据才改变.(备注:我的DataList绑定的表不是在窗口中设置的帮定,是在进入窗口事件中用代码设置的绑定,不知是否与这个有关系?


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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/18 12:44:00 [只看该作者]

当然要直接绑定到DataTable,才能同步。

不单单是你,我在论坛见到很多这用户都这样,用SQL上瘾了,明明数据在DataTable中加载了,明明直接绑定到DataTable就行,偏偏还要用代码+SQL生成一个临时DataTable,然后再绑定到DataList.
这是极端不合理的、画蛇添足的设计,因为这样等于要多次从后台提取数据,不但效率低下,而且导致数据不能同步。
[此贴子已经被作者于2009-5-18 12:44:25编辑过]

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


加好友 发短信
等级:三尾狐 帖子:719 积分:5181 威望:0 精华:1 注册:2008/9/24 10:41:00
  发帖心情 Post By:2009/5/18 13:10:00 [只看该作者]

以下是引用狐狸爸爸在2009-5-18 12:44:00的发言:
当然要直接绑定到DataTable,才能同步。

不单单是你,我在论坛见到很多这用户都这样,用SQL上瘾了,明明数据在DataTable中加载了,明明直接绑定到DataTable就行,偏偏还要用代码+SQL生成一个临时DataTable,然后再绑定到DataList.
这是极端不合理的、画蛇添足的设计,因为这样等于要多次从后台提取数据,不但效率低下,而且导致数据不能同步。
[此贴子已经被作者于2009-5-18 12:44:25编辑过]

一针见血呀.我就是这样干的.呵呵.


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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2009/5/18 13:15:00 [只看该作者]

以下是引用don在2009-5-14 18:58:00的发言:

  嘿嘿,说了半天,不就是一个for each吗?


Dim cmd As New SQLCommand
Dim sum As Double

Dim Tj,Ts As String
Ts = "Select * From {订单} where Month(日期) = 1"
Ts = Ts & "/Select * From {订单} where Month(日期) = 3"
Ts = Ts & "/Select * From {订单} where Month(日期) = 10"

for each Tj In Ts.split("/")
    cmd.CommandText = Tj
    sum = sum + cmd.ExecuteReader().compute("sum(数量)")
Next
msgbox(sum)

改进一下
Dim cmd As New SQLCommand
Dim sum As Double

Dim Tj,Ts As String
Ts = "Select sum(数量) as 数量 From {订单} where Month(日期) = 1"
Ts = Ts & "/Select sum(数量) as 数量 From {订单} where Month(日期) = 3"
Ts = Ts & "/Select sum(数量) as 数量 From {订单} where Month(日期) = 10"

for each Tj In Ts.split("/")
    cmd.CommandText = Tj
    sum = sum + cmd.ExecuteScalar()
Next
msgbox(sum)


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


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/5/18 14:26:00 [只看该作者]

以下是引用狐狸爸爸在2009-5-18 12:44:00的发言:
当然要直接绑定到DataTable,才能同步。

不单单是你,我在论坛见到很多这用户都这样,用SQL上瘾了,明明数据在DataTable中加载了,明明直接绑定到DataTable就行,偏偏还要用代码+SQL生成一个临时DataTable,然后再绑定到DataList.
这是极端不合理的、画蛇添足的设计,因为这样等于要多次从后台提取数据,不但效率低下,而且导致数据不能同步。
[此贴子已经被作者于2009-5-18 12:44:25编辑过]

     贺老师说得有理。但是,在使用DataList的时候,我从不画蛇添足的非要用SQL,但在有时候的确很有必要。主要是基于速度的考虑和多用户有同时操作的考虑。
     例如:在DataList中显示一个比较复杂的查询结果。不知是否还记得我上次提出的查询不重复部门的年龄最大的记录列表。我认真比较过,一模一样的数据,如果用SQL查询,需要将近20秒;如果采用论坛上老师提供的狐表加辅助列的办法用狐表的命令,则需要30多秒。同样的数据下会慢差不多一半,我不得不选择用SQL查询。当然,如果是DataList中直接查询一个表的数据,我是不会非要拐个弯用SQL查询的。
    在这种情况下,个人认为即使是一个虚拟的Datatable与DataList动态绑定,当DataTalbe数据改变的时候,DataList也应同步更新。记得当时贺老师也是这样说的,但实际上,根本不会动态更新,除非重新Build.


 回到顶部
总数 36 上一页 1 2 3 4 下一页