实现Access数据库的Web查询
2008-02-23 06:52:47来源:互联网 阅读 ()
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,
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 实现Access数据库的Web查询 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash