程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在DEPHI程序中使用ADO對象存取ODBC數據續

在DEPHI程序中使用ADO對象存取ODBC數據續

編輯:Delphi

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;

以上程序在PWIN98+DELPHI3.0+PWS(Personal Web Server)4.0下調試通過.關於ADO對象的詳細資料,請參見ASP幫助文件或Interdev幫助文件或OFFICE2000的有關文檔.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved