您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Delphi >> 正文

Google
深入Delphi编程
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 16:01:41
,只需要大致理解这个模型的结构就可以了。
  B/S模型无疑是当前最为流行的多层数据库模型之一。也许你已经听说过B/S这个名词,它是Brower/Server(浏览器/服务器)的缩写。Brower是指IE/Netscape这样的浏览器,Server包括数据库服务器和应用程序服务器。用户通过浏览器发出某个请求,通过应用程序服务器-数据库服务器之间一系列复杂的操作之后,返回相应的Html页面给浏览器。
  是不是觉得十分熟悉?对了,其实这就是大家再熟悉不过的Internet上的WEB数据库,当然它也可以用于局域网。它实际上可以说是一种最常见的多层模型。
  在对数据库的发展进行回顾之后,我们终于赶上了最流行的步伐。但是,也许有人在这里却感到泄气了。因为他听说现在的WEB数据库编程,是Perl、ASP、PHP、JAVA这些语言的天下。难道我们一直忠实追随的Delphi,在面对当代最流行的Web数据库的时候,竟然面临淘汰的命运?
  不,不是的。其实Delphi对Web数据库的开发提供了非常良好的支持,特别是依据强大的数据库支持和可视化编视的特点,它有着其他语言不可比拟的优势。
  下面的内容将集中于用Delphi开发Web数据库。
  首先要从Web本身讲起。平时我们浏览的Web页面,一般可以分为两种。一种是静态页面,这种页面是文本格式的html文件。但是,要响应用户的不同需求,从而反馈给用户不同的页面,就必须使用动态页面技术了。例如,根据用户输入的名字,迅速在数据库中查找到相应的数据,并动态生成一个页面返回给用户。
  怎样实现动态页面技术呢?最早的一种方法是CGI(Common Gateway Interface,通用网关接口)。这种接口允许浏览器发送和接收数据,并且基于应用程序的命令行进行输入和输出。当浏览器发出指向应用程序的请求时,Web服务器会自动启动该程序,并在浏览器和应用程序之间传递输入和输出的数据。实现CGI的语言有很多种,其中比较流行的是Perl。另外,还有一种特殊的WinCGI。WinCGI与普通CGI的区别是,它通过INI文件来代替命令行参数作为输入输出,这主要是为Visual Basic设计的,因为VB不能访问环境变量。Delphi对这两种CGI都提供了很好的支持,可以编写出非常复杂的CGI程序。
  第二种方法是使用Web服务器内置的API接口。用这种接口编写出来的Dll文件,被Web服务器装载到自己的内存空间中,当服务器接收到相应的页面请求时,它将启动一个新的线程来执行Dll中的相应代码。由于不需要执行外部的EXE文件,这种程序的速度非常快。这种API主要有ISAPI(Internet Server API)和NSAPI(Netscape Server API),其中前者已经成为事实上的标准。Delphi对这两种API也提供了很好的支持。提得一提的是,Delphi的C/S版提供了一个通用的类框架,消除了CGI、WinCGI和ISAPI之间的区别,这样,我们可以轻松地将一个应用程序在这三者之间转换。
  还有一种是Web服务器内置的脚本语言,可以被简单地嵌入html文件,通过Web服务器的解释执行来产生动态页面。著名的ASP、PHP、JSP都属于此类。这看起来和Delphi没有什么关系,但事实上,Delphi也能提供对ASP的强力支持!ASP的初学者可能会把注意力都集中在它的脚本语言上,其实ASP是由三部分组成的:脚本、组件和html。光是掌握脚本和ASP原有的组件特性是远远不够的,只有自行开发组件,才能实现真正复杂、高效的应用。Delphi就非常适合开发这种组件。国内著名大富翁论坛,就是基于Delphi+ASP的成功例子,同时它还公布了所有的源代码,可供借鉴。
  让我们先建立一个程序。这个程序和以往的Delphi不同,要求删除所有的窗体和多余的代码,最后只剩下这么一段:
  
  program CgiDate;
  
  {$APPTYPE CONSOLE} //这行编译器指令表示这是一个控制台程序,不需要窗体,在终端窗口中输出
  
  uses
  sysutils;
  
  begin
  writeln('HTTP/1.0 200 OK');
  writeln('CONTENT-TYPE: TEXT/HTML');
  writeln;
  writeln('<html> <head>');
  writeln(' <title>Time</title>');
  writeln('</head><body>');
  writeln('<h1>Time at this site</h1>');
  writeln('<hr>');
  writeln('<h3>');
  writeln(formatdatatime('"Today is " dddd,mmmm d,yyyy,' + '"<br> and the time is "hh:mm:ss AM/PM',now));
  writeln('<h3>');
  writeln('<hr>');
  writeln('</body></html>');
  end;
  
  编译后,将该程序置于Web服务器下的有scripts权限的子目录中,并用浏览器访问它,就可以得到一个关于当前时间和日期的页面。
  分析一下这段代码。格式很简单,都是用writeln生成标准输出。首先的两行生成html的描述,中间空一行,接下来的代码生成了一个完整的html文件。这个文件被返回给浏览器并显示出来。与静态页面不同是,有一行html文本是通过formatdatatime函数动态生成的,因此根据当前时间的不同会有不同的显示。
  这就是一个最简单的CGI程序。虽然简单,但已经可以看出CGI程序的基本工作原理:通过标准输入输出产生动态的html页面。
  在这个基础之上,可以方便地实现对数据库的访问,并生成相应的html。
  下面是一个例子:
  
  var:
  Table1:TTable;
  Begin
  Showheader; // Showheader过程生成html文件的头部,代码与上例相似
  Table1 := TTable.create(nil);
  Try
  Table1.Databasename := 'DBDEMOS';
  Table1.tablename := 'Employee.db';
  Table1.indexname := 'Byname';
  Table1.open;
  ShowTabindex; //显示表中的列
  Finally
  Table1.close;
  Table1.free;
  End;
  Writeln('</body></html>');
  End;
  
  这段代码动态建立了一个Table对象,并将它与DBDEMOS数据库中的表Employee.db相连(当然这些必须先在BDE中设置)。ShowTabindex过程显示了该表中的两个列:
  
  procedure ShowTabindex;
  begin
  table1.frist;
  writeln('<ul>');
  while not table1.eof do
  begin
  writeln(format('<li>s%s%',[table1.fieldbyname('FirstName').AsString, table1.fieldbyname('LastName').AsString]);
  Table

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号