程序更新范文(精选6篇)
程序更新 第1篇
煤矿安全生产监控系统用井下监控分站接收来自传感器的信号, 并按照预先约定的复用方式 (时分制或频分制等) 远距离传送给传输接口, 同时接收来自传输接口的多路复用信号 (时分制或频分制等) , 且具有简单数据处理能力, 能控制执行器工作[1]。
随着新的煤矿安全生产形势的需要, 国家制订了新的行业标准AQ 6201—2006[1], 同时随着煤矿采掘环境数字化程度的提高, 用户会不断提出新的要求, 监控分站面临的不可避免的问题是设备固件软件的更新升级。传统的更新方式是由安装人员下到井下, 将需要更新固件软件的监控主板带到井上进行程序更新, 再返回到井下安装到监控点。监控分站一般距离井上监控中心十几公里, 采用这种传统方式非常浪费时间, 且在更换监控主板期间, 由于没有监控系统煤矿作业不得不停止很长一段时间, 对煤矿的生产造成很大的损失, 所以需要寻找另外一种更新程序的办法, 即通过远程通讯将程序发送到矿井监控主机, 由监控主机通过RS485通讯或其他通讯方式将新版本的固件程序发送到监控分站, 由监控分站实现自我设备程序软件的在线更新。采用该方式的优点是:节约程序更新时间;节约人力、物力;减少煤矿安全生产隐患。
1 LPC2000系列微控制器简介
1.1 基本特点
ARM (Advanced RISC Machines) 是ARM公司设计开发的通用16/32位RISC微处理器体系结构, 目前被公认为是业界领先的一种体系结构。该体系结构支持实时多任务, 提供专用通道处理外部请求, 基于ARM的微处理器功能强大且功耗低, 在各类工业级现场控制系统中得到了广泛应用。
LPC2000系列微控制器是基于ARM7TDMI-S体系结构的16/32位微控制器, 该系列的绝大部分型号都能提供大容量的片内代码存储系统Flash及SRAM, 具有丰富的外围接口及定时器、RTC (Real Time Clock, 实时时钟) 、看门狗等, 可以满足较多控制领域对处理器选型的需求, 详细资料可以参考NXP公司网站微处理器章节[2]。
1.2 在应用编程接口
IAP (In Application Programming, 在应用编程) 是指微控制器中运行的固件应用程序在运行过程中实现对片内代码存储系统 (Flash) 的擦除、编程, 用户程序可以从通讯接口接收新版本的固件应用程序代码, 然后利用IAP实现在线更新固件软件的功能。
LPC2000系列微控制器在出厂时由厂家在片内固化了一段Boot代码。Boot装载程序控制芯片复位后的初始化操作, 并提供对Flash编程的方法。Boot程序可以对芯片进行擦除、编程[3]。
Boot装载程序提供了IAP编程接口, 可以实现对片内Flash存储器的编程。Boot区位于地址0x0007E000—0x0007FFFF处。不过, 芯片上电以后, 会首先对Boot区执行一次重映射, 映射到片内存储器空间的最高处。IAP程序是Thumb代码, 位于地址0x7FFFFFF0。在ARM系统中实现状态转换的指令是“BX Addr”, 目标地址Addr的最低位 (bit0) 仅用来确定最终状态, 实际的“目的地址=Addr & 0xFFFFFFFE”。在调用IAP函数时, 不仅要实现跳转而且还要完成状态转换, IAP操作的C语言代码清单如图1所示。
执行跳转指令时, 如果“目的地址”的bit0=1, 表示处理器需要进行状态切换, 由ARM状态切换到Thumb状态, Thumb代码是“半字”对齐格式, 即地址 & 0xFFFFFFFE。因此, 虽然此处跳转目的地址=0x7FFFFFF1, 实际上跳转到地址0x7FFFFFF0, 同时切换到Thumb状态。
LPC2000系列微控制器在应用编程的操作命令如表1所示。
2 固件在线更新系统设计
2.1 系统设计
要实现固件代码在线更新, 首先要考虑的是从通讯口接收固件代码的通讯协议设计;其次从系统安全性的角度考虑, 在更新固件程序前必须对正在运行的固件代码进行备份, 同时在下载新版本代码时不要影响监控分站的采样及控制输出, 所以将Flash扇区设计为代码运行区、代码备份区、新版本代码存储区、数据区。数据区用来保存监控分站的配置信息。
为了保证在线更新的正确性并结合煤矿生产对安全要求高的特点, 将监控分站设计为3种运行状态:试运行、正常运行、固件更新。
更新后的固件代码第1次运行称为试运行, 试运行时间段内没有出现异常 (看门狗中断) , 则表明试运行成功, 即可以将运行区的固件代码备份到代码备份区, 同时修改运行标志为正常运行, 分站转为正常运行状态;如果试运行过程中出现看门狗中断, 表明试运行不成功, 需要将备份区代码拷贝回运行区, 并通知上位机本次试运行不成功。
在正常运行期间收到上位机固件更新的请求后, 进入固件更新状态, 判断备份区是否有代码, 如果没有, 则将现有运行区代码复制到备份区, 复制完后执行固件更新。更新过程:根据通讯协议以二进制的方式从上位机接收代码, 然后写入新版本代码存储区, 代码接收完成, 一次性将新版本代码写入代码运行区, 将分站转为试运行状态;如果更新过程中取消更新或接收代码出错, 则修改分站状态为正常运行状态, 不执行固件更新。
在操作Flash的过程中充分考虑了各种出错情况的应对措施, 保证设备的安全运行。
2.2 通讯协议设计
煤矿系统井下监控分站远距离通讯主要是RS485方式, 上位机与监控分站采取主从的方式通讯, 固件更新系统的通讯协议设计如下。
上位机向监控分站发起固件更新请求:
7E:数据帧前导符;
地址:监控分站的地址, 一个字节表示;
长度:从地址字节开始到CRC校验和结束字节总共的字节数;
命令字:固件软件在线更新请求命令, 一个字节表示;
CRC低:从地址字节开始到数据结束字节的CRC-16校验和的低字节;
CRC高:从地址字节开始到数据结束字节的CRC-16校验和的高字节。
上位机发送给监控分站的数据帧格式如下:
其中帧号为所传输的数据帧号码, 数据部分为若干字节的二进制固件软件代码, 其他字节含义同上。
所有固件软件的二进制代码数据发送完毕后, 上位机发送数据传送完毕命令:
命令字为数据传送完毕命令字, 其他字节的含义同上。
监控分站接收到正确的数据包, 就回应一个数据帧:
地址:上位机地址, 一个字节表示;
命令字:一个字节, 用来表示上一帧传输是否正确, 如果上一帧传输正确就接着传输下一帧;如果上次传输不正确, 需重传上一帧;
其他字节含义同上。
同时在通讯协议中设置超时标志, 超过一定时间未收到数据包, 或者连续出现错误包的次数超过一定的阈值, 就可以取消固件更新操作。
2.3 状态变迁及流程图
监控分站共有3种运行状态:试运行、正常运行、固件更新, 这3种状态之间的状态变迁及变迁过程中的处理流程图如图2所示。
2.4 系统实现和实验
根据以上设计方案, 笔者在NXP LPC2368评估板上采用C语言编码, 使用Keil uVision 3集成开发环境对该方案进行实现并测试, 通讯波特率设置为2 400 B/s时, 86 kB的代码下载时间在12 min左右, 而更新Flash的时间在1 s以内, 整个系统切实可行, 安全可靠。
3 结语
采用固件在线更新技术可以给煤矿监控分站固件软件的升级提供方便, 目前的通讯方式是利用RS485实现固件软件的传递。随着井下通讯技术的发展, 可以采用更高速的通讯技术, 实现固件软件的更快速、更安全的传递。利用嵌入式文件系统实现对监控分站的在线固件更新管理, 同时在上位机网络及监控软件的支持下, 可以实现在集中监控中心对全网所有监控分站的程序远程更新。笔者设计的固件更新流程能够非常方便地适应新的通讯技术及程序更新要求。
摘要:煤矿安全生产监控系统用井下监控分站一般距离地面十几公里, 固件软件远程在线更新功能对监控分站非常重要。分析了LPC2000系列微控制器的功能特点, 重点介绍了其在应用编程功能;利用该项功能结合矿用监控分站的实际, 以状态变迁及流程图的方式, 从安全性和实用性的角度设计矿用监控分站的固件软件远程在线更新系统;最后通过实验证明了该设计的可行性。
关键词:矿用监控分站,固件在线更新,在应用编程,LPC2000系列微控制器
参考文献
[1]孙继平, 彭霞, 王涛, 等.AQ6201—2006, 煤矿安全监控系统通用技术要求[S].北京:国家安全生产监督管理总局, 2006.
[2]NXP半导体公司.NXP 16/32位微控制器产品介绍[EB/OL]. (2007-06-28) .http://scn.nxp.com/#/homepage/cb=[type=product, path=/50809/45993/45994]|[3].
程序更新 第2篇
不想更新?Win10怎么禁止驱动程序更新?
Win10怎么禁止驱动程序更新?有些人不想设置系统驱动自动更新,怎么禁止呢?本文将教你如何禁止驱动程序更新。软件版本:软件大小:软件授权:适用平台:dl.pconline.com.cn/download/359374.html1、按Win+R打开运行框,输入gpedit.msc回车打开组策略编辑器。2、在组策略编辑器中打开计算机配置→管理模版→系统→internet通信设置,在右侧找到“关闭Windows 更新设备驱动程序搜索”,双击打开其设置。3、在设置界面中勾选“已启用”,然后点击确定退出。
程序更新 第3篇
农机报废更新补贴操作程序, 主要包括以下几个环节:
报废申请
已在农机监理机构登记的拖拉机、联合收割机, 其所有人 (机主) 持登记证书、农机牌照、身份证明等凭证, 无牌证的拖拉机、联合收割机所有人 (机主) 持拖拉机、联合收割机购机发票等来历证明和身份证明等凭证, 不能提供来历证明的可凭所在村委会出具的证明材料, 向县 (区、市) 农机化主管部门提出申请, 县 (区、市) 农机化主管部门根据机具报废标准等规定和要求签注意见。
《2015年农机报废更新补贴试点工作实施方案》规定, 今年根据各市 (州) 、县 (区、市) 农业机械报废更新需求、拖拉机和联合收割机保有量等情况, 皋兰县、甘谷县、景泰县、金昌市金川区、永昌县、酒泉市肃州区、瓜州县、张掖市甘州区、临泽县、武威市凉州区、民勤县、陇西县、东乡县、泾川县、宁县、礼县等12个市 (州) 的16个县 (区、市) 内依法报废旧机并换购新机的直接从事农业生产的个人和农业生产经营组织, 可申请享受农机报废更新补贴。
报废补贴机具类型为达到报废标准或超过报废年限的拖拉机、联合收割机。报废机具原则上为依法在农机监理机构登记的拖拉机、联合收割机。对无牌无证的拖拉机、联合收割机, 能够确定其来历合法, 产权明确, 无财产归属纠纷的, 可作为报废补贴机具。对符合下列条件之一的即可申请办理报废手续:一是国家命令淘汰的;二是达到报废年限的, 小型拖拉机报废年限为10年、大中型拖拉机报废年限为15年、履带拖拉机报废年限为12年、自走式联合收割机报废年限为12年、悬挂式玉米了联合收割机报废年限为10年;三是由于各种原因造成严重损坏, 无法修复的;四是未达到报废年限, 但技术状况差且无配件来源的;五是预计大修费用大于同类新产品价格50%的。
机具回收
机主将报废的旧机交售当地县 (区、市) 承担农机报废更新补贴试点工作的农机回收单位 (以下简称农机回收单位) 。农机回收单位应当核对机主信息和报废农业机械, 向机主出具《甘肃省报废农业机械回收证明》。报废农机残值由农机回收单位与机主按照公平交易原则, 共同协商确定。回收的农机由县 (区、市) 农机化主管部门监督农机回收单位进行解体或者销毁, 农机回收单位应当采集报废机具与机主人际合影电子照片, 作为档案资料。
注销登记
机主依照《农业机械安全监督管理条例》及其配套规章, 携带《回收证明》、登记证书、牌证等凭证, 到当地县 (市、区) 农机安全监理机构办理农业机械报废手续, 注销农机牌证。报废农业机械法人所有人 (机主) 可以委托农机回收单位代理申请注销登记。
申请更新
机主凭《回收证明》到当地县 (区、市) 农机化主管部门领取并填写《甘肃省农业机械报废更新补贴申请表》。向县 (区、市) 级农机化主管部门提出换购新机申请。县 (区、市) 级农机化主管部门根据机主报废和拟新购的机具类型和补贴额度, 对报废更新申请进行严格审核。通过审核的机主可优先获得新购一台拖拉机或联合收割机的农机购置补贴资格, 当地县 (区、市) 农机化主管部门为机主出具《甘肃省农业机械购置补贴指标确认通知书》。新购机具的实际价格 (指扣除应享受的农机购置补贴后的价格) 必须高于已兑现的农机报废更新补贴额。
兑现补贴
农机报废更新补贴与农机购置补贴同步兑现。当年核定的农机报废更新补贴额, 原则上当年使用。机主凭有效的《甘肃省农业机械报废更新补贴申请表》《甘肃省农业机械购置补贴指标确认通知书》和身份证明、包括人机合影在内的报废机具档案复印件, 到当地县 (区、市) 农机化主管部门办理农机报废更新补贴和购置补贴审核手续。经审核、公示、复核无异议的, 由当地县级财政部门将农业机械报废更新补贴和购置补贴拨付购机农户 (机主) 。购置新机后, 应依法在当地农机监理机构注册登记。
更新补贴标准
农机报废更新补贴额按报废拖拉机、联合收割机的机型和类别确定, 具体补贴标准如下表:
出租汽车废业更新办理程序 第4篇
(一)申请。申请人持车辆《准运证》、《道路运输证》、《中标凭证》、《机动车行驶证》,申请人有效证明(所在企业介绍信,个体车车主身份证原件及复印件)到市交通局出租汽车办事窗口提出申请。
(二)受理。申请人申请材料齐全的,市交通局出租汽车办事窗口应受理申请,发放《沈阳市出租汽车废业更新申请表》,同时收回车辆营运证件,通知申请人清除车辆营运相关标志标识。
(三)废业审核。申请人持申请材料、业户签章的《沈阳市出租汽车废业更新申请表》和已清除营运标识的车辆到市交通局出租处办事窗口进行废业审核。市交通局出租汽车办事窗口审核车辆废业材料,并对车辆外检,符合条件的准予废业;不符合条件的,向申请人说明原因。
(四)车辆迁出或报废。申请人到市公安局机动车管理部门办理车辆迁出本市或报废手续,并索取机动车迁出本市或报废有关证明材料,作为车辆更新的凭证。
(五)购置新车。申请人购置符合国家和行业管理标准的新车。新车车型应为经行业管理部门备案并确认的车型。
(六)车辆更新审核。申请人持《中标凭证》、《沈阳市出租汽车废业更新申请表》、原车辆迁出本市或报废有关证明材料、新车机动车销售统一发票、车辆产品合格证到市交通局出租汽车办事窗口审核。市交通局出租汽车办事窗口对准予更新的车辆发放《沈阳市出租汽车牌照办理通知单》和《沈阳市出租汽车营运证件申领表》;不符合更新条件的,向申请人说明原因。
(七)办理车辆牌照。申请人缴纳车辆购置附加税后,持上述手续到市公安局机动车管理部门办理新车入户,领取新车牌照及《机动车行驶证》。
(八)区运管部门意见。申请人填写《沈阳市出租汽车营运证件申领表》,并持表到落籍区运管部门审核意见。
(九)核发营运证件。申请人持《中标凭证》、《沈阳市出租汽车废业更新申请表》、《机动车行驶证》、车辆照片、《沈阳市出租汽车营运证件申领表》、《沈阳市出租汽车牌照办理通知单回执》到市交通局出租汽车办事窗口申领营运证件。市交通局出租汽车办事窗口审核相关材料,对车辆车容车貌外检合格后,发放车辆《道路运输证》、《准运证》等证件。
(十)营运。申请人持车辆营运证件到区运管部门办理车辆落籍、审验等相关手续,车辆正式营运。
相关要求:
1、车辆被盗、被抢或其它原因造成车辆灭失的,申请人需提供公安部门出具的车辆丢失证明和证件丢失证明。
2、出租汽车营运期限超过8年以上未办理废业手续的,由市交通局出租汽车管理部门予以强制废业。
3、车辆有交通行政案件未结案的,市交通局出租汽车办事窗口不予受理车辆的废业更新业务。
程序更新 第5篇
关键词:IAP,程序更新,ARM7
ARM处理器是一种高性能、低成本、低功耗的RISC微处理器,是目前最为流行的微处理器之一。ARM7作为ARM微处理器系列中的一员,广泛应用于工业控制、网络应用、消费电子和安全产品等。实际应用中往往需要对产品的程序进行升级以提升性能或消除缺陷,如何对已经投入使用的产品进行方便可靠的程序在线升级,是产品设计初期必须考虑的问题。尽管目前绝大多数基于Flash结构的ARM7芯片具备ISP功能,但是这需要特定的烧写软件支持和专业人员操作。烧写软件由芯片厂商提供,不便于集成到产品的主机端软件中。在产品软件功能中添加简单易用的程序升级功能十分必要,文中以NXP公司的ARM7芯片LPC2132为例,为具有IAP功能的ARM7芯片提出一个稳定的在线升级方案。
1 IAP功能介绍
在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。LPC2132的IAP程序位于芯片的BootBlock中,芯片出厂时由厂家写入,不可修改。IAP程序是Thumb代码,位于地址0x7FFFFFFO(重映射后地址)处[1]。IAP功能函数可以通过如下代码方便的调用。
void(*IAP)(unsigned int parameter[],unsigned int result[]);//定义函数指针变量IAP,
//IAP指向的函数的参数为两个unsinged int 数组
IAP = (void(*)())0x7fff_fff1 //设置函数指针,因为是Thumb代码,地址最低位设定为1
unsigned int parameter_in;//通过设定parameter_in各成员的值,实现各种IAP功能
usingned int result_out;
(*IAP)(parameter_in,result_out);//调用特定功能的函数,执行结果存入result_out中
//IAP的命令码、状态码和命令[1]。
2 程序更新流程
LPC2132有64 kB的Flash存储器,16 kB的RAM。Flash分为8个扇区,每个扇区4 kB空间,整个Flash存储器占用的地址空间为0x0000_0000-0x0000_ffff[2]。为了实现用户程序运行过程中的程序更新,可以设计一段特定的驻留代码,专门用于接收来自主机新的代码,将其烧写到相应的Flash空间,完成后跳转到新的代码去执行新的程序,用户程序接收到来自主机的更新命令后跳转到这段驻留代码。驻留代码通过串口接收命令,调用IAP函数烧写Flash,代码比较少,编译生成的映像文件<4 kB,通过JTAG口将这段代码烧写到第一个4 kB扇区,每次系统上电或重启后先执行驻留代码,其运行流程为:
(1)初始化串口,查询接受缓冲区,检测是否受到主机发来的4 bit数据包0x55 0xaa 0xff 0xff,其中前2 bit 0x55 0xaa为命令头;第3 bit 0xff为命令,表示需要更新;第4 bit为命令和校验。整个查询过程持续100 ms,如果在100 ms内没有收到此命令包,跳到应用程序入口执行旧程序,如收到该命令包,返回0xff,通知主机收到命令,执行下一步;
(2)接受主机发来的数据包,其格式如表1所示。
将接收到的4 kB数据存入SRAM,接收的同时计算数据载荷的8位校验和,对比校验和,如果校验和不对,给主机返回0x00表示接收不成功,主机会将当前包重发一遍;如果正确通过调用擦除IAP函数擦除当前需要写入的扇区,再调用写入IAP函数将RAM中的4 kB数据一次写入对应的扇区(通过配置上面提到的IAP函数参数parameter_in实现擦除和写入功能),给主机返回0xff,表示操作成功;
(3)如果上一步接受的数据包中标识指定其为最后一包,在执行步骤(2)写入操作后,跳到0x0000_1000处,即用户程序区,执行新的用户程序。通过下面的内嵌汇编代码可以十分方便的实现该跳转功能。
相应的用户程序设计时应该能从串口接收主机的命令,当接收到4 bit数据包0x55 0xaa 0xff 0xff后跳转到0x0000_0000处,执行驻留代码,由驻留代码完成用户程序的更新。用户程序设计时加上该功能后,其余与普通代码设计没有区别。
主机端软件在用户点击更新程序后,读取ARM7映像。bin文件,识别其大小,将其分成以4 kB字节为单位的若干段,按照上面与驻留代码的通信协议,将映像文件给驻留代码,并给用户提示是否成功信息。
在ARM应用系统中软件一般采用C语言进行编程,为了能进行系统初始化,通常会用一段汇编文件作为启动代码,实现异常向量表的定义,堆栈初始化、系统变量初始化、中断系统初始化、I/O初始化、地址重映射等。ARM7的异常向量位于地址0x0000_0000开始的32 bit内,当异常发生时程序从异常向量表取指令进行跳转。异常向量表位于Flash的第一个4 kB空间,用户程序运行时遇到异常时,也会到0x0000_0000开始的32 bit异常向量表中取出相应的指令。按照前面的设计,ADS编译器会将用户代码异常向量表运行地址设为从0x0000_1000开始,为了能让用户程序实现正确的异常处理,驻留程序的启动汇编代码需要将相应的跳转设为0x0000_1000开始的真正的用户异常向量处,这样驻留代码不能使用中断功能,实际上驻留代码完全可以采用查询方式进行串口通信。驻留程序的启动汇编代码示例如下[3]:
AREA vectors,CODE,READONLY
ENTRY
CODE32
Reset
LDR PC,ResetInit;复位跳到驻留代码初始化程序ResetInit
B 0x000010004;跳到用户异常向量UndefinedAddr
B 0x000010008;跳到用户异常向量SWI_Addr
B 0x00001000c;跳到用户异常向量PrefetchAddr
B 0x000010010;跳到用户异常向量DataAbortAddr
NOP
B 0x000010018;跳到用户异常向量IRQ_Addr
B 0x00001001c;跳到用户异常向量FIQ_Addr
ResetInit
…
3 注意事项
为了让用户代码运行地址从0x0000_1000开始,在ADS的ARM Linker选项卡将RO Base设为0x0000_1000。因为处理器要切换到Thumb指令执行IAP代码,需要将ARM C Compiler下的ARM Thumb Interworking选项勾上[4]。另外IAP函数使用了RAM空间的高32 bit空间,因此用户程序不应该使用该空间,用户堆栈栈顶要设定为小于RAM顶端地址减32。
4 结束语
实验结果显示按照上面的方法编写的驻留程序,能够稳定的接受主机发来的新程序,并成功烧写进Flash区,实现程序的更新。文中虽然以LPC2132为例实现,对于具有IAP功能的其他公司的ARM7芯片的在线程序更新也有借鉴意义。
参考文献
[1]Philips Corporation.Volume1:LPC213x User Manual Rev.01[Z].Holand:Philips Corporation,2005.
[2]Philips Corporation.LPC2132Product Data Sheet Rev.04[Z].Holand:Philips Corporation,2007.
[3]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
程序更新 第6篇
在实际应用中, 用户往往喜欢程序能自动生成Word文档, 比如将数据库中的内容提取出来生成Word, 这样既符合办公习惯, 也方便用户修改、打印, 同时也降低了开发成本。由应用程序生成Word的例子比较多, 实现起来比较容易, 但当Word文档内容修改后为了使当前文档内容与数据库内容一致, 需要反方向实现数据写入, 也就是将Word文档内容写回数据库进行数据更新。采用VC++将数据库内容生成Word文档, 并利用VBA实现了将Word文档修改后的内容写回原数据库, 保证了数据更新的一致性。
2 原理
本例采用VC++、Word 2003、Access2003实现, 只需在安装有Office2003的机器上即可运行本例。每一个Microsoft Office应用程序都在dll文件中提供了多种类型库资源, 这种dll文件叫做目标库 (*.olb) 。VC++调用Word, 需要导入库文件才能使用Word中的各种功能。不同版本的应用程序其类型库文件的名字不同, 如Word 2003的为msWord.olb, Word 2000为msWord9.olb。
VBA是集成在Office产品中的开发语言, 是在Visual Basic的框架上建立起来的, 它的语法、功能甚至开发环境跟Visual Basic都是基本相同的, VBA的项目仅由VBA的Word、Excel等称为宿主的Office应用程序来调用。本例通过VBA实现将Word文档内容写回原数据库的功能。
运行界面如图1所示, “读取数据库内容”将数据库内容显示于界面, 然后点击“生成Word文档”按钮, 将界面内容写入Word, 如图2所示, 修改文档内容, 在文档关闭时自动读取文档内容更新原数据库, 通过“读取数据库”可以看到更新后的数据库内容, 如图3所示。
3 实现
3.1 数据库内容生成Word文档
(1) 新建工程和数据库
在VC++中新建一个Dialog-Base MFC AppWizard Exe工程myback;进入MFC ClassWizard, 点击Add Class, 选择From A Type Library, 找到office目录下Word 2003类型库msWord.olb, 选择_Application、Documents、_Document、Shapes、Shape、TextFrame、Range类添加, 并在对话框文件mybackDlg.cpp中声明相应对象Wordapp, WordDocs, WordDoc、DocActive, shapes, shape, textframe, range。
利用Access2003新建数据库myback.mdb, 并新建表xinxi, 其中有字段myname, context。
(2) 初始化COM, 连接数据库
在myback.cpp的InitInstance () 函数中添加如下主要代码:
(3) 在mybackDlg.cpp文件中包含两个头文件
(4) 读取数据库内容生成Word文档
其一:为按钮“读取数据库”添加如下主要代码, 将数据库表中内容显示在界面上:
其二:为按钮“生成Word文档”添加代码如下, 将当前界面内容生成Word文档。其中, 在生成Word文档前, 首先将数据库路径、数据库名和表名写入临时文本文件, 确保数据写回的正确路径。在生成Word时, 将内容写入文本框, 文本框名称即表中myname字段内容, 文本框内容即表中context字段内容, 便于在写回时正确找到对应的字段。
3.2 修改后的Word文档内容写回数据库
Word文档修改后, 读出文档内容并写回更新原数据库。由于关闭当前Word文档时, 自动执行AutoClose () 函数, 所以在此函数中添加VBA代码, 读取当前文档中内容并写回数据库的表中实现数据更新。由于文本框名称对应表中myname字段内容, 如果二者比较相同则表中存在该字段, 就将文本框中的内容写入context字段进行更新。为了不影响Word应用程序的正常使用, 新建了Word模板mynormal.dot, 其中带有为AutoClose () 函数自定义的代码, 在上述3.1生成Word新建文档采用的模板即是此处将加过代码后的模板。通过“工具”“宏”为AutoClose () 函数添加如下主要代码:
4 结语
采用VC++6.0、Word2003、Access2003, 实现了将数据库内容生成Word文档, 并将修改后的Word文档内容写回数据库。生成Word文档时, 以字段内容写入文本框为例, 也可以将数据库内容读入Word表格等其他形式, 通过读取表格等对象内容更新数据库, 实现方法相似。
2009-10-15
摘要:由程序将数据库内容生成Word文档实现起来方便, 当Word文档内容修改后, 需要将更新内容写回数据库以保证数据更新的一致性, 本文通过实例实现关闭Word文档时自动将内容写回数据库功能。