ADODB.Connection、ADODB.RecordSet
生活随笔
收集整理的這篇文章主要介紹了
ADODB.Connection、ADODB.RecordSet
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.數(shù)據(jù)庫連接對象(ADODB. Connection)
該對象用于與ODBC數(shù)據(jù)庫建立連接,所有對數(shù)據(jù)庫的操作均通過該連接進(jìn)行。
數(shù)據(jù)庫連接對象ADODB. Connection的作用象Delphi中的TDatabase對象。
建立一個(gè)連接對象的方法為(AConnection為Variant類型變量):
AConnection:=CreateOleObject(’A DODB.Connection’)
用于建立連接的方法為Open,使用語法為(以對象AConnection為例):
AConnection.Open( ConnectionString, UserId, Password )
三個(gè)參數(shù)均為字符串類型,其中UserId和Password為用戶名稱和用戶密碼,用于訪問數(shù)據(jù)庫使用時(shí)可以省略,因?yàn)樵贑onnectionString同樣可以指定用戶名稱和用戶密碼。ConnectionString是用來說明ODBC數(shù)據(jù)源信息的字符串,其格式為:
’Provider=ProviderName; DSN=DSNName; DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password’
其中:
Provider:數(shù)據(jù)提供者,默認(rèn)狀態(tài)下為MSDASQL,為微軟OLEDB,通常省略;
DSN:要打開的數(shù)據(jù)庫對應(yīng)的OBDC系統(tǒng)數(shù)據(jù)源(DSN),是可選參數(shù);
DRIVER:要打開的數(shù)據(jù)庫所用的驅(qū)動程序名稱,如Access對應(yīng)Microsoft Access Driv (*.mdb),是可選參數(shù);
SERVER:要打開的數(shù)據(jù)庫所在的服務(wù)器名稱,本機(jī)可用(local),是可選參數(shù);
DATABASE:要打開的數(shù)據(jù)庫名稱,是可選參數(shù);
UID:用戶名稱,用來訪問數(shù)據(jù)庫,是可選參數(shù);
PWD:用戶密碼,用來訪問數(shù)據(jù)庫,是可選參數(shù)。
以上參數(shù)均為可選參數(shù),但必須提供足夠的信息來描述一個(gè)系統(tǒng)數(shù)據(jù)源。
建立一個(gè)ADODB.Connection后,如果不需要返回操作結(jié)果(如刪除,修改,更新等操作)就可以對數(shù)據(jù)庫進(jìn)行正常的SQL操作了,此時(shí)應(yīng)用ADODB.Connection的另外一個(gè)方法Execute,使用語法為:
AConnection.Execute( strSQL );
其中strSQL為執(zhí)行操作的SQL語句,如刪除操作可以為:delete from wfjcommu。用AConnection.Close關(guān)閉一個(gè)數(shù)據(jù)庫連接。
---------------------------------------------------------------------------------------------------------------
2、數(shù)據(jù)集對象(ADODB. RecordSet)
如果要執(zhí)行查詢操作并返回查詢結(jié)果,或者要更方便地操作數(shù)據(jù)表,那就需要用到數(shù)據(jù)集對象了。
數(shù)據(jù)集對象ADODB.RecordSet的作用象Delphi中的TTable或TQuery對象。
建立一個(gè)數(shù)據(jù)集對象的方法為(ARecordSet為Variant類型變量):
ARecordSet:=CreateOleObject ('ADODB.RecordSet')
從數(shù)據(jù)表取得數(shù)據(jù)的方法為Open方法,具體使用方法為:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType );
其中:
strCommand:字符串,為命令參數(shù),可以是一個(gè)Table名稱,可以是一個(gè)SQL語句,也可以是一個(gè)服務(wù)器上的存儲過程(StoredProc)名稱,具體需要后面的參數(shù)intCommandType來指定。
ActiveConnection:要使用的數(shù)據(jù)庫連接,是一個(gè)ADODB. Connection對象。
intCursorType:長整數(shù),數(shù)據(jù)集的Cursor類型,可選參數(shù),請參見程序中注釋。
intLockType:長整數(shù),對數(shù)據(jù)表的加鎖類型,可選參數(shù),請參見程序中注釋。
intCommandType:長整數(shù),命令參數(shù)的類型,用來指明strCommand的作用,可以指定strCommand為命令(如SQL語句)或數(shù)據(jù)表(TTable)或儲存過程(StoredProc),可選參數(shù),請參見程序中注釋。
如執(zhí)行一個(gè)SQL查詢,可以采用如下語句:
ARecordSet.Open(’Select * from wfjcommu’,adOpenStatic,ad LockOptimistic,adCmdText);
其它常見屬性和方法與TTable和TQuery相比較如下 eof,bof,MoveFirst, MoveLast, First, MoveNext, close, Delete.
Fields[FieldNo]: Fields[FieldNo]
Fields['FieldName']: FieldByName('FieldName')
----------------------------------------------------------------------
3、其他常見對象(與Delphi對應(yīng)的對象):
ADODB.Field: TField; ADODB.Parameter: TPara; ADODB.Error: EDBEngineError
ADODB.Command:無 ADODB.Property:無
下面來看一個(gè)應(yīng)用例子:
procedure TForm1.Button1Click(Sender: TObject);
{*****************************************************
用ADO操作ODBC數(shù)據(jù)庫
本程序中,將創(chuàng)建一個(gè)臨時(shí)的ODBC系統(tǒng)數(shù)據(jù)源,指向一個(gè)MsAccess數(shù)據(jù)庫,然后對其中的數(shù)據(jù)表進(jìn)行顯示、增加、修改、刪除和查詢操作
注意:請?jiān)赨ses語句中包含ComObj單元
*****************************************************}
const{一些常量聲明(delphi)}
{------常數(shù)含義-------------}
adStateClosed = $00000000;//對象出于關(guān)閉狀態(tài)(默認(rèn)值)
adStateOpen = $00000001;//對象是打開狀態(tài)
adStateConnecting = $00000002;//正在連接數(shù)據(jù)源的狀態(tài)
adStateExecuting = $00000004;//對象的Execute方法已經(jīng)被調(diào)用
adStateFetching = $00000008;//返回行(ROW)到Recordset對象
adUseServer = $00000002;//客戶端游標(biāo)引擎
adUseClient = $00000003;//服務(wù)器端游標(biāo)引擎
adModeReadWrite = $00000003;//連接是可讀寫的
adXactCursorStability = $00001000;//只允許讀其他事物已提交的改變(默認(rèn)值)
{---- CommandType的常量說明 ----}
adCmdText = $00000001;//命令語句如SQL語句
adCmdTable = $00000002;//數(shù)據(jù)表名稱
adCmdStoredProc = $00000004;//存儲過程名稱
adCmdFile = $00000100;//和對象類型相應(yīng)的文件名稱adCmdUnknown = 0008;//未知,需要系統(tǒng)來判斷,速度慢,為缺省值
{---- CursorType的常量說明 ----}
adOpenForwardOnly = 0;//只能由前向后單向訪問,為缺省值
adOpenKeyset = 1;//可見其他用戶對數(shù)據(jù)的修改,但對其它用戶的增加和刪除不可見
adOpenDynamic = 2;//其他用戶對數(shù)據(jù)的增加修改和刪除均可見
adOpenStatic = 3;//其他用戶對數(shù)據(jù)的增加修改和刪除均不可見
{---- LockType的常量說明 ---}
adLockReadOnly = 1;//只讀,為缺省值
adLockPessimistic = 2;//在修改時(shí),按單個(gè)記錄鎖定
adLockOptimistic = 3;//在修改后更新時(shí),按單個(gè)記錄鎖定
adLockBatchOptimistic = 4;//在成批更新時(shí)記錄鎖定
**************************************************************
var
AConnection, ARecordSet : OleVariant;
longintTemp : integer;
strTemp : string;
intIndex : integer;
begin
{創(chuàng)建一個(gè)臨時(shí)的ODBC數(shù)據(jù)源,指向一個(gè)SQL Server數(shù)據(jù)庫,并利用此DSN建立一個(gè)數(shù)據(jù)庫連接}
Conn1 := CreateOleObject('ADODB.Connection');
Conn1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=' +
????? db + ';Data Source=' + host + ';Connect Timeout=5;' +
????? 'Use Procedure for Prepare=1';
Conn1.Open(cnn.ConnectionString, usr, pwd, -1);
{建立一個(gè)數(shù)據(jù)集對象,并從數(shù)據(jù)表中提取數(shù)據(jù)}
ARecordSet := CreateOleObject(’ADODB.RecordSet’);
ARecordSet.Open('SELECT * FROM Table1, Conn1, adOpenStatic, adLockOptimistic, adCmdText);
{增加一個(gè)記錄}
ARecordSet.AddNew;//增加,Append
ARecordSet.Fields[’AName’] := ’1’;//以FieldByName的方式存取
ARecordSet.Fields[’Portable’] := ’2’;
ARecordSet.Fields(2) := ’3’;//以Fields[index]的方式存取
ARecordSet.Fields(3) := ’4’;
ARecordSet.Fields(4) := ’5’;
ARecordSet.Update;//更新,Post
ARecordSet.MoveFirst;//移到首條,First
{修改最后一條記錄}
ARecordSet.MoveLast;
ARecordSet.Fields[’AName’] := ’11’;//以FieldByName的方式存取
ARecordSet.Fields[’Portable’] := ’22’;
ARecordSet.Fields(2) := ’33’;//以Fields[index]的方式存取
ARecordSet.Fields(3) := ’44’;
ARecordSet.Update;//更新,Post
ARecordSet.MoveFirst;//移到首條,First
{刪除最后一條記錄}
ARecordSet.MoveLast;//移到末條,Last
ARecordSet.delete;//刪除,delete
ARecordSet.Update;//更新,在Delphi不需要
ARecordSet.MoveFirst;//移到首條,First
{顯示各個(gè)域的內(nèi)容}
while not ARecordSet.eof do
begin
strTemp := ’’;
for intIndex := 0 to ARecordSet.Fields.count - 1 do
strTemp := strTemp + ARecordSet.Fields[intIndex].value+’;’;
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//移到下條,Next
end;
ARecordSet.Close;{關(guān)閉數(shù)據(jù)集}
{關(guān)閉數(shù)據(jù)集和數(shù)據(jù)庫連接}
ARecordSet.close;
AConnection.close;
end;
該對象用于與ODBC數(shù)據(jù)庫建立連接,所有對數(shù)據(jù)庫的操作均通過該連接進(jìn)行。
數(shù)據(jù)庫連接對象ADODB. Connection的作用象Delphi中的TDatabase對象。
建立一個(gè)連接對象的方法為(AConnection為Variant類型變量):
AConnection:=CreateOleObject(’A DODB.Connection’)
用于建立連接的方法為Open,使用語法為(以對象AConnection為例):
AConnection.Open( ConnectionString, UserId, Password )
三個(gè)參數(shù)均為字符串類型,其中UserId和Password為用戶名稱和用戶密碼,用于訪問數(shù)據(jù)庫使用時(shí)可以省略,因?yàn)樵贑onnectionString同樣可以指定用戶名稱和用戶密碼。ConnectionString是用來說明ODBC數(shù)據(jù)源信息的字符串,其格式為:
’Provider=ProviderName; DSN=DSNName; DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password’
其中:
Provider:數(shù)據(jù)提供者,默認(rèn)狀態(tài)下為MSDASQL,為微軟OLEDB,通常省略;
DSN:要打開的數(shù)據(jù)庫對應(yīng)的OBDC系統(tǒng)數(shù)據(jù)源(DSN),是可選參數(shù);
DRIVER:要打開的數(shù)據(jù)庫所用的驅(qū)動程序名稱,如Access對應(yīng)Microsoft Access Driv (*.mdb),是可選參數(shù);
SERVER:要打開的數(shù)據(jù)庫所在的服務(wù)器名稱,本機(jī)可用(local),是可選參數(shù);
DATABASE:要打開的數(shù)據(jù)庫名稱,是可選參數(shù);
UID:用戶名稱,用來訪問數(shù)據(jù)庫,是可選參數(shù);
PWD:用戶密碼,用來訪問數(shù)據(jù)庫,是可選參數(shù)。
以上參數(shù)均為可選參數(shù),但必須提供足夠的信息來描述一個(gè)系統(tǒng)數(shù)據(jù)源。
建立一個(gè)ADODB.Connection后,如果不需要返回操作結(jié)果(如刪除,修改,更新等操作)就可以對數(shù)據(jù)庫進(jìn)行正常的SQL操作了,此時(shí)應(yīng)用ADODB.Connection的另外一個(gè)方法Execute,使用語法為:
AConnection.Execute( strSQL );
其中strSQL為執(zhí)行操作的SQL語句,如刪除操作可以為:delete from wfjcommu。用AConnection.Close關(guān)閉一個(gè)數(shù)據(jù)庫連接。
---------------------------------------------------------------------------------------------------------------
2、數(shù)據(jù)集對象(ADODB. RecordSet)
如果要執(zhí)行查詢操作并返回查詢結(jié)果,或者要更方便地操作數(shù)據(jù)表,那就需要用到數(shù)據(jù)集對象了。
數(shù)據(jù)集對象ADODB.RecordSet的作用象Delphi中的TTable或TQuery對象。
建立一個(gè)數(shù)據(jù)集對象的方法為(ARecordSet為Variant類型變量):
ARecordSet:=CreateOleObject ('ADODB.RecordSet')
從數(shù)據(jù)表取得數(shù)據(jù)的方法為Open方法,具體使用方法為:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType );
其中:
strCommand:字符串,為命令參數(shù),可以是一個(gè)Table名稱,可以是一個(gè)SQL語句,也可以是一個(gè)服務(wù)器上的存儲過程(StoredProc)名稱,具體需要后面的參數(shù)intCommandType來指定。
ActiveConnection:要使用的數(shù)據(jù)庫連接,是一個(gè)ADODB. Connection對象。
intCursorType:長整數(shù),數(shù)據(jù)集的Cursor類型,可選參數(shù),請參見程序中注釋。
intLockType:長整數(shù),對數(shù)據(jù)表的加鎖類型,可選參數(shù),請參見程序中注釋。
intCommandType:長整數(shù),命令參數(shù)的類型,用來指明strCommand的作用,可以指定strCommand為命令(如SQL語句)或數(shù)據(jù)表(TTable)或儲存過程(StoredProc),可選參數(shù),請參見程序中注釋。
如執(zhí)行一個(gè)SQL查詢,可以采用如下語句:
ARecordSet.Open(’Select * from wfjcommu’,adOpenStatic,ad LockOptimistic,adCmdText);
其它常見屬性和方法與TTable和TQuery相比較如下 eof,bof,MoveFirst, MoveLast, First, MoveNext, close, Delete.
Fields[FieldNo]: Fields[FieldNo]
Fields['FieldName']: FieldByName('FieldName')
----------------------------------------------------------------------
3、其他常見對象(與Delphi對應(yīng)的對象):
ADODB.Field: TField; ADODB.Parameter: TPara; ADODB.Error: EDBEngineError
ADODB.Command:無 ADODB.Property:無
下面來看一個(gè)應(yīng)用例子:
procedure TForm1.Button1Click(Sender: TObject);
{*****************************************************
用ADO操作ODBC數(shù)據(jù)庫
本程序中,將創(chuàng)建一個(gè)臨時(shí)的ODBC系統(tǒng)數(shù)據(jù)源,指向一個(gè)MsAccess數(shù)據(jù)庫,然后對其中的數(shù)據(jù)表進(jìn)行顯示、增加、修改、刪除和查詢操作
注意:請?jiān)赨ses語句中包含ComObj單元
*****************************************************}
const{一些常量聲明(delphi)}
{------常數(shù)含義-------------}
adStateClosed = $00000000;//對象出于關(guān)閉狀態(tài)(默認(rèn)值)
adStateOpen = $00000001;//對象是打開狀態(tài)
adStateConnecting = $00000002;//正在連接數(shù)據(jù)源的狀態(tài)
adStateExecuting = $00000004;//對象的Execute方法已經(jīng)被調(diào)用
adStateFetching = $00000008;//返回行(ROW)到Recordset對象
adUseServer = $00000002;//客戶端游標(biāo)引擎
adUseClient = $00000003;//服務(wù)器端游標(biāo)引擎
adModeReadWrite = $00000003;//連接是可讀寫的
adXactCursorStability = $00001000;//只允許讀其他事物已提交的改變(默認(rèn)值)
{---- CommandType的常量說明 ----}
adCmdText = $00000001;//命令語句如SQL語句
adCmdTable = $00000002;//數(shù)據(jù)表名稱
adCmdStoredProc = $00000004;//存儲過程名稱
adCmdFile = $00000100;//和對象類型相應(yīng)的文件名稱adCmdUnknown = 0008;//未知,需要系統(tǒng)來判斷,速度慢,為缺省值
{---- CursorType的常量說明 ----}
adOpenForwardOnly = 0;//只能由前向后單向訪問,為缺省值
adOpenKeyset = 1;//可見其他用戶對數(shù)據(jù)的修改,但對其它用戶的增加和刪除不可見
adOpenDynamic = 2;//其他用戶對數(shù)據(jù)的增加修改和刪除均可見
adOpenStatic = 3;//其他用戶對數(shù)據(jù)的增加修改和刪除均不可見
{---- LockType的常量說明 ---}
adLockReadOnly = 1;//只讀,為缺省值
adLockPessimistic = 2;//在修改時(shí),按單個(gè)記錄鎖定
adLockOptimistic = 3;//在修改后更新時(shí),按單個(gè)記錄鎖定
adLockBatchOptimistic = 4;//在成批更新時(shí)記錄鎖定
**************************************************************
var
AConnection, ARecordSet : OleVariant;
longintTemp : integer;
strTemp : string;
intIndex : integer;
begin
{創(chuàng)建一個(gè)臨時(shí)的ODBC數(shù)據(jù)源,指向一個(gè)SQL Server數(shù)據(jù)庫,并利用此DSN建立一個(gè)數(shù)據(jù)庫連接}
Conn1 := CreateOleObject('ADODB.Connection');
Conn1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=' +
????? db + ';Data Source=' + host + ';Connect Timeout=5;' +
????? 'Use Procedure for Prepare=1';
Conn1.Open(cnn.ConnectionString, usr, pwd, -1);
{建立一個(gè)數(shù)據(jù)集對象,并從數(shù)據(jù)表中提取數(shù)據(jù)}
ARecordSet := CreateOleObject(’ADODB.RecordSet’);
ARecordSet.Open('SELECT * FROM Table1, Conn1, adOpenStatic, adLockOptimistic, adCmdText);
{增加一個(gè)記錄}
ARecordSet.AddNew;//增加,Append
ARecordSet.Fields[’AName’] := ’1’;//以FieldByName的方式存取
ARecordSet.Fields[’Portable’] := ’2’;
ARecordSet.Fields(2) := ’3’;//以Fields[index]的方式存取
ARecordSet.Fields(3) := ’4’;
ARecordSet.Fields(4) := ’5’;
ARecordSet.Update;//更新,Post
ARecordSet.MoveFirst;//移到首條,First
{修改最后一條記錄}
ARecordSet.MoveLast;
ARecordSet.Fields[’AName’] := ’11’;//以FieldByName的方式存取
ARecordSet.Fields[’Portable’] := ’22’;
ARecordSet.Fields(2) := ’33’;//以Fields[index]的方式存取
ARecordSet.Fields(3) := ’44’;
ARecordSet.Update;//更新,Post
ARecordSet.MoveFirst;//移到首條,First
{刪除最后一條記錄}
ARecordSet.MoveLast;//移到末條,Last
ARecordSet.delete;//刪除,delete
ARecordSet.Update;//更新,在Delphi不需要
ARecordSet.MoveFirst;//移到首條,First
{顯示各個(gè)域的內(nèi)容}
while not ARecordSet.eof do
begin
strTemp := ’’;
for intIndex := 0 to ARecordSet.Fields.count - 1 do
strTemp := strTemp + ARecordSet.Fields[intIndex].value+’;’;
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//移到下條,Next
end;
ARecordSet.Close;{關(guān)閉數(shù)據(jù)集}
{關(guān)閉數(shù)據(jù)集和數(shù)據(jù)庫連接}
ARecordSet.close;
AConnection.close;
end;
總結(jié)
以上是生活随笔為你收集整理的ADODB.Connection、ADODB.RecordSet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 概率初步(1 Juin, 2019)
- 下一篇: 刷入第三方 recovery twrp