天天看點

perl通路access資料庫的例子

use Win32::ODBC;

use Win32::OLE;

use Win32::OLE::Const 'Microsoft ActiveX Data Objects';

my $Conn = Win32::OLE->new('ADODB.Connection'); # creates a connection object

$cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\altigen\Project\TrunkFilter\TrunkFilter\db.mdb;Persist Security Info=False";

$Conn->Open("DSN=telbook;UID=;PWD=;DBNAME=db.mdb");# opens the database connection

 if (Win32::OLE->LastError()){

     print "Error\n";

 }

for($i = "82513113"; $i < "82600000"; $i ++)

{

 $sql = "INSERT INTO telbook(telnum, status) VALUES('$i', 'Not check')";

 my $rc = $Conn->Execute("$sql");

 if (Win32::OLE->LastError()){

     print "Error\n";

     last;

 }

}

$Conn->Close; 

前題是必須安裝好activeperl (505以上),以及MS Access 97

一. 安裝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 [email protected] 20 1234567

John [email protected] 24 0284393293

kit [email protected] 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', '[email protected]', 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();