论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Access数据库教程
Tag:2000,2003,2007,查询,sql,,教程,安全,转换,排序,复制,删除,修改,视频教程

Perl下Access数据库的连接

文章类别:Access数据库 | 发表日期:2009-7-28 11:27:36

Perl下Access数据库的连接

 概述 
      要使用本文介绍的方法首先需要安装Win32-ODBC模块,具体的步骤如下:
1:从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一个temp目录,共有三个文件:
Readme
Win32-ODBC.ppd
Win32-ODBC.tar.gz

2:在DOS窗口下,temp目录中运行下面的DOS命令:ppm install Win32-ODBC.ppd。
然后准备测试用数据库(Access)
1:启动MS ACCESS,建立一个新空数据库,命名为odbctest.mdb,保存在某一目录中(记住路径)。
2:然后新建一个表,建立三个字段:
字段名称 数据类型 长度
Name 字符, 长度50
Email 字符, 长度50
Age 数字、长整型
将这个表保存为address(注意这个例子中,没有用自动增加的ID。输入若干记录:
  Nighthawk nighthawk@163.net 20 1234567
  John jt@163.net 24 0284393293
  kit kit@21cn.com 18 3948932

保存后,关闭数据库文件。

3:打开控制面板中的 ODBC数据源(32位),在用户DSN栏中,找到用户数据源列表,选中名称为“MS Access 97 Database”的一行,然后按“配置”键。
在Database框中按“Select..”,选择步骤1.2中建立的数据库文件odbctest.mdb,按OK即可。ODBC设置中的其它项目全部采用缺省设置,然后就是OK,确定,关闭对话窗口。
最后进行测试:
  #!/usr/bin/perl
  use Win32::ODBC;
  $DSN = "MS Access 97 Database";
  $DBase = "access.mdb";
  #连接数据库
  if (!($db = new Win32::ODBC($DSN))){
  print "连接数据库失败.n";
  exit();
  }
  else{
  print "连接数据库成功 (连接号:", $db->Connection(), ")nn";
  }
  #数据库中的表
  print "数据库中的表:";
  @tables = $db->TableList;
  print @tables;
  print "n";
  #选择数据表
  if (! $db->Sql("SELECT * FROM [address] WHERE age>=20") ){
  @FieldNames = $db->FieldNames();
  $Cols = $#FieldNames + 1;
  #表中字段数
  print "表address字段数:$Colsn";
  #字段列表
  for ($i = 0; $i < $Cols; $i++){
  print "$FieldNames[$i]t";
  }
  print "n";
  #列出年龄大于20的记录
  while($db->FetchRow()) {
  @values = $db->Data();
  print @values;
  print "n";
  }
  }
  ##### sql #########
  #添加记录
  $sqlinsert = "INSERT INTO address
  VALUES ('Euler', 'euler@21cn.com', 28, '021-345689')";
  #更新记录
  $sqlupdate = "UPDATE address SET age = age+10 ";
  #删除记录
  $sqldelete = "DELETE FROM address WHERE name='jimtyan'";
  $rc = $db->Sql($sqlinsert);
  die qq(SQL 失败 "$sqlinsert": ), $db->Error(), qq(n) if $rc;
  $rc = $db->Sql($sqlupdate);
  die qq(SQL 失败 "$sqlupdate": ), $db->Error(), qq(n) if $rc;
  $rc = $db->Sql($sqldelete);
  die qq(SQL 失败 "$sqldelete": ), $db->Error(), qq(n) if $rc;
  #关闭链接
  $db->Close(); 

,你必须使用Windows 2000和IIS 5.0。IIS 5.0的两个改进使得我们可以实现这种转换,它们是:使用Server.Transfer的“自定义错误信息”功能以及在ASP页面中使用Server.Transfer的能力。虽然IIS 4.0也支持自定义错误信息,但它使用的是Response.Redirect,没有用,所以本文方法要求使用IIS 5.0。Response.Redirect之所以没有用,是因为搜索引擎不会追随重定向。 
使用本文所介绍的方法,网站开发者先用静态风格的URL链接事实上并不存在的页面。然后设置IIS服务器,告诉它要用指定的ASP页面(404.asp)来处理网站上出现的所有404错误。在这个404.asp页面里,把原来的URL转换成正式的动态URL,利用Server.Transfer执行并向用户浏览器返回目标页面。 
      假设有如下URL: 
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
      其中myserver.com以网站的域名取代,该URL将返回404错误。我们首先要做的是用某个专用的.ASP页面来处理所有这些404错误。这可以用IIS 5.0的“自定义错误信息”功能来实现。设置该功能的过程如下: 
●在MMC中打开IIS服务器管理器 
●右击Web网站节点,然后选择“属性” 
●点击“自定义错误信息”页 
●向下滚动,直至找到404错误 
●双击404错误,打开“错误映射属性”对话框 
●将消息类型改为URL 
●在URL框输入“/404.ASP” 
●点击“确定”关闭窗口 
现在404错误已经由404.ASP处理了。当IIS调用404.asp页面时,它会提供导致这个404错误的URL,这对我们来说是非常有用的。 
错误处理页面 
接下来我们创建处理错误的404.ASP页面。首先要做的是获得导致这个404错误的页面名字。下面这行代码从查询字符串提取这个页面的名字: 
< %
'获得页面名字
strQ = Request.ServerVariables("QUERY_STRING")
% >
那么,strQ中的哪些内容才是重要的呢?在上例中它应该如下所示:/applicances/dishwashers/kenmore/Model3809.htm。我们真正需要的只有其中的Model3809(产品型号),因为这是产品数据库中的唯一键。下面这几行代码根据产品型号找出产品的ID(编号): 
< %
' 计算产品型号
nIndex = InStrRev(strQ,"/")
If (nIndex >0) Then
strModelNumber = Right(strQ,Len(strQ)-nIndex)
strQ = Left(strQ,nIndex-1)
End If
 
' 从产品型号去掉.htm后缀
If ((Mid(strPageName,Len(strPageName),1)="m") And _
(Mid(strPageName,Len(strPageName)-1,1)="t") And _
(Mid(strPageName,Len(strPageName)-2,1)="h") And _
(Mid(strPageName,(strPageName)-3,1)=".")) Then  
strModelNumber =Left(strPageName,Len(strModelNumber)-4)  
End If
 
' 从产品数据库查找产品编号
strSQL = "SELECT Product_Id FROM Product " _
& "WHERE Product_Model = '" & strModelNumber & "'"
Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then
lProductId = oRS("Product_Id")
End If
% >
      现在我们得到了产品编号,在转换到正确的ASP页面之前必须先保存它。我们无法通过Server.Transfer在查询字符串中传递产品编号(这是IIS的一个局限),因此必须通过Session对象来传递它。 
< % 
Session("Id") = lProductId 
Server.Transfer("/product.ASP")
% >
执行这个页面时,浏览器地址栏中的内容如下: 
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
      由于使用了Server.Transfer,浏览器地址栏中的URL不会改变,同样浏览器也不需要与服务器再交互一次,这与Response.Redirect是不同的。 
      另外也请注意URL中的目录是根本不存在的,事实上在这里URL中除了服务器名字之外的其余内容根本不起什么作用。例如,下面的几个URL都将返回同一页面。 
http://www.myserver.com/Model3809.htm
http://www.myserver.com/trucks/ford/Model3809.htm
      那么为什么要加上这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词是比页面标题和正文更重要的搜索关键词,所以目录名字是非常重要的。 
调用不存在的页面 
      我们已经讨论了将并不存在的URL转换为有效动态URL的技术。然而,要让搜索引擎能够索引这些页面,我们还需要链接这些并不存在的URL。换句话说,只有当我们链接了Model3809.htm页面后搜索引擎才会发现它。 
      以前链接这种页面时我们只需按照如下方式给出产品编号:“product.ASP?Id=4”。现在我们就来构造一个以产品编号为参数返回恰当URL的函数。 
< %
Function CreateProductURL(lProductId)  
strSQL = "SELECT Product_Model FROM Product " _ & "WHERE Product_Id =" & lProductId  
Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then 
strModel = oRS("Product_Model")
End If
CreateProductURL = "/" & strModel & ".htm"  
End Function
% >
现在如果我们要加入URL,只需按照如下方式进行: 
< A HREF="../../< %=CreateProductURL(4)% >" >洗碗机< /A >
      本例我们假定不知道产品型号名称,必须查询数据库才能得知。但在现实中可能并非如此,我们知道产品的型号名称,可以直接创建URL而无需再次访问数据库。 
性能问题 
      本文所介绍的方法会明显地影响性能。首先,为了创建静态风格的URL它需要一次数据库调用。其次,为了从产生404的URL出发得到正确的URL,它还要增加一次额外的数据库调用。最后,两次Server.Transfer需要较大的开销。 
      不过,有些性能问题可以用XCache(www.postpointsoft.com)来解决。XCache能够把出现404错误的URL转换到正确的页面,并缓存该信息以供后来的请求使用。 

      利用IIS 5.0的自定义错误信息功能控制404错误可以为动态页面制作出静态页面风格的URL。只要无需创建这些静态URL所用到的目录和文件,那么应该说创建这种既利于市场宣传、也利于搜索引擎排位的URL是相当简单的。

视频教程列表
文章教程搜索
 
Access数据库推荐教程
Access数据库热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058