作為一個ASP愛好者,筆者經常在ASP頁面中使用ADO對象操作ODBC數據庫,覺得用ASP創建WEB應用系統確定挺方便的.雖然在編程生涯中,筆者更喜歡Borland系列產品,對微軟產品有點排斥,對ASP卻是例外.某天,靈機一動,ADO對象是一個標准OLE對象,如果在DELPHI應用程序中能利用ADO操作數據庫,應該挺不錯.尤其在用DELPHI做網絡數據庫應用程序時,如果所在的WEB站點是WINNT站點並且支持ASP頁面,就可以用ADO對象訪問ODBC數據庫,而不用把那麼大的BDE再上載到站點上去,這樣就可充分利用DELPHI和ASP的編程優勢,做出更好的ISAPI/NSAPI/CGI.
經過編程和測試,在DELPHI中可以成功地用ADO對象存取ODBC數據庫,現將使用經驗寫出來,與大家共享,讓我們多一個訪問ODBC數據庫的方法.
在32位的DELPHI中,可以聲明一個variant變量(如AVariant),然後通過CreateOleObject創建一個OLE對象,如AVariant:=CreateOleObject(ADODB.Connection)可以獲得一個數據庫連接對象的實例,然後就可以利用該對象的方法和屬性來操作ODBC數據庫了.(待續)
下面簡單介紹一下訪問ODBC數據庫所用到的ADO對象及其方法和屬性.
1.數據庫連接對象(ADODB.Connection)
該對象用於與ODBC數據庫建立連接,所有對數據庫的操作均通過該連接進行.數據庫連接對ADODB.Connection的作用象Delphi中的TDatabase對象.建立一個連接對象的方法為(AConnection為Variant類型變量):
AConnection:=CreateOleObject(ADODB.Connection)
用於建立連接的方法為Open,使用語法為(以對象AConnection為例):
AConnection.Open( ConnectionString, UserId, Password )
三個參數均為字符串類型,其中UserId和Password為用戶名稱和用戶密碼,用來訪問數據庫時使用,可以省略,因為在ConnectionString同樣可以指定用戶名稱和用戶密碼.ConnectionString是用來說明ODBC數據源信息的字符串,其格式為:
Provider=ProviderName;DSN=DSNName;
DRIVER=driver; SERVER=server;
DATABASE=database;
UID=user; PWD=password
其中:Provider:數據提供者,默認為MSDASQL,為微軟OLEDB,通常省略
DSN :要打開的數據庫? 的OBDC系統數據源(DSN),是可選參數
DRIVER :要打開的數據庫所用的驅動程序名稱,如Access對應
Microsoft Access Driver(*.mdb),是可選參數
SERVER :要打開的數據庫所在的服務器名稱,本機可用(local),是可選參數
DATABASE:要打開的數據庫名稱,是可選參數
UID :用戶名稱,用來訪問數據庫,是可選參數
PWD :用戶密碼,用來訪問數據庫,是可選參數
以上參數均為可選參數,但必須提供足夠的信息來描述一個系統數據源.假如已經定義了一個ODBC的系統DSN,名稱為MyDsn,那麼就可用以下語句建立一個數據庫連接:
AConnection.Open(DSN=MyDsn);
為了防止DSN不存在或其設置被他人修改時造成應用程序運行錯誤,可以用ADODB.Connection創建一個臨時ODBC數據源,這樣可以保證我們使用的系統DSN的參數設置是正確的.下面的語句可以創建一個臨時ODBC系統DSN,對應一個ACCESS數據庫,路徑為
C:\Inetpub\wwwroot\test.mdb
AConnection.open(Driver={Microsoft
Access Driver (*.mdb)};DBQ=
C:\inetpub\wwwroot\test.mdb)
建立一個ADODB.Connection後,如果不需要返回操作結果(如刪除,修改,更新等操作)就可以對數據庫進行正常的SQL操作了,此時應用ADODB.Connection的另外一個方法Execute,使用語法為:
AConnection.Execute( strSQL );
其中strSQL為執行操作的SQL語句,如刪除操作可以為:delete from wfjcommu 用AConnection.Close關閉一個數據庫連接.
2.數據集對象(ADODB.RecordSet)
如果要執行查詢操作並返回查詢結果,或者要更方便地操作數據表,就需要用到數據集對象了.數據集對象ADODB.RecordSet的作用象Delphi中的TTable或TQuery對象.建立一個數據集對象的方法為(ARecordSet為Variant類型變量):
ARecordSet:=CreateOleObject(ADODB.RecordSet)
從數據表取得數據的方法為Open方法,具體使用方法為:
ARecordSet.Open( strCommand,ActiveConnection,
intCursorType,intLockType,
intCommandType );
其中:strCommand:字符串,為命令參數,可以是一個Table名稱,可以是一個SQL語句,也可以是一個服務器上的存儲過程(StoredProc)名稱,具體需要後面的參數intCommandType來指定.
ActiveConnection:要使用的數據庫連接,是一個ADODB.Connection對象.
intCursorType:長整數,數據集的Cursor類型,可選參數,請參見程序中注釋。
intLockType:長整數,對數據表的加鎖類型,可選參數,請參見程序中注釋。
intCommandType:長整數,命令參數的類型,用來指明strCommand的作用,可以指定strCommand為命令(如SQL語句)或數據表(TTable)或儲存過程(StoredProc),可選參數,請參見程序中注釋。
如執行一個SQL查詢,可以采用如下語句:
ARecordSet.Open(Select
* from wfjcommu,adOpenStatic,
adLockOptimistic,adCmdText);
其它常見屬性和方法與TTable和TQuery相比較如下(具體請見ASP幫助文件):
eof,bof:eof,bof.
MoveFirst, MoveLast:First, Last
MovePrevious, MoveNext:Prior, Next
Move:MoveBy
AddNew:append
Update:Post
Close:close
Delete加Update:delete,所有對數據表的修改均須用Update使操作有效,這與Delphi不同
Fields[FieldNo]:Fields[FieldNo]
Fields[FieldName]:FieldByName(FieldName)