咨询热线:0731-88808590
切换到宽版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11131|回复: 8

可以把AutoPHS的DAO访问改写成ODBC或ADO访问吗?

[复制链接]
发表于 2013-8-30 16:19:03 | 显示全部楼层 |阅读模式
AutoPHS是UESOFT公司使用VC++开发的一个在Windows操作系统运行的管道支吊架设计软件,其中有一些数据库访问代码采用了ADO访问,还有一些采用比较老的数据访问对象DAO方法。现在需要把有关的DAO代码改写成ODBC代码,使得AutoPHS不仅可以运行于Windows XP,也可运行于Vista或Win7、Win8(将来也可能运行于Linux或Android)。
win7运行autophs的典型故障表现:
0.1,按菜单“计算”->“计算一个支吊架”,出现警告框,显示“The Microsoft Jet database engine cannot find the input table or query 'z1'. Make sure it exists and that its name is spelled correctly.” 数据表Z1在目录C:\sharemdb数据库AllPrjDB.mdb。
0.2,按菜单“文件”->“选择规范”->“弹簧”->选择大连弹簧厂弹簧,出现警告框,显示“The Microsoft Jet database engine cannot find the input table or query 'connect'. Make sure it exists and that its name is spelled correctly.”或出现其它提示。

回复

使用道具 举报

 楼主| 发表于 2013-9-3 16:49:17 | 显示全部楼层
AutoPHS在Windows XP可以运行,但在Windows Vista或Windows 7、Windows 8等操作系统不能正常运行,主要故障表现在数据库DAO方式访问部分。可能原因是:
1.vista、win7、win8等对数据库访问增强了安全性,以致于以前在xp可以dao访问数据库的代码现在受到限制,不能起作用。
2.该dao代码主要涉及到锁定表的操作,如删除表、删除字段、增加字段,这时候需要锁定表,在xp下一般会提示某表被管理员admin锁定,但代码仍然能执行,删除表、增加删除字段最终可以完成,但在vista、win7、win8系统提示connect表被锁定或z1表找不到之类警告,这些被删除的表connect、z1等不能被重新建立,以致于涉及这些表的代码不能工作。

解决办法有如下几种:
3,调整dao代码流程,使得数据库变量变成局部变量,锁定表的代码变成局部代码,这样删除表字段或增加表字段可能可以正常运行。这牵涉逻辑修改,主要是把全局数据库变量改为局部变量,可能有较大工作量。
4,调整dao代码流程,使得不需要删除表,仅仅删除表全部记录,这样就不需要锁定数据库,dao代码可能正常运行。这牵涉逻辑修改,工作量很大。而且失去了表字段自动添加功能,如果修改数据库结构以后将不能自动升级数据库,经常弹出某字段不存在错误。
5,使用C++封装一些类,用odbc代替dao。这可能不能从根本上解决数据库表锁定问题。但odbc代码可以增加跟踪修改。
6,使用C++封装一些类,用ado代替dao。这可能不能从根本上解决数据库表锁定问题。这个方法已经在2010年7月26日至8月被陈百炼和张凯执行了一段时期,形成了4个新的类文件,但尚未完工。
7,直接把dao代码修改为ado代码。这个工作已经在2013年9月-2014年5月被执行,由于涉及到近700行代码,项目承包者陈伟把代码改乱了,由于没有遵守重构代码准则,最后无法继续修改代码,只得放弃项目。而且这方法与5、6方法一样可能无法从根本上解决数据库表锁定问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-3 16:56:14 | 显示全部楼层
AutoPHS代码已经从公司VSS服务器下载,并被上传到github.com服务器开源。开源代码库存放在:https://github.com/uesoft/AutoPHS
项目人员需要在github.com注册并登录,请求加入uesoft团队,经过uesoft管理员审核同意后,即可加入autophs项目。然后在项目开发人员本地计算机安装msysGit,下载autophs代码,开发,解决问题后,更新代码到github.com上autophs代码库。测试人员下载代码测试,问题反馈到issue。开发人员看到报告的issue修改代码解决bug。测试人员继续测试完成该bug修复循环。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-6 16:34:36 | 显示全部楼层
开发要求:
8.1 使用测试驱动开发方法TDD(Test-Driven Development)。即修改功能代码前先用CppUnit写好测试代码,再修改功能代码使测试代码通过。
8.2 以用户方便简捷为评价标准。如ODBC需要设置数据源名DSN,应该写代码判断系统数据源DSN是否存在,不存在则使用代码建立DSN,这样避免用户安装时需要人工设置DSN。
8.3 尽量模块化,高内聚,低耦合。
8.4 其他优秀设计原则。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-10 19:33:59 | 显示全部楼层
开发具体做法:
使用VC++6.0打开AutoPHS项目
搜索CDao字符串,大小写匹配,搜索,显示有685个语句,涉及有65个文件。
有如下的DAO类
可能以下的类及其被AutoPHS使用到的dao类方法需要被封装。
// AFXDAO - MFC Database support using DAO
// Classes declared in this file
// CException
  class CDaoException;    // DAO error/exception handling
// CObject
  class CDaoRecordView;
  class CDaoWorkspace;    // DAO engine/transaction/security manager
  class CDaoDatabase;     // DAO database manager
  class CDaoRecordset;    // DAO result set manager
  class CDaoTableDef;     // DAO base table manager
  class CDaoQueryDef;     // DAO query manager
// Non-CObject classes
  class CDaoFieldExchange;
  struct CDaoFieldCache;
  struct CDaoErrorInfo;
  struct CDaoWorkspaceInfo;
  struct CDaoDatabaseInfo;
  struct CDaoTableDefInfo;
  struct CDaoFieldInfo;
  struct CDaoIndexInfo;
  struct CDaoRelationInfo;
  struct CDaoQueryDefInfo;
  struct CDaoParameterInfo;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 11:00:33 | 显示全部楼层
类封装设想:
使用C++封装一些数据库类如CUEDaoDatabase,取代上面对应的CDaoDatabase等microsoft dao提供的类,这样就把DAO访问方式改成了ODBC访问方式,实现开源读写microsoft access数据库,便于升级。ODBC采用unixODBC开源代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 14:43:02 | 显示全部楼层
发现ADO访问似乎也出错,不知道原因。如文件modPHScal.cpp行6911,函数vb_cal():
                strSQL.Format(_T("SELECT COUNT(*) FROM [z1] WHERE VolumeID=%d AND zdjh=%d AND nth<>1"),
                        EDIBgbl::SelVlmID,zdjh);
                _RecordsetPtr rsZ1=::conPRJDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 23:15:45 | 显示全部楼层
本项目管理流程
0.定义:
以下文字中,本项目=AutoPHS升级版(从XP升级到Windows7),R1=www.github.com,R2=https://github.com/uesoft/autophs,A=autophs,T1=msysGit,X=2.7.2,P1=15000YRMB,P3=500YRMB,P4i=500YRMB,P2min=3000YRMB,K=12。
1.项目范围
本项目范围包括3部分:
1.1 第1部分封装类CUEDaoXX,用这个类替换CDaoXX类,开发费用P1。这个类必须使用开源的数据库访问代码,如unixODBC或iODBC,最好使用最流行的unixODBC。
1.2 第2部分开发费用P0,项目范围是使用第1部分的封装类替换项目A中的DAO类。
1.3 第3部分开发费用为P2,项目范围是除去项目A在Vista/win7/win8运行时会出现但在Windows XP运行时不会出现的BUG。这些BUG可能因为如下原因引起:
1.3.1 访问数据库时由于DAO或ADO不兼容vista/win7/win8的BUG。这些BUG在R2位置issues由本项目测试人员提交但也可能没提交完全,由本项目开发人员确认。
1.3.2 第1.2条的BUG。
1.3.3 第1.1条的BUG。
1.3.4 项目A在Winodws XP运行时就存在的BUG。
1.3.5 其它的BUG。
2.项目管理计划
本项目按以下计划程序执行。
2.1 测试人员、开发人员在代码管理网站R1注册账号并登录,请求加入uesoft团队,经过uesoft管理员审核同意后,即可加入项目A团队。项目代码存储库位置:R2。
2.2 开发人员使用代码管理工具T1在R2提交最原始代码。
2.3 测试人员在R2的issues菜单提交所有需要修改的BUG。
2.4 开发人员封装类。即完成第1.1条列出的工作。
2.5 开发人员在项目A代码中应用封装的类。使用宏定义或直接替换方法,把引用DAO类的代码改为引用CUEDao。推荐采用宏定义方法,这样工作量很小。可以通过设置宏定义变量CUEDAO=1或0控制编译过程,简化代码修改或维护过程。
2.6 开发人员调试代码,查看这是否项目范围内的BUG。修改这BUG后,更新修改代码到存储库N2。通知测试人员。通知日与BUG提交日不得超过14个自然日(含),否则按50%计算工资。
2.6.1 如果是属于1.3.1的BUG,修改这个BUG,工资为P3。
2.6.2 如果是属于1.3.2的BUG,修改这个BUG,工资为0。
2.6.3 如果是属于1.3.3的BUG,修改这个BUG,工资为0。
2.6.4 如果是属于1.3.4的BUG,修改这个BUG,工资为P4i或双方协商价格;不修改这个BUG,工资为0。
2.6.5 如果是属于1.3.5的BUG,修改这个BUG,工资为P4i或双方协商价格;不修改这个BUG,工资为0。
2.7 测试人员从下面2种方法中任选一种方法X运行程序,进行测试。
2.7.1 测试人员自己从R2存储库下载最新代码,编译,运行,测试。
2.7.2 开发人员编译好执行程序给测试人员。测试人员运行这执行程序,测试。
2.8 测试发现新BUG,提交到R2,返回2.6;否则继续执行下面步骤。
2.9 测试通过后,测试人员关闭该BUG。
2.10 测试不通过,继续打开。
2.11 返回2.6循环,直到最后1个BUG改完。
2.12 等所有BUG修改完后,开发人员与测试人员一起确认是否有遗漏的2.6.1-2.6.3的BUG没修改,若有,返回2.6修改。
2.13 运行到此时,日期为BUG修改完的日期D1。
2.13.1 在日期D1,统计2.6.1的所有通过了测试的BUG数量N1,开发费用P5=N1*P3,当N1*P3<P2min时,取P5=P2min。
2.13.2 在日期D1,统计2.6.4-2.6.5的所有通过了测试的BUG数量N2,开发费用P6=SUM(P4i),i=1,N2。
2.14 在日期D1(含)之后的下一个月的第一个工作日,支付工资P7(含税)给本项目开发人员,P7=P5+P6。
2.15 在日期D1(含)之后的K个月期间内,客户反馈BUG,客户直接提交或由测试人员代替客户提交该BUG,返回2.6执行。
2.16 在日期D2(含)=D1+K个月,统计2.15的所有通过了测试的2.6.1的BUG,如果有没修改的BUG数量N3,罚款P7=N3*P3,当N3*P3>P2min时,取P7=P2min。
2.17 在日期D2(含),统计2.15的所有通过了测试的2.6.4-2.6.5的BUG数量N4,开发费用P8=SUM(P4i),i=1,N4。
2.18 在日期D2(含)之后的下一个月的第一个工作日,支付奖金P9(含税)给本项目开发人员,P9=P1-P7+P8。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-9 16:22:35 | 显示全部楼层
这个项目自2014年10月中旬启动,到11月底已经完成了。没有采用上面的方案。只修改了几个语句,就可以使AutoPHS在windows7运行了。这工作是由实习生陈善丰完成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们

长沙优易软件开发有限公司(中文简称:优易软件,英文简称:UESOFT)是三维管道CAD/CAE一体化设计软件开发商,也是新一代三维工厂设计管理系统的开创者。公司开发的自主知识产权的管道应力分析软件AutoPSA居于中国大陆市场前2名。UESOFT于2000年10月23日经湖南省长沙市工商行政管理局核准登记设立。

联系我们

  • 地址: 中国湖南省长沙市高新区桐梓坡西路保利麓谷林语中心i区1栋718-725
  • 电话: 0731-88808590
  • Email: uesoft@163.com
© 2001-2021  Powered by Discuz! X3.4 永益科技
快速回复 返回顶部 返回列表