Access 2003里比较两张表, 结果输出到另一张表, 用Query还是Module?

来源:百度知道 编辑:UC知道 时间:2024/07/03 11:10:42
同一Access 2003数据库里有两张表A和B, 行列数目都不相同, 有关字段如下, A,B后面为字段名.

A: X,Y,Z,Z_new
B: X,Y,Z

现在想对B表的所有记录进行如下验证, 并且把不符合的记录按B表的格式输出到表Error.

当 B.X=A.X 并且 B.Y=A.Y 时进行验证
如果 A.Z_New不为空, 则B.Z应该等于A.Z_New
如果 A.Z_New为空, 则B.Z应该等于A.Z
如果不符合上面两条,则该B表记录为错误记录, 输出该记录到表Error.

原数据库的表比较大和复杂, 做为Access新手的我折腾了一下午才看明白里面其实可以简化为上面这个问题, 然后又折腾了一晚上的Query, 看了网上不少例子, 还是没搞出来.

请哪位大侠指点一下迷津? 是不是得写个Module的script才行啊?
两位大侠请稍等, 我发现字段Z_New为text类型, 而Z为Double的Number类型, 所以得先转换那个Z_New的类型为Doulbe的Number才行.

而要进行类型修改,似乎该字段必须为空. 所以我得先搞个备份.

假设error字段为error.X,error.Y,error.Z,error.Z_new ,这样你试试看:
insert into error(error.X,error.Y,error.Z,error.Z_new ) select A.X,A.Y,A.Z,A.Z_new from A,B where ( BX=AX AND B.Y=A.Y ) and (A.Z_New is null and B.Z=A.Z) and (A.Z_New is not null and B.Z=A.Z_new)

你这个要求,只要通过一个"更新查询"就可以很容易实现,基本思想如下:
1. 建立一个查询,查询的源是你用的2个表,同时将第1个表的x字段拖到第2个表的x字段上,同时将第1个表的y字段拖到第y个表的x字段上,也就是说建立以这2个对应字段相等作为连接条件建立等值连接。
2. 选“查询”中的“更新”
3. 查询字段处选中“B.Z”,更新到出按右键选“生成器”
4. 在“表达式生成器”中利用条件函数iif生成你要更新的目标值