亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

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

2019-11-18 18:56:15
字體:
供稿:網(wǎng)友

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

  作為一個asp愛好者,筆者經(jīng)常在ASP頁面中使用ADO對象操作ODBC數(shù)據(jù)庫,覺得用ASP創(chuàng)建Web應(yīng)用系統(tǒng)確實是挺方便的。雖然在編程生涯中,筆者更喜歡Borland系列產(chǎn)品,對微軟產(chǎ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站點是WINNT站點并且支持ASP頁面,那就可以用ADO對象訪問ODBC數(shù)據(jù)庫,而不用把那么大的BDE再上載到站點上去。這樣就可充分利用DELPHI和ASP的編程優(yōu)勢,做出更好的ISAPI/NSAPI/CGI。經(jīng)過編程和測試,在Delphi中可以成功地用ADO對象存取ODBC數(shù)據(jù)庫,現(xiàn)將本人的使用經(jīng)驗寫出來,與大家共享,讓我們多一個訪問ODBC數(shù)據(jù)庫的方法。

  在32位的Delphi中,可以聲明一個variant變量(如AVariant),然后通過CreateOleObject創(chuàng)建一個OLE對象,如AVariant:=CreateOleObject (’ADODB.Connection’)可以獲得一個數(shù)據(jù)庫連接對象的實例,然后就可以利用該對象的方法和屬性來操作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ù)庫使用時可以省略,因為在ConnectionString同樣可以指定用戶名稱和用戶密碼。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 Driver (*.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)用程序運行錯誤,可以用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 est.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)行顯示、增加、修改、刪除和查詢操作
注意:請在Uses語句中包含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:inetpubwwwroot est’);

{建立一個數(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
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;

{關(guān)閉數(shù)據(jù)集和數(shù)據(jù)庫連接}
ARecordSet.close;
AConnection.close;
end;
  聽別人說總不如自己看實際的例子來體會。在這個例子中,將演示如何利用ADO對象來對一個數(shù)據(jù)表進(jìn)行查詢、增加記錄、修改記錄和刪除記錄操作。具體的用法請參見程序中的注釋,如果有點Delphi數(shù)據(jù)庫編程經(jīng)驗,相信不難理解。
  在我們的例子使用的數(shù)據(jù)庫為Test.MDB,其中有一個數(shù)據(jù)表為wfjcommu,有五個字段AName、Portable、Tel、BP、PostAddress,分別表示姓名、手機(jī)號、電話號碼、呼機(jī)號碼和通信地址。
以上程序在PWIN98+ Delphi 3.0+PWS(Personal Web Server)4.0下調(diào)試通過.


上一篇:在Delphi程序中調(diào)用控制面板設(shè)置功能

下一篇:用Delphi實現(xiàn)BP機(jī)、手機(jī)短訊

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

久久久亚洲国产精品| 黄色免费大全亚洲| 一区二区三区四区久久| 国产成人综合亚洲| 99中文视频在线| 91精品久久久久久9s密挑| a级毛片免费| 欧美二区在线| 日韩精品久久久毛片一区二区| 亚洲欧美日韩天堂一区二区| 曰韩精品一区二区| 日韩av在线看免费观看| 色撸撸在线视频| 午夜成人鲁丝片午夜精品| 成视频在线免费观看| 毛片基地黄久久久久久天堂| 欧美国产日韩精品| 青娱乐在线视频观看| 成人午夜免费在线| 亚洲国产另类久久久精品极度| 亚洲精品97久久中文字幕| 99只有精品| 樱花影视一区二区| 91香蕉视频网| 久久亚洲AV无码专区成人国产| 秋霞视频一区二区| 欧美伦理91i| 国产视频一区二区三区四区五区| 欧美tk—视频vk| 欧美视频网址| 国产在线观看免费播放| 制服丝袜综合网| 日韩在线一区二区三区| 三级a在线观看| 男人的天堂va免费视频| 4438全国亚洲精品观看视频| 亚洲人成在线一二| 亚洲国产视频在线| 日韩欧美一级二级三级久久久| 午夜高潮免费视频| 亚洲日本视频在线观看| 主播国产精品| 亚洲激情免费观看| 欧美乱大交xxxxx在线观看| 黄色网址网站| jizzjizzjizz亚洲日本| 日韩三级在线观看| 亚洲视频一区在线观看| 任你操视频在线观看| 久久一留热品黄| 91国产在线精品| 欧美日韩生活片| 成人在线观看黄色| 高清av一区二区三区| 天天超碰亚洲| 日本天堂免费a| 久久一夜天堂av一区二区三区| 综合色天天鬼久久鬼色| 国内自拍视频在线看免费观看| 91.麻豆视频| 久久青青草原亚洲av无码麻豆| 精品国产综合区久久久久久| 国产福利小视频在线| 欧美日韩你懂得| 国产精品视频一区二区免费不卡| 国产原创精品| 99久免费精品视频在线观78| 精品乱码一区二区三区| αv一区二区三区| 亚洲女同同性videoxma| 狠狠精品干练久久久无码中文字幕| 巨胸喷奶水www久久久| 91精品二区| 国产在线观看中文字幕| 91精选在线观看| 久久九九久精品国产免费直播| 成 人 黄 色 片 在线播放| 在线视频日本亚洲性| 91最新网址| 999国产在线| 久久69国产一区二区蜜臀| 中文字幕色av一区二区三区| 欧美成人a视频| 黑人巨大精品欧美一区| 欧美精品一区二区三区中文字幕| 青娱乐国产在线| 伊人网在线视频| 在线资源av| 日本精品免费| 成人午夜视频网站| 亚洲小说区图片区情欲小说| 国产福利一区二区三区视频在线| 国产二区一区| 欧美激情小视频| 亚洲欧美日本在线| 一区二区在线电影| 九九热视频在线免费观看| 国产成人av在线| 国产精欧美一区二区三区蓝颜男同| 亚洲xxxxxx| 久久久久久久综合日本| 一区二区三区欧美在线观看| 日本不卡一区二区三区高清视频| 天天操夜夜拍| 不许穿内裤随时挨c调教h苏绵| av日韩在线免费观看| 欧美一级二级三级区| 欧美一级特黄aaaaaa大片在线观看| 亚洲天堂av资源在线观看| 日韩区欧美区| 制服丨自拍丨欧美丨动漫丨| 欧美激情黑白配| 国产亚洲欧美日韩俺去了| 欧美日本在线播放| 国产精品成人va在线观看| 亚洲图片欧美色图| 欧美黑人双插| 爽爽免费视频| 醉酒壮男gay强迫野外xx| 一区二区三区精品在线观看| 欧美91福利在线观看| 天堂av电影在线观看| 丝袜a∨在线一区二区三区不卡| 一本综合精品| 欧美人与z0zoxxxx视频| 亚洲精品网站在线播放gif| 丰满熟女人妻一区二区三区| 久草综合在线视频| 嫩草视频在线免费观看| 国产精品白丝av| 污污的视频免费观看| 国产精品露脸av在线| 日本少妇在线观看| 国产又黄又粗又猛又爽| 2020国产精品久久精品不卡| 99在线视频影院| 国产专区在线| 精品人妻一区二区三区香蕉| 男女羞羞免费视频| 精品成人佐山爱一区二区| 欧美日韩大片| 三级视频中文字幕| 黄网站在线观看高清免费| 加勒比av在线播放| 97se亚洲国产一区二区三区| 午夜剧场免费在线观看| 中文字幕乱码免费| 亚洲午夜激情影院| 国产精品探花在线播放| 色猫视频免费观看| 天天久久夜夜| 婷婷另类小说| 亚洲av午夜精品一区二区三区| 成人黄色大片在线免费观看| 亚洲大全视频| 久久精品91久久久久久再现| 成人写真视频| 精品成人一区二区三区| 国产男女猛烈无遮挡| 91精品国产色综合久久ai换脸| 日韩欧美国产系列| 菠萝蜜视频网址| 亚洲小说欧美另类激情| 日韩精品大片| 国产无遮挡又黄又爽又色| 国产乱子伦一区二区三区国色天香| 久久99久国产精品黄毛片入口| 91精品国产91久久久久久一区二区| 99热在线只有精品| 精品国模一区二区三区欧美| 乱中年女人伦av一区二区| 91精品在线观看国产| 高清成人在线观看| 亚洲图色一区二区三区| 国产又爽又黄又嫩又猛又粗| 一本色道无码道dvd在线观看| 色的视频在线观看免费播放| 无码人妻一区二区三区免费n鬼沢| 91free张津瑜movies| 亚洲成人激情视频| 无人视频在线观看免费| 国产xxx69麻豆国语对白| 亚洲成人影院在线观看| 激情五月播播久久久精品| 波多野结衣视频网站| 精精国产xxxx视频在线动漫| 亚洲一区二区自偷自拍| 97电影在线观看| www.中文字幕在线观看| 久久精品国内一区二区三区水蜜桃| 亚洲中文字幕无码一区二区三区| 91色视频在线导航| 黄色小视频免费看| 一区二区欧美在线观看| 成人看的羞羞网站| 亚洲成人中文在线| 韩国欧美亚洲国产| 国内自拍视频在线看免费观看| 亚洲欧美精品suv| 免费看男男www网站入口在线| 一区二区成人网| 国产精品免费在线播放| 久热国产在线视频| 在线看片不卡| 成人美女免费网站视频| 精品国产一区二区三区四区| 18岁视频在线观看| 国内精品视频久久| 日本精品国语自产拍在线观看| 欧美.日韩.国产.一区.二区| 亚洲制服中文| 国产精品高潮呻吟久久| 亚洲精品在线免费播放| 懂色av粉嫩av蜜臀av| 成人18夜夜网深夜福利网| 欧美一级特黄aaaaaa| 成人黄视频免费| 欧美精品福利| wwwxxxx国产| 黄色的网站在线观看| 免费三级毛片| 伊人波多野结衣| 日韩亚洲一区在线播放| 亚洲伊人一本大道中文字幕| 午夜精品久久久久久久99樱桃| 久久亚洲黄色| 中文字幕精品久久久| av综合网址| 亚洲电影免费观看高清| 99久在线精品99re8热| 九色porny丨首页入口在线| 重囗味另类老妇506070| 中文字幕在线中文字幕日亚韩一区| 在线精品视频播放| 国产精品久久久久久久| 97久久超碰国产精品| 黄色的视频在线观看| 欧美三级电影在线| 亚洲综合大片69999| 91福利国产成人精品照片| 在线一区二区三区视频| 精品一区二区在线观看| 精品福利樱桃av导航| 99riav国产精品| 天天综合久久综合| 久久久久久香蕉网| 美女日韩欧美| 一级片一区二区三区| 免费视频网站www| 一区二区精品伦理...| av网站免费在线播放| 凹凸av导航大全精品| 国产原创精品视频| 欧美日韩国产观看视频| 夜色资源网av在先锋网站观看| 日韩av色在线| 天堂av在线网站| 成人黄色小视频在线观看| 美女尤物久久精品| 久久人妻少妇嫩草av蜜桃| 成人亚洲综合色就1024| 91精品国产高清久久久久久久久| 欧美多人爱爱视频网站| 成人aaaa| 久久综合资源网| 四虎国产精品永久在线国在线| 一区二区三区不卡视频在线观看| 成人羞羞视频免费| 激情小说激情视频| 99国产一区| 在线观看黄色av| 成人午夜电影免费在线观看| 国产精品色在线观看| 黄色影视在线观看| 97碰在线视频| 亚洲精品孕妇| 色综合天天综合网国产成人网| 久久久久麻豆v国产精华液好用吗| 欧美一级淫片a免费视频| av网址在线免费观看| 在线看片福利| 国产亚洲一区二区三区四区| 中文字幕黄色网址| 国产精品99久久久久久宅男| 色婷婷亚洲精品| 国产精品日本一区二区| 香蕉成人伊视频在线观看| 国产精品美女久久久| 亚洲小说欧美另类婷婷| 人妻一区二区三区四区| 久久久综合九色合综国产精品| 久久影视一区| 日韩精品一区二区三区中文不卡| 亚洲欧美亚洲| 黄色在线视频网址| 成人午夜免费在线观看| 欧美日韩国产传媒| 亚洲欧美一区二区三区久久| 色94色欧美sute亚洲线路一久| 久久综合另类图片小说| 色综合久久综合| 国产精品国产高清国产| 国产5g影院天天爽天天看| 一区二区黄色| 亚洲精品小视频| 日韩av资源网| 久久精品国产网站| 亚洲精品久久久久久一区二区| 国产精品久久久久久久美男| 超碰免费在线观看| 缅甸午夜性猛交xxxx| 国精产品999国精产品官网| 婷婷五月色综合香五月| 国产一二三区在线视频| 日本少妇xxxx| 欧美精品一区在线发布| 亚洲精品一区二区18漫画| 深夜福利视频在线免费观看| 欧美成免费一区二区视频| 99.玖玖.com| 亚洲午夜精品久久久久久性色| 久久久99爱| 欧美日韩一区二区欧美激情| 九九九精品视频| 久久尤物视频| 精品av一区二区| 亚洲一区 欧美| 国产麻豆成人传媒免费观看|