Access入库检验系统功能分析(本件确认、本批确认)

  1. 云栖社区>
  2. 博客>
  3. 正文

Access入库检验系统功能分析(本件确认、本批确认)

pandamonica 2017-07-13 13:31:38 浏览3536
展开阅读全文

约定:SAP中称材料为“物料”

       入库检验系统称材料为“材料”
       实际上上述二者是同一个东西,用同样的编码进行标识,编码来自于PLM。

约定结束。

入库者 在工作地点(库房货架旁边、卸货地点、检验室三个可能的地点)进行材料检验时,工作的手顺如下:

  1. 采购者 使用SAP的事务码导出txt文件----材料待检单;
  2. 入库者 打印纸质的 材料待检单;
  3. 手持待检单的入库者 从来料中拿出检验规则要求数目的材料,准备检验;
  4. 假如需要检测三个电阻,那么他取出3个电阻。检验第一个后,点击“本件确认” ;检验第二个后,点击“本件确认”;检验第三个后,点击“本批确认”;
  5. 该物料的检验完成;
  6. 继续检验待检单上的其他物料,直至所有物料检验完成;
    screenshot

下面描述access入库检验系统 中 本件确认 和 本批确认 的代码逻辑:
screenshot
本件确认 是一个按钮

  1. 判断 检测表 中是否存在 传票号 对应的 待检单
    1.1 如果不存在 说明这个待检单刚刚打印出来,单子上面的物料都没有检测过,准备从第一个开始检验;

1.2 如果存在 说明这个待检单上最开始的一些物料已经被检验过了,你准备从中间的某一个开始检验;

  1. 检测子窗体 中的输入框“工件序号” (这是一个整数)加一

    如果合格, 那么合格数目加一;
    如果不合格,那么不合格数目加一;
    
  2. 检测子窗体 的 合格 输入框 清空;

    检测子窗体 的数据源 指定为 “检测单”
    

上述内容就是本件确认按钮触发的逻辑;

下面描述“本批确认”的逻辑

  1. 到货数量 = 0 报错“数据未填写全”
  2. 最后判定 (入库者填写“Y”或者“N”) 如果填 Y 那么继续;如果填 N 那么需要填写“不合格内容”
  3. 从表“入库检验”获取 图号+传票号 定位到的数据record ;如果已经有了这个记录,说明本批已经确认过了,不能再次确认;如果没有这条记录,就rs.AddNew
  4. 把窗体上控件的内容 写入rs,为表“入库检验”添加一条记录;

从表“检验转换” 获取 图号+供货商 对应的数据;

5向表“检测表”插入数据(本批最后一件的检测数据)

表 入库检验 存储的是 这次检验的总体数据,只有一条记录
表 检测表 存储的是 一批n件物料的检测明细,多条记录

点击 本件确认 按钮,向 检测表 插入 本件检测记录;
点击 本批确认 按钮,向 入库检验 表 插入本批检测记录,同时向 检测表插入 最后一件的检测记录;

在重写入库检验系统之前,需要在access程序中进行修改,紧急应对品管检查的需求。需求的内容如下:

  1. 抽检的数目小于抽检样本数的情况下,入库者强行退出“入库检验”功能时,需要弹出提示框,警告抽检数目不足;
  2. 最终实际抽检数目小于抽检样本数的 入库检验 ,需要被列表的方式展现出来,由系长、部长、入库检验者方便的查看。
  3. 检验样本数 这个输入框 不得修改(任何人不得手动修改这一输入框的数值、只能由程序计算)
  4. 到货数量小于检验样本数的情况:提示全检;

前两个需求需要今天完成
如果检验样本数是3,第1个正常检验,准备检验第2个的时候,发生退出,是怎样的情景呢?
第1个检验完成,点击 本件确认 按钮;
如果此时,不点击任何access界面上的有效按钮,直接强制关闭access程序,无法弹出任何有效的提示窗体;
如果此时,直接点击 本批确认 按钮,系统提示 “样本数与检验数不一致”
screenshot
如果此时,直接更换其他图号,确实系统没有任何有效的提示信息;

经过上述推演,第三种情况,需要弹出提示窗口,也就是某一个特定待检单上某一个特定材料的入库检验进行到中途没有检验完成的情况下,中途更换图号,需要系统弹出提示框,警告入库者“材料入库检验未完成”;
第一种情况属于强制退出,无法提示;
第二种情况,系统已经设置了应对机制;

找到对应的代码

If Me.检验样本数 <> (Me.合格品数 + Me.不良品数 + 1) Then

a = MsgBox("样本数与检验数不一致", , "错误提示")
Exit Sub

End If

那么在access程序的代码中,图号_afterupdate()方法中,进行修改

     If Me.检验样本数 <> 0 Then

        If Me.检验样本数 <> (Me.合格品数 + Me.不良品数 + 1) Then

            a = MsgBox("检验未完成,实际检验数小于检验样本数", , "错误提示")   

        End If
     End If

第一项内容修改完毕。
第二项内容,对Access数据库中,实际检验数目小于检验样本数的,入库检验,进行查询,展示。

通过读代码,我们知道
“本件确认”按钮 触发向 表 "检测表" 写入n条检验明细;
“本批确认”按钮 触发向 表“入库检验”和“检测表” 同时写入数据;
因此读取access数据库,实际上就是读取符合条件的,上述两个表中,对应时间段的数据;

这一功能不再使用access实现,改用php读取。
首先在10.28服务器的mysql数据库创建一个用户 ruku 密码12345
然后所有的入库者、系长、工艺员全都暂时通过这个用户进入php的页面对第二个需求的数据进行查询。

不得不说,使用php访问mysql数据库是一个陌生的技术。
最开始百度一些代码,尝试连接,不行连接不上。
首先,我们展示一下如何使用eclipse运行php代码(非web方式)
screenshot
打开你的eclipse,找到你写的php代码,这个代码就是一个面向对象的class,然后创建这个class的实例,运行一个空方法。
screenshot
class文件右键 run as php cli application
这样就可以单纯的在php环境中,直接运行一个php类

之所以描述上述内容,是因为长时间无法用php语句链接上access数据库,因此我希望首先使用php语句直接访问access数据库,而不是通过浏览器运行php文件。

下面,php有哪些方式去访问access数据库呢?
1.odbc_connect()方法
http://php.net/manual/en/function.odbc-connect.php
这个方法是php官方提供的,功能是Connect to a datasource
screenshot

我在上述网页地址看到了如下内容,是一个外国网友在php官方网站的留言,他抱怨了php的odbc_connect()方法如何不好用,而且他遇到了和我一样的问题,他决定不再使用odbc方式,转而使用adb方式。
我就不贴自己在eclipse上写php代码,使用odbc_connect()方法碰壁的截图了。
screenshot
这位网友使用ado的代码如上所示。
下面看看ado这个技术。
什么是ADO?ActiveX Data Objects

Microsoft's ActiveX Data Objects (ADO) comprises a set of Component Object Model (COM) objects for accessing data sources.

A part of MDAC (Microsoft Data Access Components), it provides a middleware layer between programming languages and OLE DB (a means of accessing data stores, whether databases or not, in a uniform manner).

ADO allows a developer to write programs that access data without knowing how the database is implemented; developers must be aware of the database for connection only. No knowledge of SQL is required to access a database when using ADO, although one can use ADO to execute SQL commands directly (with the disadvantage of introducing a dependency upon the type of database used).

Microsoft introduced ADO in October 1996, positioning the software as a successor to Microsoft's earlier object layers for accessing data sources, including RDO (Remote Data Objects) and DAO (Data Access Objects).

ADO is made up of four collections and twelve objects.

上述英文内容,来自于wiki,1996年的技术,看得我很汗颜。
ADO是微软提供的数据库访问技术,一种数据存储的访问方法,不管你访问的是数据库或者不是数据库。

access是微软的产品,所以我们有理由相信,微软提供的ADO是其他编程语言访问access数据库的官方规范的方法。

现在让我们总结一下:php这种编程语言访问access这种数据库,有两种方式: php提供的odbc_connect方式 和 微软提供的ADO方式。

w3school中php连接数据库odbc的讲解:
http://www.w3school.com.cn/php/php_db_odbc.asp
什么是ODBC?
Open Database Connectivity,缩写为ODBC, 是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。

前面看到ODBC和ADO方式都是微软提供的规范和API,下面我们两种方式都要尝试一下,至于php网站上美国网友的困惑我们也来解释一下:

首先,在自己的php的apache服务器上配置ODBC数据源,也就是你的应用服务器上首先要开启ODBC连接,并且连接上远程的access数据库,形成一个SID,这个SID是用来给你的php代码找数据库连接用的。

我的这个环境是windows server 2008 r2,首先在服务器上配置ODBC连接。
360_20170715101412637
360_20170715101518509
360_20170715101814013
360_20170715101901208
360_20170715101924743
上述创建ODBC连接的配置过程可以参考:
http://blog.sina.com.cn/s/blog_3fe4f9a30102vthz.html

下面是w3school中整个过程的描述:

创建 ODBC 连接
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
这是创建到达 MS Access 数据的 ODBC 连接的方法:

  1. 在控制面板中打开管理工具
  2. 双击其中的数据源 (ODBC) 图标
  3. 选择系统 DSN 选项卡
  4. 点击系统 DSN 选项卡中的“添加”按钮
  5. 选择 Microsoft Access Driver。点击完成。
  6. 在下一个界面,点击“选择”来定位数据库。
  7. 为这个数据库取一个数据源名 (DSN)。
  8. 点击确定。

请注意,必须在您的网站所在的计算机上完成这个配置。
http://blog.csdn.net/guoguo1980/article/details/1341363

在apache所在的服务器上配置了DSN以后,发现无法访问到配置的那个远程acess文件
不管是php的类直接访问还是php网页都无法访问,很上火啊怎么办?
只能在本地先新建一个全新的access数据库,连它试试看如下图:
screenshot
这个数据库放置在D盘根目录下:
screenshot
然后在这个服务器上,按照之前的方式配置一下这个新access的DSN
screenshot
上图中,为这个新的access数据库文件创建了用户名密码admin/admin,方便好记
下面开始用php代码连接access数据库,现在相当于php生存的apache服务器和access都在同一台电脑上,这下应该好连接才对,我们试一试:
screenshot
写了代码,连接一下上面那个数据库
screenshot
运行一下很悲惨的:
screenshot

PHP Warning: odbc_connect(): SQL error: Microsoft ��ָ���� DSN �У����������Ӧ�ó���֮�����ϵ�ṹ��ƥ��, SQL state IM014 in SQLConnect in D:ApachewwwHRMmodulesrukuclassesruku.class.php on line 20
PHP Stack trace:
PHP 1. {main}() D:ApachewwwHRMmodulesrukuclassesruku.class.php:0
PHP 2. ruku::testF() D:ApachewwwHRMmodulesrukuclassesruku.class.php:35
PHP 3. odbc_connect() D:ApachewwwHRMmodulesrukuclassesruku.class.php:20

讲老实话,上述报错都是乱码,我也是醉了。

上述内容,反映出一个问题,就是php的基本功没有的话,遇到问题,就要花非常长时间来解决。
不如,我们好好理清一下php数据库连接的知识吧,反正也是连不上,与其退缩,不如战胜它。
选择物料号后
screenshot
选择供应商
screenshot

检查标准制作过程
刚进入界面如下图:
screenshot
如果已经有了该物料的检验标准:
screenshot
如果全新的物料号则如下图:
screenshot

网友评论

登录后评论
0/500
评论
pandamonica
+ 关注