Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

生成表错误,同一表既作为源,又作为目标引用

wang decheng  发表于:2009-02-11 10:56:52  
复制

各位高手,我使用联合查询,从[结存],[入库]和[出库]三个表中得到[本期库存].现在要在月初使用生成查询将[本期库存]调到[结存]表,结果出现了标题上的错误提示.

我原先(数年前)也这样做过,当时并没有出现这样的提示啊! 到底我哪里做错了?请提示我一下

 

Top
小龙女 发表于:2009-02-11 11:10:27

把你的例子上传看一下。



wang decheng 发表于:2009-02-11 11:32:14
附上例子,刚刚想偷懒的。另外想问一个问题,union all select ...和union select all...是一回事吗??点击下载此附件

sosopain 发表于:2009-02-11 13:02:10

思路有点混乱

 

如果你只要计算总结存,用直接用查询生成一个结存而不要去记录下来.

 

如果你要记录月结存, 应该把每个月的结存保存下来, 在你的结存表上加入一个标识字段, 然后用追加查询, 而不是生成表查询去覆盖.

 

推荐你用第二个方法, 可以多重校验数据正确性.

 

建议你先在纸上整理一下思路, 理论上, 结存不能算作基本数据,因为结存是根据入出库两个基本数据计算出来的, 保存结存值只会有两个目的, 一是校验, 二是提高实时计算时侯的效率.

 

 

 

 



sosopain 发表于:2009-02-11 13:15:03

另外补充一下,从你的例子来看, 你的库存查询缺少一个时间范围, 可能是你还在原始的验证阶段, 库存管理上最重要的sql的运用, 这个是个纯逻辑,纯纸面的活儿.

 

我做库存管理的经验是, 先把整个思路和需求写下来, 然后分解成一个一个的行为,  像你的示例,有些联合查询是没有必要的.



wang decheng 发表于:2009-02-11 14:04:10

版主的指点完全正确。思路确实有点混乱。

我已经把上期结存[tblstock]按你的指点增加了日期字段,月初使用追加查询将库存数,日期自动追加.

请问联合查询[qrystock]要如何做才能只取出[tblstock]中最后一次的数据?看过人家用dlast函数,但是不会用

点击下载此附件

sosopain 发表于:2009-02-11 14:16:16

SELECT * FROM tblstock WHERE (日期=DMax("日期","tblstock"));

 

dlast是取最后一条记录,,,你是要取最后一天的所有记录, 用dmax比较好,但是如果你不是同一天结存就有麻烦, 如果你是严格按照月来结存, 可以只用年月做标识.

 

 



wang decheng 发表于:2009-02-11 16:05:01

jason版主,

这回我是听从您的指教,通过改用追加查询的方式,绕过了本帖的问题. 但是如果本案一定要使用生成表查询的话,如何避免跳出错误提示?

以往我确实是使用生成查询的,而且现在还在使用中,从来没有提示错误.



sosopain 发表于:2009-02-11 18:17:06

理论上应该不可能.除非你切断了从最初的那个tblstock的引用, 否则肯定会出问题..关键在你生成的属于源自tblstock, 所以写不回去的.



总记录:8篇  页次:1/1 9 1 :