毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精


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


  共有8999人關(guān)注過本帖樹形打印

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

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


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

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

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


1、數(shù)據(jù)庫連接對象(ADODB. Connection)
該對象用于與ODBC數(shù)據(jù)庫建立連接,所有對數(shù)據(jù)庫的操作均通過該連接進(jìn)行。
數(shù)據(jù)庫連接對象ADODB. Connection的作用象Delphi中的TDatabase對象。
建立一個連接對象的方法為(AConnection為Variant類型變量):
AConnection:=CreateOleObject(’A DODB.Connection’)
用于建立連接的方法為Open,使用語法為(以對象AConnection為例):
AConnection.Open( ConnectionString, UserId, Password )
  三個參數(shù)均為字符串類型,其中UserId和Password為用戶名稱和用戶密碼,用于訪問數(shù)據(jù)庫使用時可以省略,因?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ù),但必須提供足夠的信息來描述一個系統(tǒng)數(shù)據(jù)源。
假如已經(jīng)定義了一個ODBC的系統(tǒng)DSN,名稱為MyDsn,那么就可用以下語句建立一個數(shù)據(jù)庫連接:
AConnection.Open(’DSN=MyDsn’);
  為了防止DSN不存在或其設(shè)置被他人修改時造成應(yīng)用程序運(yùn)行錯誤,可以用ADODB.Connection 創(chuàng)建一個臨時ODBC數(shù)據(jù)源,這樣可以保證我們使用的系統(tǒng)DSN的參數(shù)設(shè)置是正確的。下面的語句可以創(chuàng)建一個臨時ODBC系統(tǒng)DSN,對應(yīng)一個ACCESS數(shù)據(jù)庫,路徑為C:\Inetpub\ wwwroot\ test.mdb:
AConnection.open(’Driver= {Microsoft Access Driver (*.mdb)};DBQ=C:\inetpub \wwwroot\test.mdb’)
  建立一個ADODB.Connection后,如果不需要返回操作結(jié)果(如刪除,修改,更新等操作)就可以對數(shù)據(jù)庫進(jìn)行正常的SQL操作了,此時應(yīng)用ADODB.Connection的另外一個方法Execute,使用語法為:
AConnection.Execute( strSQL );
  其中strSQL為執(zhí)行操作的SQL語句,如刪除操作可以為:delete from wfjcommu。用AConnection.Close關(guān)閉一個數(shù)據(jù)庫連接。


2、數(shù)據(jù)集對象(ADODB. RecordSet)
如果要執(zhí)行查詢操作并返回查詢結(jié)果,或者要更方便地操作數(shù)據(jù)表,那就需要用到數(shù)據(jù)集對象了。
數(shù)據(jù)集對象ADODB.RecordSet的作用象Delphi中的TTable或TQuery對象。
建立一個數(shù)據(jù)集對象的方法為(ARecordSet為Variant類型變量):
ARecordSet:=CreateOleObject (’ADODB.RecordSet’)
從數(shù)據(jù)表取得數(shù)據(jù)的方法為Open方法,具體使用方法為:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType );
其中:
strCommand:字符串,為命令參數(shù),可以是一個Table名稱,可以是一個SQL語句,也可以是一個服務(wù)器上的存儲過程(StoredProc)名稱,具體需要后面的參數(shù)intCommandType來指定。
ActiveConnection:要使用的數(shù)據(jù)庫連接,是一個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í)行一個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,所有對數(shù)據(jù)表的修改均須用Update使操作有效,這與Delphi不同。
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:無
下面來看一個應(yīng)用例子:
procedure TForm1.Button1Click(Sender: TObject);
{*****************************************************
用ADO操作ODBC數(shù)據(jù)庫
  本程序中,將創(chuàng)建一個臨時的ODBC系統(tǒng)數(shù)據(jù)源,指向一個MsAccess數(shù)據(jù)庫,然后對其中的數(shù)據(jù)表進(jìn)行顯示、增加、修改、刪除和查詢操作
注意:請?jiān)赨ses語句中包含ComObj單元
*****************************************************}
const{一些常量聲明,詳細(xì)請參見adovbs.inc}
{---- CommandType的常量說明 ----}
adCmdUnknown = 0008;//未知,需要系統(tǒng)來判斷,速度慢,為缺省值
adCmdText = 0001;//命令語句如SQL語句
adCmdTable = 0002;//數(shù)據(jù)表名稱
adCmdStoredProc = 0004;//存儲過程名稱

{---- CursorType的常量說明 ----}
adOpenForwardOnly = 0;//只能由前向后單向訪問,為缺省值
adOpenKeyset = 1;//可見其他用戶對數(shù)據(jù)的修改,但對其它用戶的增加和刪除不可見
adOpenDynamic = 2;//其他用戶對數(shù)據(jù)的增加修改和刪除均可見
adOpenStatic = 3;//其他用戶對數(shù)據(jù)的增加修改和刪除均不可見

{---- LockType的常量說明 ---}
adLockReadOnly = 1;//只讀,為缺省值
adLockPessimistic = 2;//在修改時,按單個記錄鎖定
adLockOptimistic = 3;//在修改后更新時,按單個記錄鎖定
adLockBatchOptimistic = 4;//在成批更新時記錄鎖定
var
AConnection, ARecordSet : variant;
longintTemp : integer;
strTemp : string;
intIndex : integer;
begin
{創(chuàng)建一個臨時的ODBC數(shù)據(jù)源,指向一個MsAccess數(shù)據(jù)庫,并利用此DSN建立一個數(shù)據(jù)庫連接}
AConnection := CreateOleObject(’ADODB.Connection’);
AConnection.Open(’Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\inetpub\wwwroot\test’);

{建立一個數(shù)據(jù)集對象,并從數(shù)據(jù)表中提取數(shù)據(jù)}
ARecordSet := CreateOleObject(’ADODB.RecordSet’);
ARecordSet.open( ’wfjcommu’,AConnection,adOpenStatic,adLockOptimistic,adCmdTable );

memo1.lines.clear;
memo1.lines.add(’********數(shù)據(jù)表原有的內(nèi)容如下********’);
{顯示各個域的域名}
strTemp := ’’;
for intIndex := 0 to ARecordSet.Fields.count - 1 do
strTemp := strTemp + ARecordSet.Fields[intIndex].name+’;’;
memo1.lines.add( strTemp );

{顯示各個域的內(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.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;//移到首條,F(xiàn)irst
memo1.lines.add(’********增加了一條記錄后的數(shù)據(jù)表的內(nèi)容如下********’);
{顯示各個域的內(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.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;//移到首條,F(xiàn)irst
memo1.lines.add(’********修改了最后一條記錄后的數(shù)據(jù)表的內(nèi)容如下********’);
{顯示各個域的內(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.MoveLast;//移到末條,Last
ARecordSet.delete;//刪除,delete
ARecordSet.Update;//更新,在Delphi不需要
ARecordSet.MoveFirst;//移到首條,F(xiàn)irst
memo1.lines.add(’********刪除了最后一條記錄后的數(shù)據(jù)表的內(nèi)容如下********’);
{顯示各個域的內(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ù)集}

{用SQL語句進(jìn)行查詢,查詢姓名為“張三”的記錄}
{注意,在SQL語句中,字符串應(yīng)該用單引號包括起來}
ARecordSet.open( ’select * from wfjcommu where AName = ’’張三’’’,
AConnection,adOpenStatic,adLockOptimistic,adCmdText );
memo1.lines.add(’********張三的內(nèi)容如下********’);
memo1.lines.add( ’共有’ + IntToStr( ARecordSet.RecordCount ) + ’條匹配的記錄’ );
{顯示各個域的內(nèi)容}
while not ARecordSet.eof do


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

返回版面帖子列表

在DELPHI程序中使用ADO對象存取ODBC數(shù)








簽名
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
欧美一区二区三区系列电影| 亚洲成人av免费| 91美女片黄在线| 99久久99久久精品免费看蜜桃| 三级成人在线视频| 久久久午夜电影| 在线视频国内自拍亚洲视频| 一区二区三区在线视频观看58| 91精品国产一区二区| 成人av在线资源| 一本色道亚洲精品aⅴ| 色狠狠综合天天综合综合| 福利一区福利二区| 久久精品国产免费| 精品一区二区三区在线播放视频 | 在线欧美小视频| 在线影院国内精品| 日韩欧美你懂的| 欧美国产欧美综合| 国产亚洲精品精华液| 国产午夜一区二区三区| 日韩精品一区二区三区在线播放 | 91啪九色porn原创视频在线观看| 国产成人免费av在线| 99久久久久久| 久久人人爽人人爽| 一区二区三区.www| 91丨九色丨国产丨porny| 欧美色精品在线视频| 国产亚洲精品7777| 免费高清在线视频一区·| 日本国产一区二区| 国产精品久久久久久久久久免费看 | 日韩一区二区精品在线观看| 中文一区二区在线观看| 日本不卡视频在线观看| 在线区一区二视频| 一区二区三区免费观看| 国产精品一区二区三区乱码| 91视频91自| 亚洲人成网站色在线观看| 波多野结衣亚洲| 综合久久久久久久| 国产麻豆成人传媒免费观看| 日韩色在线观看| 国产一区二区调教| 日韩一区欧美一区| 欧美亚洲尤物久久| 日本亚洲欧美天堂免费| 精品久久久久久最新网址| 国产激情一区二区三区四区| 国产精品婷婷午夜在线观看| 91麻豆免费观看| 日av在线不卡| 一区在线观看免费| 日韩欧美国产综合在线一区二区三区| 精品一区二区三区免费毛片爱| 久久亚洲私人国产精品va媚药| 成人在线综合网| 日韩高清不卡在线| 中文字幕五月欧美| 337p亚洲精品色噜噜噜| 国产白丝精品91爽爽久久| 亚洲一卡二卡三卡四卡无卡久久| 91精品欧美福利在线观看 | 亚洲成人中文在线| 国产午夜精品一区二区三区嫩草| 色婷婷久久久亚洲一区二区三区| 亚洲va国产va欧美va观看| 久久精品一区二区三区不卡牛牛| 91电影在线观看| 91蜜桃免费观看视频| 国产一区91精品张津瑜| 亚洲成人午夜影院| 亚洲欧美激情插| 国产精品灌醉下药二区| 久久久高清一区二区三区| 日韩三级高清在线| 91精品国产一区二区| 色偷偷成人一区二区三区91 | 7777精品伊人久久久大香线蕉 | 国产高清久久久| 激情五月激情综合网| 激情国产一区二区| 日本欧美肥老太交大片| 肉丝袜脚交视频一区二区| 无吗不卡中文字幕| 亚洲成人av一区| 日韩精品亚洲一区二区三区免费| 亚洲女同ⅹxx女同tv| 亚洲国产欧美日韩另类综合| 一区二区三区免费看视频| 亚洲香蕉伊在人在线观| 日韩成人伦理电影在线观看| 国内精品伊人久久久久av一坑 | 欧美日韩亚州综合| 日韩三级视频在线看| 久久男人中文字幕资源站| 中文字幕在线播放不卡一区| 日本sm残虐另类| 偷拍日韩校园综合在线| 精品在线你懂的| 欧美性猛片xxxx免费看久爱| 欧美日韩国产123区| 国产欧美日韩不卡免费| 天天影视涩香欲综合网| 成人国产精品免费| 在线91免费看| 亚洲成人www| 在线观看91精品国产入口| 欧美精品一区二区三区一线天视频| 久久网站热最新地址| 亚洲人成影院在线观看| 国产不卡视频一区二区三区| 91精品欧美综合在线观看最新| 自拍偷拍亚洲综合| 成人黄色在线视频| 亚洲精品一区二区三区福利| 亚洲午夜日本在线观看| a级高清视频欧美日韩| 久久免费电影网| 国产一区二区在线电影| 久久久www免费人成精品| 久久国产福利国产秒拍| 91麻豆精品国产91久久久资源速度| 亚洲女与黑人做爰| 91福利在线导航| 亚洲精品视频免费观看| 洋洋av久久久久久久一区| 色欧美88888久久久久久影院| 国产精品视频九色porn| 国产精品99久久久久久有的能看 | 日韩一区国产二区欧美三区| 偷拍一区二区三区四区| 91精品国产91热久久久做人人 | 国产精品一区专区| 国产精品狼人久久影院观看方式| 精品一区二区三区影院在线午夜| 精品久久久久av影院| 国产成人精品亚洲777人妖| 国产精品久久久久久久久图文区 | 精品视频在线看| 看电视剧不卡顿的网站| 国产精品久久久久久久久图文区 | 欧美日韩黄视频| 国产成a人亚洲精品| 亚洲高清在线视频| 中文字幕亚洲电影| 2021国产精品久久精品| 在线精品视频小说1| 久久 天天综合| 亚洲自拍另类综合| 亚洲国产精品v| 国产亚洲午夜高清国产拍精品| 欧美性色黄大片| 91老师片黄在线观看| 九九精品一区二区| 免费看欧美美女黄的网站| 一区二区三区四区不卡在线| 久久久久国产精品麻豆ai换脸| 欧美挠脚心视频网站| 欧美综合色免费| 91亚洲国产成人精品一区二区三| 国产精品白丝jk黑袜喷水| 国内久久婷婷综合| 国产99精品视频| 韩国视频一区二区| 成人免费黄色在线| 91免费在线看| 欧美巨大另类极品videosbest | av中文字幕不卡| 色婷婷综合视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 成人一区在线观看| 色屁屁一区二区| 欧美人牲a欧美精品| 日韩一区二区精品| 精品国产1区2区3区| 国产精品网站导航| 日韩影院在线观看| 成人av电影在线观看| 在线看日本不卡| 久久青草欧美一区二区三区| 国产日韩欧美不卡| 亚洲国产成人高清精品| 国产一区二区毛片| 欧美三级韩国三级日本三斤 | 九九九久久久精品| 成人久久视频在线观看| 欧美日韩精品系列| 亚洲天堂精品视频| 国模一区二区三区白浆| 91国产精品成人| 国产日产欧美精品一区二区三区| 国产精品嫩草影院av蜜臀| 久久99久久精品欧美| 欧美日韩黄色一区二区| 亚洲同性同志一二三专区| 岛国精品一区二区| 久久精品人人做|