Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: yty773436272

提取数据库里的前四列到excel表中录入数据后并保存到对应的位置

[复制链接]
发表于 2012-2-3 10:19 | 显示全部楼层
yty773436272 发表于 2012-2-2 02:44
朋友,那能不能在ACCESS里把三个车间的保存过来的工作表进行合并。不要再excel里进行汇总,如果不在ACC ...

数据库设置的要点之一是,是任何一张表不能有重复记录,如你的军工表中前4列有这两条一模一样的记录,当在这两行右边的其他列数据要录入或输出时,请问我怎么知道这两条记录哪里不同?难道一直向右边的列看,然后我猜我猜我猜猜猜?
4058
13BE钩舌
外-182-66
112-520
4058
13BE钩舌
外-182-66
112-520


你说产品编号+产品名称+生产日期是唯一,也很费解,难道同一天不能生产同一个产品吗?就算再加上生产人,冶炼炉号,工令号,都可以有一样的两条记录吧?

这就是为什么我一再问Primary Key的问题,这个问题不解释清楚,很难往下走.看来你的产品编号不唯一,当然产品名称也就不一唯一,工令号,冶炼炉号,生产人,生产时间等等也很难说不会有重复.

我实在不清楚你在实际工作的记录是什么样子的?依我看,其实应该有各个不同的表在ACCESS数据库里,各表之间通过PK, FK联系起来,会解决很多麻烦的后事.这就是为什么公司大了,要专业的数据库和专业的数据库管理员,数据库的架构设置真的真的很重要.

简单地说,你这里可以单独建一个产品表(可以只有两列但是一定要区别清楚没有重复,如:产品编号,产品名称),生产人表(可以有几列:姓名,职务,年龄,工龄,性别,工号,等等,记住一定不能有重复的记录或行,比如工号比姓名更适合设为PK,因为人名也许有重名,工号一般不会有重复),工令表,冶炼炉表,军工表,调制表,组装表等等依此类推.

当你的表设置得很清楚后,之后各种SQL运行,各种VBA调数据分析,会变得容易很多,条理清晰很多.
回复

使用道具 举报

 楼主| 发表于 2012-2-3 20:56 | 显示全部楼层
本帖最后由 yty773436272 于 2012-2-3 21:09 编辑
adders 发表于 2012-2-3 10:19
数据库设置的要点之一是,是任何一张表不能有重复记录,如你的军工表中前4列有这两条一模一样的记录,当在这 ...


产品编号+产品名称+生产日期是唯一值,同一天不能生产同一个产品编号,会生产相同的产品名称,一般4个月才会出现相同的产品编号。(如今天生产10个炮座,产品编号就会是0001、0002........0010)每一天会生产相同的产品,但是编号是不会相同的。以这三个条件为判断,就算有几年的产品都不会有相同的记录。分析如下:同一天:产品编号不会相同,产品名称和日期会相同;不是同一天:产品编号有可能相同,产品名称会相同,但生产日期不会相同,我的日期格式是年、月、日,如2012-1-3。感谢朋友耐心的帮助,非常感谢你。麻烦朋友帮帮我。
回复

使用道具 举报

发表于 2012-2-3 21:49 | 显示全部楼层
yty773436272 发表于 2012-2-2 15:44
朋友,那能不能在ACCESS里把三个车间的保存过来的工作表进行合并。不要再excel里进行汇总,如果不在ACC ...

其实编号相同与不相同都无所谓,楼主的意图最重要,我是这样想的:产品首先出现在军品车间,这是第一步,把产品在军品车间的相应信息输好后转存到数据库,第一步算完成了, 第二步,凡是已入库的产品要再一步经过调制车间,因此要把它们从数据库中调出来,条件是所有在数据库中调制车间的相应数据为空,这里的条件是不管产品编号,日期,名称是不是相同,只要是调制车间的相应信息没有就全部调出来,输完后全部再次转到数据库,最后是组装车间,道理一样,组装信息没有的全部调出来,再次输入,再次转数据库,三个车间的信息在数据库中全部有时就算完成了,最后才汇总统计,是这样的话就简单得多了,其它人的想法是,一个产品,经过调制车间后到了数据库,但这个产品没有经过军品车间,在数据库中无军品信息,或者在组装车间就进入数据库了,没有其它两个车间的信息,到最后太混乱了,无法有效组织统计产品了,这也是可能的,因此,如果这三个车间有一个流程的话,就不会,比如先是军品,没经过军品的产品而进入数据库里是不可能的,第二关是调制,第三关是组装,存在着这个流程的话,什么都不是困难,楼主的意图是否是这样?????
回复

使用道具 举报

 楼主| 发表于 2012-2-4 10:58 | 显示全部楼层
本帖最后由 yty773436272 于 2012-2-4 11:01 编辑
xpw6061 发表于 2012-2-3 21:49
其实编号相同与不相同都无所谓,楼主的意图最重要,我是这样想的:产品首先出现在军品车间,这是第一步,把产品 ...


对,只有军品车间才能填写前几列,调制和组装车间是依据军品车间填写的在相应的产品后进行完善,这两个车间没有填写“产品编号、产品名称、工令号、冶炼炉号、生产日期”的权利,只能调用军品车间已经填好的在后进行完善,只要以“产品编号+产品名称+生产日期”为条件,在数据库里是不会有相同的行的,这样调制和组装车间填好的数据就能保存到相对应的位置
回复

使用道具 举报

发表于 2012-2-4 12:02 | 显示全部楼层
yty773436272 发表于 2012-2-4 10:58
对,只有军品车间才能填写前几列,调制和组装车间是依据军品车间填写的在相应的产品后进行完善,这两个 ...

这样的话你的思路是正确的,只是在数据库中增加一列,为每条记录自动增加一个ID号,以免在调制,组装车间从数据库调取数据修改后能有效地更新相应的记录,也就是说能根据唯一的ID写回数据库,至于统计是完全不成问题的
回复

使用道具 举报

 楼主| 发表于 2012-2-4 12:41 | 显示全部楼层
xpw6061 发表于 2012-2-4 12:02
这样的话你的思路是正确的,只是在数据库中增加一列,为每条记录自动增加一个ID号,以免在调制,组装车间从数 ...

我就是不知道怎么写命令,朋友,麻烦你帮帮我嘛,谢谢啦
回复

使用道具 举报

发表于 2012-2-5 13:34 | 显示全部楼层
yty773436272 发表于 2012-2-3 21:58
对,只有军品车间才能填写前几列,调制和组装车间是依据军品车间填写的在相应的产品后进行完善,这两个 ...

首先,以"产品编号+产品名称+生产日期"的组合为唯一的设置是很Awkward的,在ACCESS中的Data Type上的,这三个Field分别是Number, String, Date/Time,当我们要去对比调制或组装与数据库相比较时,转换比较麻烦,在ACCESS的sql语法中,条件引用时须用到类似于以下的方式来连接三个列: (cstr(产品编号)+ 产品名称 + cstr(生产日期)) ,非常笨拙,也很容易出错.

楼上有建议直接加顺序号来做主键,如果我没有理解错,是加一列行号1,2,3,4这样,但这在数据较多时,不是一个好方法.最好还是有计划的分类表,在分类各表中设置PK和FK,以有机联系整体数据.

其次,上文可能是我的废话,因为你现在要解决的只是当下的问题,无需考虑长远,好,就按你的要求试试.有几个问题:

1) 军工表上传时,你如何保证"产品编号+产品名称+生产日期"不与现有ACCESS数据表中的三列数据重复?我知道你每上传一次自动会删除军工表内容,可是万一人工输错了怎么办,你是不是需要每次军工上传时要先用代码检验表中的每一行中这三列的组合都不与现有数据表中的三列重复?如果重复怎么办,是报错?还是自动整体不上传?还是自动停止更新在重复的那一行(也就是不报错的都已经上传了,同时在军工表中也删除了)?这些情况都要考虑,代码会很复杂,也会影响速度,因为循环的次数和条件都增多.所以最好你能:或者保证人工不会重复在军工表中输入数据库中已经有的三列数值;或者每次上传军工内容时都先清空ACCESS数据库(也就是每次上传都是传到空数据库而不是在后面递增);这样会减轻很多代码负担

2) 调制表(组装表问题类似),下载前是否必定内容为空,还是已经有内容,如果有内容,是所有行都有数据,还是部分行有所有数据,部分行只有前4列数据,还是部分行有5列之后的数据?
然后是上传,你要求是填好所有数据后才允许上传,还是允许部分上传,以5列后的哪一列或哪几列为标准来确定已经填好了内容?比如说是以"移交时间"内容不为空为准?
所以最好你能:下载前调制表内容为空,上传前调制表必须数据齐全,这样会减轻很多代码负担

3) 组装表跟调制表的关系,现在的理解是军工上传的表前4列调制和组装都能下,那么组装和调制是一先一后的关系(也就是调制完后才交接组装?), 还是平行作业不相关的关系(也就是谁先好谁都可以先上传,它们分别只与军工表相关)?

等你回答了,可能还有后续问题,没办法,这是你数据库先天没有设计的缘故.一点建议是:

如果你的数据量不超过65536个记录,不如不要用ACCESS,只用EXCEL来存储和调档分析 (07版本百万记录以下也可以).如果你数据量已经或者将来一定超过百万行以上,建议你整理数据表思路,以利将来导入导出分析方便,如果仅以EXCEL的习惯来设置ACCESS表格的话,数据量大了以后,条件稍多SQL就会很难写,而且就算写了复杂的SQL理论上能运行,实际运行时都可能让你的电脑速度惨不忍睹或者直接瘫痪.
回复

使用道具 举报

 楼主| 发表于 2012-2-6 19:28 | 显示全部楼层
本帖最后由 yty773436272 于 2012-2-6 20:01 编辑
adders 发表于 2012-2-5 13:34
首先,以"产品编号+产品名称+生产日期"的组合为唯一的设置是很Awkward的,在ACCESS中的Data Type上的,这三 ...


1、如果"产品编号+产品名称+生产日期"与现有ACCESS数据表中的三列数据重复,就不保存不清空,如果不重复就保存并清空excel表里的数据,对军品表里的每个产品后不能有空白单元格,如果有空白单元格此行数据不于保存,还是停留在excel表里,对已经完全填完的数据保存并清空。也就是说军品表里每个产品后不能有空白单元格,只有填写完整才能保存到数据库里,如果没有填写完整不管怎么按“储存到数据库”按钮,都不予保存。如果人为的填错管理员就在数据库里改。
2、当我以"产品编号+产品名称+生产日期"为条件时,调制表和组装表要下载前5列的数据,下载前五列的数据的条件是只要后2列的数据没有填写就下载下来,即调制表和组装表的“移交人、移交时间和入库人、入库时间”为空就下载下来,如果此2列已经填写就不用提取这5列的数据;储存到数据库的条件是:调制表和组装表的“移交人、移交时间和入库人、入库时间”如果已经填写,按“储存到数据库”按钮,数据保存并清空,否则不予保存不清空。
3、 组装表跟调制表的关系是平行关系,没有任何关系。
4、我现在用的就是用excel表做的,但是运行速度很慢,一般一年的数据在4万行左右。我不敢想象我现在用的储存4万行数据后会慢到哪种地步,所以我才想到用ACCESS来储存数据。这样肯定会好些。我把我做的现在正运行的excel表上传上来,麻烦你给我指点一下。管理员的密码是“123” 公司制品管理系统(新制).rar (272.34 KB, 下载次数: 30)
回复

使用道具 举报

 楼主| 发表于 2012-2-9 19:18 | 显示全部楼层
adders 发表于 2012-2-5 13:34
首先,以"产品编号+产品名称+生产日期"的组合为唯一的设置是很Awkward的,在ACCESS中的Data Type上的,这三 ...

朋友,麻烦你帮帮我,谢谢你啦

评分

参与人数 1 +1 收起 理由
adders + 1 我03版,打不开你的xlsb文件

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-2-10 12:24 | 显示全部楼层
adders 发表于 2012-2-5 13:34
首先,以"产品编号+产品名称+生产日期"的组合为唯一的设置是很Awkward的,在ACCESS中的Data Type上的,这三 ...

我把它转成03版的啦 公司制品管理系统.rar (351.8 KB, 下载次数: 38)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-9-25 01:34 , Processed in 0.549628 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表