说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

实现Access数据库的Web查询-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
实现Access数据库的Web查询-VB资料

  ISAPI与DAO简介

  ISAPI(Internet Server Application Prgramming Interface)是微软公司提供的,和其IIS紧密结合的API。用它可以编制Internet/Intranet的数据库、网络管理和BackOffice等应用。

  数据访问对象(DAO即Data Access Objects),原来是微软为Visual Basic和Access Basic设计的可编程接口。后来有了OLE Automation(自动控制)技术,它就可以用于C++编程了。

  程序员可以用DAO的三种类型编制C++代码:

  * DAO OLE Automation接口;

  * dbDAO类;

  * MFC DAO类。

  其中dbDAO类和Visual Basic的DAO类非常相似,易于使用,笔者就是用它来进行数据库编程。

表1 宏变量名 FORM中对应数据域 类中的属性变量 解释
SZTXTDATABASENAME DATABASENAME m—szDatabaseName 数据库名
SZTXTTABLENAME TABLENAME m—szTableName 表名或查询名
SZTXTFIELDNAME FIELDNAME m—szFieldName 搜索字段名
SZTXTFIELDVALUE FIELDVALUE m—szFieldValue 字段值
  编程背景

  现在有不少中小企业或部门的数据库都基于Access,且其一般用Client/Server模式组建MIS。在当今流行Internet/Intranet且必将成为今后主流的形势下,有必要把原先的数据库搬上Internet/Intranet。

  不少人正使用ASP、IDC、VB Script、Java Script、Perl甚至Shell Script来编制Web应用程序,虽然它们比ISAPI编制起来较容易,但其安全性较差,而且不如用C、C++等灵活强大,所以,作为一名较专业的程序员,选择用C++等高级语言来编制Web应用是更明智的选择。

  Microsoft公司的系统和开发软件正处于流行的时候,基于上述因素,笔者用Visual C++(4.2以上)提供的ISAPI和DAO开发工具,设计了Access数据库的通用Internet/Intranet查询程序,可运行于IIS 2.0、Peer Web Server和Personal Web Server等Web服务器。

  程序使用方法和功能介绍

  程序编译连接后,生成search.dll,置于Web服务器的可执行目录中(如/cgi-bin)。

  Web主页制作人员可以把以下HTML片断插入页面:

  〈form action=″/cgi-bin/search.dll″ method=″GET″〉

  〈input type=″hidden″ name=″DATABASENAME″ value=″Northwind.mdb″〉

  〈input type=″hidden″ name=″TABLENAME″ value=″产品″〉

  〈input type=″hidden″ name=″FIELDNAME″ value=″产品名称″〉

  〈p〉〈input type=″text″ name=″FIELDVALUE″ size=″30″〉〈/p〉

  〈p〉〈input type=″submit″ value=″按此查询″〉〈/p〉

  〈/form〉

  以上三个“hidden”类型的输入数据由主页制作人员输入,在浏览器中不显示出来,以求界面美观,FIELDVALUE则由客户由浏览器填入数据。四个数据域分别解释如下:

  * DATABASENAME: Access数据库名,缺省在%system%\system32目录,如输入全路径名,则用C语言格式,如:c:\\data\\mydata.mdb。

  * TABLENAME:表名或查询名,可以自定义一个符合输出的查询。

  * FIELDNAME:要以之为查询条件的字段名,为文本型。

  * FIELDVALUE:字段值,由客户输入。

  客户在浏览器中输入数据后,按下查询按钮,则由服务器输出以下查询结果:

  select * from TABLENAME where FIELDNAME like ″*FIELDVALUE*″

  因为*为Access查询语句的通配符,所以本程序能实现基于字段FIELDNAME的模糊查询。

  程序流程和主要函数说明

  图1 本程序对一个客户请求的处理流程

  (一)头文件MyTable.h

  1.定义了4个宏变量分别和FORM中的四个输入数据域对应,用于解析参数以取得值,如表1所示。(下转B7版)

  2.定义了CHttpServer类的派生类CMyTableExtension:

  class CMyTableExtension: public CHttpServer

  {

   public:

CString m—stReadError;

LPSTR m—szDatabaseName;

LPSTR m—szTableName;

LPSTR m—szFieldName;

LPSTR m—szFieldValue;

void cdbSetupPage(CString& stPage);

CHAR atoiHex(CHAR ch);

  //ParseInput函数解析客户输入数据

BOOL ParsetInput(LPSTR szInput,LPSTR szItem,LPSTR *pszData);

  //strVARIANT函数把变体变量值转换成一般数据类型值

CString strVARIANT(const COleVariant& var);

CMyTableExtension();

~CMyTableExtension();

  //{{AFX—VIRTUAL(CMyTableExtension)

  public:

  virtual BOOL GetExtensionVersion(HSE—VERSION—INFO* pVer);

  virtual DWORD HttpExtensionProc(EXTENSION—CONTROL—BLOCK* PECB);

  //}}AFX—VIRTUAL

void Default(CHttpServerContext* pCtxt);

  DECLARE—PARSE—MAP()

  //{{AFX—MSG(CMyTableExtension)

  //}}AFX—MSG

  };

  其中定义的数据库查询函数(cdbSetupPage)和重构的Http服务器扩展处理函数HttpExtensionProc为其中核心。以下重点讲述MyTable.cpp文件中的这两个函数。

  (二)函数cdbSetupPage

  根据四个属性变量(见表1)输出数据查询结果,存放于stPage并返回:

  1.打开数据库OpenDatabase:

  CdbDBEngine dbeng;

  CdbDatabase db;

  db=dbeng.OpenDatabase(m_szDatabaseName);

  2.创建查询结果记录集:

  CdbRecordset rstMyTable;

  CString strQuery;

  strQuery.Format(″select * from %s where %s like \″*%s*\″″,

  m_szTableName,

  m_szFieldName,

  m_szFieldValue);

  rstMyTable=db.OpenRecordset(strQuery,dbOpenSnapshot);

  以上strQuery为查询语句,dbOpenSanpshot表示打开一快照类型的记录集。

  3.用记录集的Fields集合(Collection)的GetCount()和GetName()分别取得字段数和各字段值:

  long i;

  CString stPage,stTemp;

  for (i=0;i〈rstMyTable.Fields.GetCount();i++) {

   stTemp.Format(″〈TH〉%s〈/TH〉\n″,

rstMyTable.Fields[i].GetName());

stPage += stTemp; }

  4.输出记录集中所有记录的值:

  for (i=0;i〈rstMyTable.Fields.GetCount();i++) {

stTemp.Format(″〈TD〉%s〈/TD〉\n″,

strVARIANT(rstMyTable.Fields[i].GetValue));

  stPage += stTemp; }

  (三)重构基类CHttpServer的成员函数HttpExtensionProc

  1.从EXTENSION_CONTROL_BLOCK* pECB取得查询字串,再由函数ParseInput解析此字符串,得出客户端的各数据域的输入值:数据库名,表名,字段名,字段值;

  2.由函数cdbSetupPage输出数据库查询结果字符串stPage;

  3.用EXTENSION—CONTROL—BLOCK对象的ServerSupportFunction方法向客户浏览器输出查询结果字符串stPage。

  后记

  由于用Visual C++(4.2以上)编制程序时,有很多环境设置,所以笔者把整个项目(包括源程序和面目设置等)和文档打了个包,需要的读者可以E-mail联系,地址:zhugeming@263.net。


移动开发者走向全能开发者的五大技能 360和西部数码战略合作 一键开启为国内30万家网站提供免费安全服务 中兴携手英特尔发布基于X86的Geek手机 应用生态建设仍需努力 微软将WP周期延长至36个月 明年推企业功能包 Gartner:全球PC出货量二季度下滑11% 联想成全球最大PC厂商 用来简化开发任务的20个JavaScript类库 煎饼,娇妻,Belief:黄太吉的移动互联网营销 AWS大降价:最高打两折 推荐十款超赞的Google Chrome扩展插件 在团队中进行单元测试/TDD的12条经验 小米游戏中心6月数据报告:页游转手游怎么搞? 司机请专心:安全是车载APP要解决的大问题 Windows 8之父Steven Sinofsky:跨平台开发会为什么越来越难? 一些达成共识的JavaScript编码风格约定 语义技术——微软、谷歌和Facebook的必争之地 初创公司PlumGrid:前思科工程师的“逆袭之战” Firefox OS智能手机继续扩张 德国市场今日开售 如果让莎士比亚、海明威编写JavaScript代码 开源的数据可视化JavaScript图表库:ECharts 已迭代1.3亿年的分布式系统——Anternet 软硬整合:14个可改变世界的Kickstarter项目 是时候放弃MySQL的五大理由 比特币钱包Coinbase推出即时交易功能,无需银行转账手续 回收不活跃邮箱续:雅虎高管称能保证前用户信息和数据安全 移动周报:IT民工携娇妻转战传统行业,黄太吉的移动互联网营销 独立游戏开发的传奇!LIMBO开发商Playdead公司CEO专访 Firefox OS模拟器4.0正式发布 支持模拟触摸事件 莫轻言已成功部署大数据,也许你离达标还相去甚远! 基于Java的四大开源测试工具 Firefox OS:称霸移动市场?我们的计划更长远! 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现 websphere的问题(1)? 我是第一次使用域.为什么无法在域控制器里增加用户?help me! 求助:模板的连接问题 strust 请问:哪里有人民邮电出版社的《个体软件工程》下载 ?(有分送) 存储过程执行出错,请帮忙看看!急! 请问:在sybase中的设备大小的设定,有没有一个标准?? include问题,屡试屡败 请问怎么才能用最简单的方法把程序做成服务? 程序设计文档怎么写啊?求教 不好意思,一个简单的问题 websphere的问题(2)? 请问如何实现模式窗口,就是当打开子窗口主窗口不能操作,除非关闭子窗口,如果有这样的网页也行 关于清华出版社出版的“微软.NET程序设计系列”之《ADO.NET程序设计》的问题,大家来讨论一下 如何用程序实现光驱的弹入弹出? 在线等了,各位帮忙了!! 我运行了一个网络管理软件出现乱码?而别的程序都没有乱码? 对话框上面显示视图,怎么办? 一道四级题有一点不明白的地方,谢谢各位高手帮我解决一下困惑。。 websphere的问题? 在一个对话框CDialog类中访问窗体视图类CFormView中的函数发生错误? 有关简繁体转换的问题 怎么分离这个字符串 aa|bb|cc|dd| ASP连接Oracle9i的连接字符串是什么? 请教:EXCEL中使用VB进行串口编 websphere的问题(4)? 如何在自己写的类的属性、方法在被使用的时候显示一些相关信息? 高分:大侠们,帮我看一下这个设计思路对吗?(在线等待!) 初级问题:请问用ASP开发BS结构程序,应该选什么工具啊 请教各位pb的可执行程序的分发 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 多谢awpking ,请进给你洒分. asp里调ActiveX控件,客户端却不能用,请帮助解决,100分相送。 如何让两个网段的电脑互相访问 在线等!打开文档的问题! HtmlHelp用法问题。急急!!1 只有在这问,关于笔记本网卡的驱动程序 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 菜鸟的问题,大虾解决 本地安全策略打不开,怎么解决? 高分求教,如何让asp.net生成的网页转为pdf输出,在线等待 求救:用JMail发送邮件,用IIS的SMTP虚拟服务器,邮件都堵在Queue目录里发不出去 时间问题 在线等待 !!!没分啦!以后报答!! 为何执行int n=str.GetLength()后,n为0??? 急寻《基于XML电子公文格式规范》 初学 关于datagrid的问题 讨论用例分析技术 .net被我安在D盘,D盘下有一个WINNT目录被我删了,.NET就起不来了,我的系统在C盘 怎样删除表中的重复数据,急!! web datagrid的页脚怎样显示整个列的合计值或整个表的记录数? 如图,在梯形ABCD中,AD//BC,AD=4,DC=5,BC=11,梯形的高为4,动点M从B点出发沿线段BC以每秒1个单位长度向终点C运动,动点N从点C出发沿CDA以每秒2单位向终点A运动,若M、N两点同时出发,当其中一点到达终点 如图,在梯形ABCD中,AD‖BC,AD=3,DC=5,AB=4√2,∠B=45°. 动点M从B点出发沿线段BC以每秒2个单位长度的如图,在梯形ABCD中,AD‖BC,AD=3,DC=5,AB=4√2,∠B=45°. 动点M从B点出发沿线段BC以每秒2个单位长度的速度 若a=3,b=2,c=1,表达式(a>b) 如图,在梯形ABCD中,AD∥BC,AD=4,DC=5,BC=11,梯形的高为4,动点M从B点出发沿线段BC以每秒1个单位长度的速度向终点C运动;动点N同时从C点出发沿CDA以每秒2单位长度的速度向终点A运动.若M,N两点同时 靖康之变是1127年还是1126年要准确! lotte duty free 为什么要机票才能买东西 LOTTE DUTY FREE怎么样 lotte duty free中内女人是谁就是bigbang后出来的内个 lotte duty free MV有哪些明星 什么是导线电阻定律 航弹爆炸原理航弹投掷之后是怎么被引爆的呢 伊朗边境发生武装冲突 14名边防人员朝鲜纪念中国志愿军赴朝参战63周年 世界浙商大会开幕 夏宝龙赞浙商是最倚人感染H7N9禽流感病毒疫苗株在杭州马尼拉巿长据报拟下月赴香港就人质事件俞正声谈中共十八届三中全会毒性很强的废水直接排放 瓯海一老板被从X光片CT片中提炼白银 丽水男子因杭州西湖特聘十大“刺客” 常年为西湖立塔打井 杭州首个井筒式停车库有望下海铁联运专列开通(图)兰州市软式垒球锦标赛落幕兰州:一男子遭风筝线割喉 抢救及时无防务短评:054、056护卫舰同换更扫码新闻扫码新闻Buni兔中银基金获明星基金奖实现权威奖项“大伪球迷莎娃坦言对足球不感冒 纳达尔:西班牙詹姆斯妻子一句话吓热蜜一身汗:甜蜜阿定向降准靴子落地我省金融市场应声生变獠牙天子重生之我是八戒蝶舞魔兽新品英雄元素小子之名扬大陆星群粉色都市现代版三妻四妾极道修行录《茅道网游剑仙卧龙海旅游中庙旅游半汤温泉旅游丰宁坝上旅游天门寺旅游荔江湾旅游桂林訾洲公园旅游桂林市区水上游旅游孟屯河谷旅游清风楼旅游开元寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘