Foxtable(狐表)用户栏目专家坐堂 → 帮看下这个代码错在哪?


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

主题:帮看下这个代码错在哪?

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
帮看下这个代码错在哪?  发帖心情 Post By:2009/2/4 19:22:00 [只看该作者]

DataTables("编辑").DeleteFor("[总号] <> DataTables("编辑").current("总号")")
先谢谢了!

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/2/4 19:51:00 [只看该作者]

改进后:
DataTables("编辑").DeleteFor("[总号] <> '" & DataTables("编辑").current("总号") & "'")
还是不对,说 current is not a menber of 'datatable' ? 不懂啊,难道还要定义它?

我的意思是:删除与当前行的'总号'不相等的其他的行!

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/2/4 20:22:00 [只看该作者]

自己搞定:
dim zh as integer  = Tables("编辑").Current("总号")
DataTables("编辑").DeleteFor("[总号] <> '" & zh & " '")    'ok了

或:DataTables("编辑").DeleteFor("[总号] <> '" & Tables("编辑").Current("总号")  & " '")  '也行

但不明白:代码中【& DataTables("编辑").current("总号") &】【& Tables("编辑").Current("总号")  &】在这里有什么区别???

狐友们、版主老师们请解释一下好吗?

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/2/4 20:37:00 [只看该作者]

下面的概念非常重要,务必要掌握。

DataTable和Table

假定在一个简化的订单管理系统中,包括产品、客户、订单三个表:

FoxTable中有一个集合DataTables,通过该集合可以获得指定名称的表,例如:

DataTables("产品"'产品表
DataTables
("客户"'客户表
DataTables
("订单"'订单表

实际上你是看不到DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是三个Table。
那么什么是Table呢?你可以这样理解,DataTable就像一个后台的数据仓库,不直接面对用户;而Table是前台,他从仓库(DataTable)中取得数据,然后呈现给用户。
同样,FoxTable中也有一个集合Tables,通过该集合可以获得指定名称的Table,在没有建立关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是:

Tables("产品")
Tables
("客户")
Tables
("订单")

在初始的情况下,Table会从DataTable中提取所有数据呈现给用户,如果你设置了筛选条件,Table就会从DataTable提取符合条件的数据,然后呈现给用户。

所以关于DataTable和Table的关系,较为完整的描述是:

  • 所有数据都是存放在DataTable中的,它就像一个数据仓库,不直接面对用户;而Table是负责和用户打交道的,它根据指令从仓库(DataTable)中提取符合条件的数据,然后呈现给用户;通过菜单进行的日常数据管理工作,例如增加行、删除行、排序、筛选、汇总等等,都是在Table中进行的;除了编程,用户没有办法直接对DataTable进行操作,因为它是不可见的。
     
  • 在任何时候,DataTable都包括所有行,而且行始终是按照加入的顺序排序。
     
  • Table中的行,即可排序,也可以筛选,所有Table中行的数量和顺序都是可变化的,我们平时所看到的、所操作的,都是Table中的行。
     
  • 我们在Table中进行的任何操作,最终都会反映到DataTable,例如我们通过菜单在Table中删除,DataTable也会删除一行。

关联表和Table

假定在上面这个简化的订单管理系统中,我们建立如下两个关联:

父表 子表 关联列
产品 订单 产品编号
客户 订单 客户编号

因为关联的建立,DataTable和Table不再是一一对应的关系,例如我选择产品表的时候,就会出现三个Table,分别是:

三个Table的作用为:

Tables("产品"):主表,用于显示所有产品
Tables("产品.订单"):如果在Tables("产品")中选定一个产品,这里会显示该产品的全部订单。
Tables("产品.订单.客户"):如果在Tables("产品.订单")中选定一个订单,这里会显示该订单所属的客户。
 

同样在选择客户表的时候,也会出现三个Table:

Tables("客户")
Tables("客户.订单")
Tables("客户.订单.产品")

而选择订单表,出现的三个Table为:

Tables("订单")
Tables("订单.产品")
Tables("订单.客户")

由此我们可以看出,同一个DataTable可以有多个Table,例如下面三个Table:

Tables("产品")
Tables("订单.产品")
Tables("客户.订单.产品")

它们的数据全部来自于DataTables("产品")。

DataTable的数量是固定的,Table的数量随着关联的增加而增加,同一个DataTable可以有多个Table,每个Table都各取所需地从DataTable中提取数据呈现给用户。


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/2/4 21:41:00 [只看该作者]

谢谢程版主,我看过了这段的帮助,只是没转过湾来,内容太多了,越看越糊涂,特别是最后一句!。

谁能用自己的语言结合代码例子简单的表达一下?


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


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

假定有一个订单表,这个表有1000行,假定其中100个订单是订购产品PD01的,我们在该表筛选出PD01的订单,现在你在订单表看到的行数是100行。

我们在窗口执行下面的代码:

For Each r As Row in Tables("订单").Rows
    r(
"折扣") = 0.2

Next

上面的代码,将你看到的100行(订购PD01的订单)的折扣设为0.2。

我们再来测试下面的代码:

For Each dr As DataRow in DataTables("订单").DataRows
    dr(
"折扣") = 0.2

Next

上面的代码所有1000行(全部订单)的折扣设为0.2

总之,如果你要对看得见的行进行操作,你就用Table,如果你要对所有行进行操作,你就用DataTable.


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/2/4 21:50:00 [只看该作者]

以下是引用狐狸爸爸在2009-2-4 21:44:00的发言:

..........

 

总之,如果你要对看得见的行进行操作,你就用Table,如果你要对所有行进行操作,你就用DataTable.

这样说,好理解(虽没有完全领会)! 谢谢您了。


 回到顶部