久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇開發(fā)語言培訓專區(qū)Delphi程序設計 → 在DELPHI程序中使用ADO對象存取ODBC數


  共有7908人關注過本帖樹形打印

主題:在DELPHI程序中使用ADO對象存取ODBC數

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
在DELPHI程序中使用ADO對象存取ODBC數  發(fā)帖心情 Post By:2010-12-14 10:25:14

作為一個ASP愛好者,筆者經常在ASP頁面中使用ADO對象操作ODBC數據庫,覺得用ASP創(chuàng)建Web應用系統(tǒng)確實是挺方便的。雖然在編程生涯中,筆者更喜歡Borland系列產品,對微軟產品有點排斥,但對ASP卻是例外。某天,忽然想到,ADO對象是一個標準OLE對象,如果在Delphi應用程序中能利用ADO操作數據庫,應該挺不錯。尤其在用DELPHI做網絡數據庫應用程序時,如果所在的Web站點是WINNT站點并且支持ASP頁面,那就可以用ADO對象訪問ODBC數據庫,而不用把那么大的BDE再上載到站點上去。這樣就可充分利用DELPHI和ASP的編程優(yōu)勢,做出更好的ISAPI/NSAPI/CGI。經過編程和測試,在Delphi中可以成功地用ADO對象存取ODBC數據庫,現將本人的使用經驗寫出來,與大家共享,讓我們多一個訪問ODBC數據庫的方法。

  在32位的Delphi中,可以聲明一個variant變量(如AVariant),然后通過CreateOleObject創(chuàng)建一個OLE對象,如AVariant:=CreateOleObject (’ADODB.Connection’)可以獲得一個數據庫連接對象的實例,然后就可以利用該對象的方法和屬性來操作ODBC數據庫了。
下面簡單介紹一下訪問ODBC數據庫所用到的ADO對象及其方法和屬性。


1、數據庫連接對象(ADODB. Connection)
該對象用于與ODBC數據庫建立連接,所有對數據庫的操作均通過該連接進行。
數據庫連接對象ADODB. Connection的作用象Delphi中的TDatabase對象。
建立一個連接對象的方法為(AConnection為Variant類型變量):
AConnection:=CreateOleObject(’A DODB.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:數據提供者,默認狀態(tài)下為MSDASQL,為微軟OLEDB,通常省略;
DSN:要打開的數據庫對應的OBDC系統(tǒng)數據源(DSN),是可選參數;
DRIVER:要打開的數據庫所用的驅動程序名稱,如Access對應Microsoft Access Driv (*.mdb),是可選參數;
SERVER:要打開的數據庫所在的服務器名稱,本機可用(local),是可選參數;
DATABASE:要打開的數據庫名稱,是可選參數;
UID:用戶名稱,用來訪問數據庫,是可選參數;
PWD:用戶密碼,用來訪問數據庫,是可選參數。
以上參數均為可選參數,但必須提供足夠的信息來描述一個系統(tǒng)數據源。
假如已經定義了一個ODBC的系統(tǒng)DSN,名稱為MyDsn,那么就可用以下語句建立一個數據庫連接:
AConnection.Open(’DSN=MyDsn’);
  為了防止DSN不存在或其設置被他人修改時造成應用程序運行錯誤,可以用ADODB.Connection 創(chuàng)建一個臨時ODBC數據源,這樣可以保證我們使用的系統(tǒng)DSN的參數設置是正確的。下面的語句可以創(chuàng)建一個臨時ODBC系統(tǒng)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為執(zhí)行操作的SQL語句,如刪除操作可以為:delete from wfjcommu。用AConnection.Close關閉一個數據庫連接。


2、數據集對象(ADODB. RecordSet)
如果要執(zhí)行查詢操作并返回查詢結果,或者要更方便地操作數據表,那就需要用到數據集對象了。
數據集對象ADODB.RecordSet的作用象Delphi中的TTable或TQuery對象。
建立一個數據集對象的方法為(ARecordSet為Variant類型變量):
ARecordSet:=CreateOleObject (’ADODB.RecordSet’)
從數據表取得數據的方法為Open方法,具體使用方法為:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType );
其中:
strCommand:字符串,為命令參數,可以是一個Table名稱,可以是一個SQL語句,也可以是一個服務器上的存儲過程(StoredProc)名稱,具體需要后面的參數intCommandType來指定。
ActiveConnection:要使用的數據庫連接,是一個ADODB. Connection對象。
intCursorType:長整數,數據集的Cursor類型,可選參數,請參見程序中注釋。
intLockType:長整數,對數據表的加鎖類型,可選參數,請參見程序中注釋。
intCommandType:長整數,命令參數的類型,用來指明strCommand的作用,可以指定strCommand為命令(如SQL語句)或數據表(TTable)或儲存過程(StoredProc),可選參數,請參見程序中注釋。
如執(zhí)行一個SQL查詢,可以采用如下語句:
ARecordSet.Open(’Select * from wfjcommu’,adOpenStatic,ad LockOptimistic,adCmdText);
其它常見屬性和方法與TTable和TQuery相比較如下(具體請見ASP幫助文件):
eof,bof: eof,bof.MoveFirst, MoveLast: First, LastMovePrevious, MoveNext: Prior, NextMove: MoveByAddNew: appendUpdate: PostClose: close
Delete加Update:delete,所有對數據表的修改均須用Update使操作有效,這與Delphi不同。
Fields[FieldNo]: Fields[FieldNo]
Fields[’FieldName’]: FieldByName(’FieldName’)


3、其他常見對象(與Delphi對應的對象):
ADODB.Field: TField ADODB.Parameter: TPara ADODB.Error: EDBEngineError
ADODB.Command:無 ADODB.Property:無
下面來看一個應用例子:
procedure TForm1.Button1Click(Sender: TObject);
{*****************************************************
用ADO操作ODBC數據庫
  本程序中,將創(chuàng)建一個臨時的ODBC系統(tǒng)數據源,指向一個MsAccess數據庫,然后對其中的數據表進行顯示、增加、修改、刪除和查詢操作
注意:請在Uses語句中包含ComObj單元
*****************************************************}
const{一些常量聲明,詳細請參見adovbs.inc}
{---- CommandType的常量說明 ----}
adCmdUnknown = 0008;//未知,需要系統(tǒng)來判斷,速度慢,為缺省值
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
{創(chuàng)建一個臨時的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


支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

在DELPHI程序中使用ADO對象存取ODBC數








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产aⅴ精品一区二区三区色成熟| 欧美激情综合在线| 成人动漫视频在线观看完整版| 久久精品国产一区二区三| 青青草91视频| 久久成人羞羞网站| 国产揄拍国内精品对白| 国产69精品久久777的优势| 国产精品一级片在线观看| 国产精品综合久久| 99久久精品免费看国产免费软件| 99久久精品国产网站| 春色成人在线视频| 日本10禁啪啪无遮挡免费一区二区| 欧美精品亚洲| 在线免费观看视频一区| 欧美另类z0zxhd电影| 日韩你懂的在线播放| 国产农村妇女精品| 亚洲精品日韩一| 秋霞电影一区二区| 国产精品99久久久| 91亚色免费| 日韩国产一区久久| 欧美日韩一区二区在线观看| 欧美mv日韩mv国产网站app| 久久久亚洲午夜电影| 夜夜精品浪潮av一区二区三区| 婷婷六月综合亚洲| 高清国产午夜精品久久久久久| 国产精品二区在线观看| 亚洲欧美日韩精品综合在线观看| 欧美视频精品在线观看| 久久天天做天天爱综合色| 亚洲精品福利视频网站| 精东粉嫩av免费一区二区三区| 97超碰人人看人人| 一本色道久久综合狠狠躁的推荐 | 日韩久久免费av| 亚洲免费av高清| 久久福利资源站| 91在线无精精品入口| 日韩视频在线播放| 精品国精品自拍自在线| 亚洲综合成人在线视频| 国产**成人网毛片九色| 欧洲在线视频一区| 精品国产乱码久久久久久夜甘婷婷| 亚洲精品va在线观看| 国产高清视频一区| 先锋影音一区二区三区| 精品久久人人做人人爱| 亚洲午夜激情av| 9久草视频在线视频精品| 亚洲制服中文| 国产精品色婷婷久久58| 国内成人精品2018免费看| 欧美不卡三区| 亚洲精品一区二区在线观看| 亚洲国产精品久久久男人的天堂| av在线不卡电影| 欧美午夜在线观看| 亚洲欧美日韩在线播放| 91视频com| 欧美疯狂性受xxxxx喷水图片| 一区二区三区免费| 懂色av一区二区三区在线播放| 欧美日韩精品综合在线| 亚洲国产精品久久不卡毛片| 99久久99| 精品乱人伦小说| 国产一区二区导航在线播放| 亚洲一区二区精品在线观看| 欧美国产国产综合| 成人小视频在线| 欧美三级乱人伦电影| 亚洲国产精品自拍| 国产在线精品一区二区三区| 日韩欧美国产不卡| 久久er99热精品一区二区| 亚洲精品在线观看免费| 最新国产精品久久精品| 99蜜桃在线观看免费视频网站| 欧美日韩在线一区二区| 日韩激情一二三区| 日韩一本精品| 亚洲激情图片一区| 激情视频在线观看一区二区三区| 精品电影一区二区| 高清shemale亚洲人妖| 欧美久久久久中文字幕| 精品一区二区三区久久久| 在线观看免费成人| 日韩av二区在线播放| 自拍另类欧美| 婷婷丁香激情综合| 中文字幕久久一区| 亚洲成人免费在线| 一区二区三区欧美成人| 亚洲国产精品久久人人爱| 色爱区成人综合网| 亚洲福利一区二区| 日本a级片久久久| 亚洲图片欧美视频| 一区二区冒白浆视频| 日日骚欧美日韩| 欧美主播一区二区三区| 免费高清成人在线| 欧美色成人综合| 国产精品系列在线观看| 91麻豆精品国产91久久久使用方法| 欧美a一区二区| 在线免费不卡电影| 久久99久久99小草精品免视看| 在线一区二区观看| 国产精品一区二区男女羞羞无遮挡| 69堂精品视频| 99久久久精品| 中文字幕在线观看不卡视频| 久久综合色一本| 日韩高清欧美激情| 91精品国产高清一区二区三区蜜臀 | 色综合久久99| 国产一区二区三区免费观看| 制服丝袜成人动漫| 成人精品gif动图一区| 久久久国产精品麻豆| 精品国产乱码久久久久久久软件| 亚洲猫色日本管| 影音欧美亚洲| 国产一区视频网站| 国产夜色精品一区二区av| 国产日韩一区二区三区| 一区二区三区资源| 91国产视频在线观看| 国产乱妇无码大片在线观看| 久久亚洲二区三区| 日本在线观看一区| 国产精选一区二区三区| 国产日韩高清在线| 亚洲欧洲精品在线| 国产精品白丝av| 国产精品久久久久久久久晋中| 亚洲高清视频一区二区| 国产一区不卡视频| 中文字幕五月欧美| 欧美性生交片4| 成人区精品一区二区| 天堂va蜜桃一区二区三区| 91精品福利在线一区二区三区| 国产精品日韩一区二区免费视频| 亚洲成人av电影在线| 日韩精品一区二区在线| 欧美日韩亚洲免费| 国产一区二区三区久久久| 国产精品久久久久久久第一福利| 一本一道久久a久久精品综合| 成人黄动漫网站免费app| 亚洲国产一区在线观看| 4438x成人网最大色成网站| 国产伦视频一区二区三区| 日韩在线播放一区二区| 国产日韩精品一区二区三区在线| 中文字幕剧情在线观看一区| 91福利视频导航| 老司机免费视频一区二区| 中文字幕精品三区| 欧美色视频在线观看| 久久国产一区二区| 国产美女精品在线| 亚洲综合区在线| 久久久久久久久久久99999| 中文字幕一区二区三区有限公司 | 久久婷婷开心| 国产高清精品在线| 亚洲高清中文字幕| 国产欧美日韩麻豆91| 欧美性高清videossexo| 久久精品国产美女| 95精品视频在线| 国产一区二区伦理| 亚洲图片欧美色图| 国产精品的网站| 精品久久久久久久久久久久久久久久久 | 亚洲精品在线观看视频| 91国产免费观看| 欧美极品一区二区| 国产精品9999久久久久仙踪林| 国产一区二区三区精品视频| 亚洲123区在线观看| 亚洲欧美在线aaa| 欧美精品一区二区三区久久久| 91国产福利在线| 亚洲高清资源综合久久精品| 国产精品一区而去| 97se亚洲综合| 99国产欧美久久久精品| 国产成a人亚洲精| 久久99热99| 久久国产精品区|