VFP与ASP相结合开发Web数据库应用
来源:优易学  2011-12-9 18:28:34   【优易学:中国教育考试门户网】   资料下载   IT书店

  1.VFP与Web数据库应用

  ----作为最成功的大众数据库,Foxpro简便易学,有广大的用户。随着VFP 5.0的推出,VFP已经成为一个强大的企业级开发工具。它不仅可以开发文件/服务器(F/S)数据库应用,也可以开发C/S应用,这时VFP作为一个前端工具,后端可以是SQL Server,Sybase等数据库Engine。通过Remote View和SQL Passthrough函数,VFP可以像操作本地数据一样,方便地处理服务器端数据。----在Internet/Intranet影响日益巨大的今天,开发Web数据库应用成为引人关注的技术。Web数据库应用有一个天然的多层C/S结构。在这个结构中,客户端(Client)仅由Browser组成,几乎没有软件维护和升级的问题。来自Client的请求发送到WebServer,我们只须开发WebServer端软件,处理请求,与数据库服务器交互、并把结果返回Client,系统维护和升级非常方便。只要允许,任意一个客户都可以通过Internet或Intranet访问我们的数据。

  ----VFP完全具备开发Web数据库应用的能力。不过有意思的是,这次VFP被推到了后台,在数据库服务器上专门处理数据存取和实现商业逻辑。数据库服务器和WebServer可以运行在同一个网络服务器上,或者运行在由高速通道连接的两台网络服务器上(如NT Server),这样网络传输瓶颈不再存在。并且借助NTServer的安全管理,客户并不能直接接触VFP数据库,而是通过WebServer存取数据,VFP数据库的安全特性得以大大提高,而此两项一般认为是VFP的重要弱点。

  2.ASP(Active Server Page)与VFP的组件技术

  ----Web数据库应用可以由CGI、ISAPI、IDC、ASP等实现。其中ASP的功能最为强大,在其中可以混用HTML、DHTML、ActiveX、VBSsript或JavaSript,特别是可以使用服务器端组件。此服务器端组件可以用VFP、VB、VC++、Delphi等任意支持COM技术的语言编写,以实现用户特定的商业逻辑。如果不出意外,ASP将成为主流技术。目前有Microsoft的IIS(Internet Information Server,NT Server)和PWS(Personel Web Server,Win95)支持ASP。----在传统的F/S或C/S应用中,组件作为面向对象的编程风格,你可以随自己的喜好,采用或不采用它。然而在ASP中使用VFP,组件(一个OLE Server DLL)是你唯一的选择。你的处理过程都应封装在一个或多个组件中。

  3.使用的环境和工具

  ----对于ASP,需要WinNT4.0(ServicePack3)、IIS3.0(WinNT自带)、Visual InterDev1.0。也可以是:Win95、PWS(Visual InterDev1.0中提供)、Visual InterDev1.0。----为了使IIS或PWS支持ASP,在安装Visual InterDev时必须首先在服务器上选择安装其中的Server Components:FrontPage Server Extensions和Active Server Pages,然后在开发服务器上安装Client Components:Visual InterDevClient。也可以把这些都安装在同一台机器上,这样可以在单机上方便地编程、调试。

  4.VFP组件的实现

  ----在VFP中开始一个Project,取名为Classes,然后在此Project中建立一个Program,取名Classdef.prg。它定义了一个OneRecord类,其功能是一条条显示一个数据库,具有向前、向后和定位能力。使用一个DBF文件d:\vfpweb\data\booksno.dbf,结构为:
  Field_name Field_type Field_len
  bookno C 16
  bookname C 50
  author C 12
  editor C 14
  pubdate D 8
  charnum N 4.0

  在Classdef.prg 中 键 入 代 码:
  Define class onerecord as custom olepublic
  mcDatapath=""

  function getdatapath
  return (this.mcdatapath)

  function getcurrentno
  return recno()

  function init
  set exclu off
  set century on
  set date to ansi
  return

  function setdatapath
  lparameter cpath
  if type("cpath")< >"C"
  return
  endif
  this.mcdatapath=cpath
  set defau to (cpath)
  if not used("booksno")
  select 0
  use booksno
  else
  select booksno
  endif
  return

  function movenext
  if .not.eof()
  skip
  endif
  return

  function moveprevious
  if .not.bof()
  skip -1
  endif
  return

  function destroy
  use
  *clear all &&clear all 将 挂 起 服 务 器
  return

  function iseof
  if eof()
  return .t.
  else
  return .f.
  endif

  function isbof
  if bof()
  return .t.
  else
  return .f.
  endif

  function getbookno
  return bookno

  function getpubdate
  if empty(pubdate)
  return ""
  else
  return pubdate
  endif

  function geteditor
  return editor

  function getbookname
  return bookname

  function goto
  lparameter recnum
  if type("recnum")< >"N" &&error data type

  return
  endif
  if recnum< 1 .or. recnum >reccount()
  return
  else
  goto (recnum)
  endif
  return
  EndDefine

  ----在菜单Project,选中SetMain,然后Build,在Build对话框中选BuildOLEDLL。好了,我们到此就完成了一个OLE Server,并且它已经自动注册在我们的机器上。我们可以在菜单Project|ProjectInfo弹出的Project Information对话框中看到这个组件的信息:
  Server Classes:onerecord
  Project Name:Classes
  OLE

  ---- Server 的 引 用 方 法 是createobject("ProjectName.ClassName"), 对 于 我 们 这 个 组 件, 就 是:createobject("classes.onerecord")。 可 以 直 接 在VFP 的Command 窗 口 中 交 互 式 地 测 试 之, 在Command 窗 口 中 键 入:
  ox=createobject("classes.onerecord")
  ox.setdatapath("d:\vfpweb\data")
  ?ox.bookname
  ?ox.getbookname
  ox.movenext
  ?ox.getbookname
  ox.goto(30)
  ?ox.getbookname

  ----可以直接看到执行结果,最后不要忘了释放该组件:
  release ox

  ----这个组件是针对特定数据库进行操作的,测试很方便。下面,我们再实现一个更为一般的类ClsQ2T,其功能是任意指定一条SQL查询语句(针对任意一个或多个数据库),将查询结果以表格的形式显示在Web页面上,其中使用了ASP的接口。它不仅封装了数据处理,而且通过ASP接口,也封装了数据显示。----仍在Classdef.prg之中,接着最后一行代码,键入:

  define class clsq2t as custom olepublic
  mcontext=.null.
  function onstartpage(ocontext)
  this.mcontext=ocontext &&对ASP接口的引用
  return
  function init
  set exclu off
  set safety off
  return
  function setdatapath(strpath)
  merrnum=0
  on error merrnum=error( )
  set default to (strpath)
  if merrnum< >0
  return "Error in setdatapath"+message()+chr(13)
  endif
  on error
  return "OK,setdatapath"+strpath+chr(13)

  *函数querytotable要求传入一个SQL Select串,如:
  * "select bookname,editor from booksno where charnum >500"

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训