作业帮 > Access > 教育资讯

Access教程:实现Access数据库的Web查询

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 01:35:39 Access
Access教程:实现Access数据库的Web查询
Access教程:实现Access数据库的Web查询Access
【网络综合-Access教程:实现Access数据库的Web查询】:

  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。 

Access