Foxtable(狐表)用户栏目专家坐堂 → [求助]ACCESS中执行和狐表窗口执行的SQL结果不同


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

主题:[求助]ACCESS中执行和狐表窗口执行的SQL结果不同

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]ACCESS中执行和狐表窗口执行的SQL结果不同  发帖心情 Post By:2018/6/16 10:39:00 [显示全部帖子]

SQL见附件。
实际试验结果是:
在ACCESS中直接把WBS01和WBS02分别复制到这里
FROM ((WBS01的SQL)as  WBS01 LEFT JOIN (WBS02的SQL) as  WBS02 …………,然后运行,结果正确。

但如果把复制的结果放到FT的窗口中执行,结果就会与ACCESS中直接执行的结果不符,这是为什么呢?。
Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "WBS03的SQL"

在FT中应当如何组装这个WBS03的SQL?

Dim dt As DataTable = cmd.ExecuteReader()

第二个问题:如果在窗口中使用like [TbWBS].[C] & ".*" 就会出现错误结果,如果把*换成%就可以是正确结果。----是不是在FT中执行SQL时不能用*作为通配符?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档 (4).txt

[此贴子已经被作者于2018/6/16 10:46:14编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/6/16 11:45:00 [显示全部帖子]

测试数据库
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试输出20180616.zip



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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/6/16 14:27:00 [显示全部帖子]

这个问题我是无意中发现的,所以,每次在ACCESS里写了SQL之后,复制出来,都把*替换为%然后执行。

现在我是觉得WBS03的SQL里,需要把WBS01的SQL复制两次,一次是WBS01本身,一次是WBS02里也要用到WBS01的SQL。
是必须要这样吗?

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/6/16 14:57:00 [显示全部帖子]

但是WBS01里有条件,这个条件还是变化的。比如ProID,就是项目的ID,它要根据不同的项目,传这个参数进去。
用狐表提供的组合多个查询的方式,倒是可以部分实现,但是在数据量比较大的情况下,比直接SQL执行的效率还是低好多。

前面的逻辑就是:
有一个商品分类表,它的层次结构是用1,1.2,1.2.1这样来识别的。然后末级分类下面有明细。
现在要通过这个月的商品明细的进出情况,找到它的分类直到顶级,然后汇总数量。

WBS01就是通过本月商品的明细找到上级分类。
WBS02就是找到分类在各个月的累计数量
WBS03就是把本月分类的数量和累计数量展示在一起。

这个ProID就相当于各个分店一样
当然,这只是一个比方,不是说就拿这个来说,应当用其它的方式来实现
[此贴子已经被作者于2018/6/16 14:59:08编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/6/19 16:02:00 [显示全部帖子]

再请教:
WHERE (((TbModD.ProID)="dd95073e-69a5-4213-93df-a732df87dd97") AND ((TbModD.ModID)="7d7bc6fe-b046-4991-8fde-4f72951405e8") AND ((TbWBS_1.C) Like [tbwbs].[C] '.%' Or (TbWBS_1.C)=[tbwbs].[C]))

在ACCESS中执行时,在数据量大的情况下(比如tbwbs的数据有10000行),就卡在那里不动了,一直在显示“正在执行查询”。
象这种情况,该如何优化?

这里的C都是用的1,1.2,1.2.3,1.2.3.1,1.2.3.2这样的来表示层级关系的
[此贴子已经被作者于2018/6/19 16:28:50编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/6/19 17:49:00 [显示全部帖子]

我的想法,是否可以把不涉及到父节点的数据,在数据库端形成以后,加载到FT中。
然后再在FT中,根据这些加载的数据,把父节点相关的数据整出来,然后合并?

 回到顶部