3.其它常見對象(與Delphi對應的對象):
ADODB.Field:TFIEld ADODB.Parameter:
TPara ADODB.Error:EDBEngineError
ADODB.Command:無 ADODB.Property:無
下面來看一個應用例子,聽別人說總不如自己看實際的例子來體會。在這個例子中,將演示如何利用ADO對象來對一個數據表進行查詢、增加記錄、修改記錄和刪除記錄操作。具體的用法請參見程序中的注釋,如果有點Delphi數據庫編程經驗,相信不難理解。
在我們的例子使用的數據庫為Test.MDB,其中有一個數據表為wfjcommu,有五個字段AName、Portable、Tel、BP、PostAddress,分別表示姓名、手機號、電話號碼、呼機號碼和通信地址。
procedure TForm1.Button1Click(Sender: TObject);
{*****************************************************
用ADO操作ODBC數據庫本程序中,將創建一個臨時的ODBC系統數據源,指向一個MsAccess數據庫,然後對其中的數據表進行顯示、增加、修改、刪除和查詢操作注意:請在Uses語句中包含ComObj單元
*****************************************************}
const{ 一些常量聲明,詳細請參見adovbs.inc }
{ ---- CommandType的常量說明 ---- }
adCmdUnknown = 0008;//未知,
需要系統來判斷,速度慢,為缺省值
adCmdText = 0001;//命令語句如SQL語句
adCmdTable = 0002;//數據表名稱
adCmdStoredProc = 0004;//存儲過程名稱
{ ---- CursorType的常量說明 ---- }
adOpenForwardOnly = 0;//只能由前向後單向訪問,為缺省值
adOpenKeyset = 1;//可見其他用戶對數據的修改,
但對其它用戶的增加和刪除不可見
adOpenDynamic = 2;//其他用戶對數據的增加修改和刪除均可見
adOpenStatic = 3;//其他用戶對數據的增加修改和刪除均不可見
{---- LockType的常量說明 ---}
adLockReadOnly = 1;//只讀,為缺省值
adLockPessimistic = 2;//在修改時,按單個記錄鎖定
adLockOptimistic = 3;//在修改後更新時,按單個記錄鎖定
adLockBatchOptimistic = 4;//在成批更新時記錄鎖定
var
AConnection, ARecordSet variant;
longintTemp : integer;
strTemp : string;
intIndex : integer;
begin
{創建一個臨時的ODBC數據源,向一個MsAccess數據庫,利用此DSN建立一個數據庫連接}
AConnection := CreateOleObject(ADODB.Connection);
AConnection.Open(Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\inetpub\wwwroot\test);
{建立一個數據集對象,並從數據表中提取數據}
ARecordSet := CreateOleObject(ADODB.RecordSet);
ARecordSet.open( wfjcommu,AConnection,
adOpenStatic,adLockOptimistic,adCmdTable );
memo1.lines.clear;
memo1.lines.add(********數據表原有的內容如下********);
{顯示各個域的域名}
strTemp := ;
for intIndex := 0 to ARecordSet.FIElds.count - 1 do
strTemp := strTemp + ARecordSet.FIElds[intIndex].name+;;
memo1.lines.add( strTemp );
{顯示各個域的內容}
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.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
memo1.lines.add(********增加了一條記錄後的數據表的內容如下********);
{顯示各個域的內容}
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.MoveLast;
ARecordSet.FIElds[AName] := 11;
//以FIEldByName的方式存取
ARecordSet.FIElds[Portable] := 22;
ARecordSet.FIElds(2) := 33;
//以FIElds[index]的方式存取
ARecordSet.FIElds(3) := 44;
ARecordSet.FIElds(4) := 55;
ARecordSet.Update;//更新,Post
ARecordSet.MoveFirst;//移到首條,First
memo1.lines.add(********修改了最後一條記錄後的數據表的內容如下********);
{顯示各個域的內容}
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.MoveLast;//移到末條,Last
ARecordSet.delete;//刪除,delete
ARecordSet.Update;//更新,在Delphi不需要
ARecordSet.MoveFirst;//移到首條,First
memo1.lines.add(********刪除了最後一條記錄後的數據表的內容如下********);
{顯示各個域的內容}
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;{關閉數據集}
{用SQL語句進行查詢,查詢姓名為“張三”的記錄}
{注意,在SQL語句中,字符串應該用單引號包括起來}
ARecordSet.open( select * from wfjcommu
where AName = 張三,
AConnection,adOpenStatic,adLockOptimistic,
adCmdText );
memo1.lines.add(********張三的內容如下********);
memo1.lines.add( 共有 + IntToStr( ARecordSet.RecordCount ) + 條匹配的記錄 );
{顯示各個域的內容}
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;
AConnection.close;
end;