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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

使用ADO,多線程訪問ACCESS數(shù)據(jù)庫的開發(fā)。

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

本人最近正在進(jìn)行呼叫中心的座席端和服務(wù)器軟件開發(fā),座席端登錄部分是進(jìn)行提取主機(jī)信息,然后使用SOCKET提交給遠(yuǎn)程服務(wù)器,服務(wù)器再在后臺數(shù)據(jù)庫中進(jìn)行查找信息,進(jìn)行對比,看是否允許座席端主機(jī)登錄,因為我的電腦中無法安裝SQLSERVER,所以 ,后臺數(shù)據(jù)庫暫時使用access小型數(shù)據(jù)庫進(jìn)行代替,到后期可以改為SQLSERVER數(shù)據(jù)庫,,我在后臺數(shù)據(jù)庫中使用了兩個表,使用WORKMARK字段將其相關(guān)聯(lián),如果在第一個表中查找到信息以后馬上會進(jìn)入第二個表中進(jìn)行查找,如果第一個表中的信息符合,就返回個客戶第二個表中的信息,因為座席端主機(jī)有200多臺,為了防止幾臺主機(jī)同時進(jìn)行驗證信息,引起沖突,我在服務(wù)器端建立多線程,利用線程進(jìn)行后臺的查詢,以及查找結(jié)果的回傳,編寫成功后進(jìn)行測試,發(fā)現(xiàn)當(dāng)一個主機(jī)連接后可以測試成功,但是,當(dāng)?shù)诙€或者以后的線程產(chǎn)生時,數(shù)據(jù)集在第一個表中可以查到正確的信息,但是進(jìn)入第二個表中時,會發(fā)現(xiàn)按照正確的查找條件進(jìn)行查找時,查到的信息都為NIL,而且經(jīng)過跟蹤,發(fā)現(xiàn),其實ADO已經(jīng)找到了正確的信息,而且已經(jīng)發(fā)送成功了,但是卻無法接收到,當(dāng)時我在論壇中發(fā)表了一個帖子尋求幫助,原貼內(nèi)容:http://expert.csdn.net/Expert/topic/1420/1420051.xml?temp=.3060114

有些朋友說可能ACCESS數(shù)據(jù)庫不提供多線程訪問,但是我聽說很多的論壇中好像都使用了ACCESS進(jìn)行后臺線程的查找的。翻看MSDN中關(guān)于COM的說明:發(fā)現(xiàn)我的線程中竟然缺少最重要的兩個函數(shù)過程

CoInitialize( nil );凡是訪問com對象都應(yīng)該使用。線程的關(guān)閉時應(yīng)該使用CoUnInitialize;否則ADO肯定出錯,我相信肯定有不少的朋友經(jīng)歷過這種問題的:

我的線程代碼如下:

unit Unitquerythread;

interface

uses
  windows,SysUtils,Classes, Dialogs,ADODB,db, NMMSG, ActiveX{必須要有};

type
  QueryThread = class(TThread)
  PRivate
   FComputerInfor,Fipaddressinfo: string;  //傳遞的信息
   FAdoQuery,FAdoQUserInfor:TadoQuery;  //動態(tài)生成的表一,表2
  
   Fadoconnection:Tadoconnection;  //動態(tài)生成的連接
   Fnmmsg,FNMretureMSG:TNMMSG;//用來發(fā)送返回信息的組件
filestream:tfilestream;
    procedure ExtractInfor(TransInfo:string{自定義的從該提交信息中分離信息的過程});
    procedure ShellexeQuery;
  Destructor Destroy;

  protected
    procedure Execute; override;
  public
constructor  create(ComputerInfor:string;{傳輸來的計算機(jī)信息}IPaddressinfo:string{傳輸來的IP地址信息};nmmsg,NMretureMSG:TNMMSG);
  end;
var
  ExtractDomainUser:string;  //提取出來的域用戶名
  ExtractComputername:string;//提取出來的計算機(jī)名稱
  ExtractDomainname:string;//提取出來的域名
  strlist:Tstringlist;
  IPlist:Tstringlist;//保存查找到的本工作組的ip地址信息
  const defeat='defeat';  //驗證失敗,必須注銷客戶機(jī),在數(shù)據(jù)庫中重新進(jìn)行寫入


implementation


  uses Unitsendthread;


constructor QueryThread.create(ComputerInfor, IPaddressinfo: string;nmmsg,NMretureMSG:TNMMSG);
begin
  CoInitialize( nil );//使用com對象必須要初始化
 
inherited create(false);
  FreeOnTerminate:=true;
  FComputerInfor:=ComputerInfor;
  FIPaddressinfo:=IPaddressinfo;
  IPlist:=Tstringlist.create;//創(chuàng)造ip列表
  FAdoQuery:=TAdoQuery.Create(nil);     //動態(tài)生成表一
  FAdoQUserInfor:=TadoQuery.Create(nil);//動態(tài)生成表2
  Fadoconnection:=Tadoconnection.Create(nil);//動態(tài)生成的連接
  Fadoconnection.LoginPrompt :=false;
  Fadoconnection.KeepConnection :=true;
  Fadoquery.Connection:=Fadoconnection;
  FAdoQUserInfor.Connection :=Fadoconnection;
  Fadoconnection.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=PersonInformation.mdb;Mode=Read;Persist Security Info=False';


  Fnmmsg:=nmmsg;
  FNMretureMSG:=NMretureMSG;
  strlist:=Tstringlist.Create;
 
end;

destructor QueryThread.Destroy;
begin
  FAdoQuery.FREE;
  FAdoQUserInfor.FREE;
  Fadoconnection.Free;
  strlist.Free;
  iplist.free;
  CoUnInitialize;//必須使用
inherited destroy;
end;

procedure QueryThread.Execute;
begin

try
 begin
  extractinfor(FComputerInfor);  //進(jìn)行信息提取
 Synchronize(ShellexeQuery);//
 end;
except

self.Terminate;

end;

end;

procedure QueryThread.ExtractInfor(TransInfo: string);//改過程進(jìn)行提取用#進(jìn)行分割//的串里的各個字符串

integer;
j:array [1..2]of integer;//用來保存分割符的位置
H,L,M,N:integer;//進(jìn)行組合字符串時的循環(huán)參數(shù)

begin
 
局變量,首先清空
      ExtractDomainUser:='';
      ExtractDomainname:='';
      ExtractComputername:='';
      H:=1;

//=================================
 try
    begin
         for i := 1 to length(TransInfo) do

        if TransInfo[i]='#' then //找到了
           begin
            j[H]:=i;
            
            inc(H);
            continue;  //跳出循環(huán)
           end;

    BEGIN
     for L:=1 to j[1]-1 do
          ExtractDomainUser:=ExtractDomainUser+TransInfo[L]; //提取的登陸域用戶名
          ://showmessage(extractdomainuser);
     for M:=j[1]+1 to j[2]-1 do
          ExtractDomainname:=ExtractDomainname+TransInfo[M];//提取的域控制器名
        //showmessage(extractdomainname);
     for N:=j[2]+1 to length(trim(TransInfo)) do
          ExtractComputername:=ExtractComputername+Transinfo[N];//提取的計算機(jī)名
         //showmessage(extractcomputername);
    END;
   end;//進(jìn)行異常處理
  Except
   // messagebox(0,'信息提取出現(xiàn)錯誤!','提示信息',mb_iconinformation);
  end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure QueryThread.ShellexeQuery;
var
    mark:string;   //保存查找到的工號信息
    SkillInfor:string;
    RetureInformation:string; //返回個客戶端的信息
    WorkGroupUserInfor:Tstringlist;
    filename:string;

begin
 try
   begin
      
       FAdoQuery.Close;
       Fadoquery.SQL.Clear;
       FAdoQuery.SQL.Add ('SELECT * From LOGON WHERE DomainUser='+'"'+ExtractDomainUser+'"'+'and DomainName='+'"'+ExtractDomainname+'"'+'and ComputerName='+'"'+ExtractComputername+'"'+'and IPaddress='+'"'+FIPaddressinfo+'"');
       FAdoQuery.Prepared :=true;
       FAdoQuery.active:=true;
file://=====================================================================
   if (FAdoQuery.fieldbyname('WorkMark').asstring ='') or (FAdoQuery.fieldbyname('Privilege').asstring='')  then //沒有查到工號信息
         begin

             Fnmmsg.Disconnect;
             Fnmmsg.Host:=FIPaddressinfo;
             Fnmmsg.Port :=6711;
             Fnmmsg.FromName :='a';
             Fnmmsg.PostIt(defeat); //沒有找到權(quán)限和工號則發(fā)送錯誤消息
             FAdoQuery.active:=false;
         end

  else      //查詢到了工號,和權(quán)限信息 ,從階連表中得到所有信息
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     begin

              strlist.Clear;
              strlist.Add(FAdoQuery.fieldbyname('WorkMark').asstring);//把工號寫入
              mark:=FAdoQuery.fieldbyname('WorkMark').asstring; //將工號寫入mark臨時變量

              FAdoQuery.close; //關(guān)閉第一個數(shù)據(jù)集
   //===========進(jìn)入第二個表進(jìn)行查找===============================================
    with FAdoQUserInfor do
       begin
            
              if active =true then close;   //關(guān)閉數(shù)據(jù)集
              sql.Clear;

              sql.Add('Select * From WORKER Where WorkMark='+'"'+mark+'"'); //該部分可能要求具體化內(nèi)容
              Prepared :=true;
              open;
              //連接第二個線程時這里出現(xiàn)問題

            if (fieldbyname('Phone').asstring='')or (fieldbyname('Name').asstring='')or (fieldbyname('SkillLevel').asstring='')then
               begin
             showmessage('nil');
                  Fnmmsg.Disconnect;
                  Fnmmsg.Host:= FIPaddressinfo;
                  Fnmmsg.Port :=6711;
                  Fnmmsg.FromName :='b';
                  Fnmmsg.PostIt(defeat);  //發(fā)送錯誤消息
                  close;
               end

           else    //如果找到了電話號碼
               begin

                   strlist.add(fieldbyname('Name').asstring);  //寫入姓名
                   SkillInfor:=fieldbyname('SkillGroup').asstring;
                   strlist.add(fieldbyname('SkillGroup').asstring+'業(yè)務(wù)處理='+fieldbyname('SkillLevel').asstring); //上海市業(yè)務(wù)處理=1
                   strlist.Add(fieldbyname('Phone').asstring);  //寫入電話號碼
                 
                   RetureInformation :=strlist.Strings[0]{工號}+'#'+strlist.Strings[1]{姓名}+'#'+strlist.Strings[2]+'#'{技能信息}+strlist.strings[3]{電話號碼};
                   //edit;                      //煩會給客戶端的信息
                  // fieldbyname('IsLogon').asstring:='1'; //登錄成功,寫入成功標(biāo)志
                  // Post;

                   FNMretureMSG.Disconnect;
                   FNMretureMSG.Host :=FIPaddressinfo;
                   FNMretureMSG.Port:=6722; //回傳信息遠(yuǎn)程端口為6722;
                   FNMretureMSG.PostIt(RetureInformation);  //返回成功的信息


/·······························
   {進(jìn)行查詢工作組信息,然后傳送信息}
                   if active =true then close;
                   sql.clear;
                   SQL.Add('SELECT * FROM WORKER WHERE SkillGroup='+'"'+SkillInfor+'"');
                   open;
                
                   WorkGroupUserInfor:=Tstringlist.create;

                 while not eof do
                  begin
                   WorkGroupUserInfor.Add(fieldByName('Name').asstring ); {index0 name}
                   WorkGroupUserInfor.Add(fieldByName('WorkMark').asstring ); {index1 workmark}
                   WorkGroupUserInfor.Add(fieldByName('Phone').asstring );    {index2 Phone}
                   WorkGroupUserInfor.Add(fieldByName('SkillGroup').asstring +'業(yè)務(wù)處理='+fieldbyname('SkillLevel').asstring);{index3 SkillGroup}
                   IPlist.Add(fieldbyname('IPaddress').asstring); ://所有的ip地址保留到內(nèi)存中
                   //showmessage(fieldbyname('IPaddress').asstring);
                   iplist.SaveToFile (fieldByName('SkillGroup').asstring+'IPlst.INI');
                   next;
                 end;
                 WorkGroupUserInfor.SaveToFile(fieldByName('SkillGroup').asstring+'.ini');
                 close;
             end;
          end;
     end;
   end;
  except      //防止查詢失敗
    begin
      FAdoQuery.close;
      FAdoQUserInfor.close;
   end;
 end;

 end;

end.
注意:使用這兩個函數(shù)應(yīng)該加上activex.pas單元,否則,無法運行。

我個人認(rèn)為,如果開發(fā)基于ADO的多線程操作,最好在每個線程中放置一個連接,而數(shù)據(jù)集和數(shù)據(jù)連接都使用動態(tài)生成,當(dāng)然你必須要注意必須要保證線程能過正常的釋放,否則你的電腦很快就快死機(jī)了,呵呵,當(dāng)然還有第二種方法,你可以生成一個數(shù)據(jù)模塊,靜態(tài)放置數(shù)據(jù)集和ADOCONNECTION組件,然后使該數(shù)據(jù)模塊不在程序開始時生成,而可以在線程中動態(tài)的生成,這種方法也可以,有興趣的朋友可以試一下二者之間的執(zhí)行效率。

而對于ADO,我認(rèn)為在開始情況下,如果不初始函數(shù)和后來的釋放函數(shù),卻不能報錯,應(yīng)該是一個BUG吧。


上一篇:當(dāng)單擊DBGrid中的標(biāo)題欄時,進(jìn)行排序

下一篇:類,接口與動態(tài)鏈接庫

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

新聞熱點

疑難解答

圖片精選

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

日韩视频在线观看免费| 国产一区三区三区| 亚洲精品国产综合区久久久久久久| 国产精品国产三级国产专播品爱网| 又爽又黄的午夜网站| 亚洲欧洲精品成人久久奇米网| 成人亚洲欧美| 亚洲国产欧美另类丝袜| 9色在线视频网站| 麻豆精品在线观看| 软萌小仙自慰喷白浆| 亚洲综合色婷婷在线观看| 四虎精品一区二区| 日韩极品精品视频免费观看| 999国产精品999久久久久久| 欧美精品乱码久久久久久| 日韩欧美亚洲v片| 在线精品亚洲欧美日韩国产| 色婷婷综合久久久久中文| 国产卡一卡二在线| 欧美日韩一二三四区| 国产999精品久久久久久绿帽| 亚洲精品男人天堂| 亚洲图色在线| 美女精品一区| 免费高清在线观看电视| 一本色道久久99精品综合| 一区二区三区国产在线| 欧美日韩人妻精品一区二区三区| 亚洲精品在线免费看| 欧美高清xxx| 国产精品久久一卡二卡| 人妻视频一区二区三区| 91在线观看视频| 精品国自产在线观看| 99re8这里有精品热视频8在线| 国产精品一区二区精品| 欧美日韩中国免费专区在线看| 久久精品国产色蜜蜜麻豆| 看成年女人免费午夜视频| 136国产福利精品导航网址应用| 中文字幕一区二区三区四区不卡| 成人网ww555视频免费看| 欧美特大特白屁股xxxx| 欧美激情20| 亚洲色图久久久| 国产一区调教| 精品人伦一区二区三区蜜桃网站| 中文字幕成人一区| aa日韩免费精品视频一| 蜜桃狠狠色伊人亚洲综合网站| 黑人巨大精品欧美| 毛片毛片毛片毛片毛| 欧美自拍小视频| 亚洲美女尤物影院| 久久野战av| 久久午夜夜伦鲁鲁一区二区| 狼人精品一区二区三区在线| 亚洲av成人精品日韩在线播放| 不卡一区二区三区四区| 欧美黑人做爰爽爽爽| 久久免费视频66| 亚洲欧洲成人精品av97| xvideos.蜜桃一区二区| 亚洲第一精品久久忘忧草社区| 欧美成人明星100排名| 午夜精品爽啪视频| 亚洲国产成人久久综合| 首页亚洲欧美制服丝腿| 国产福利视频一区二区| 亚洲欧美日韩国产成人| 免费在线观看黄网站| 精品高清美女精品国产区| 国产偷人视频免费| 亚洲影院在线| 老熟妻内射精品一区| 日本中文字幕中出在线| 国产微拍精品一区| 亚洲插插视频| 亚洲视频小说| 国产成人免费网站| 日韩一卡二卡在线| 亚洲伦理精品| 国产三级黄色片| 国产一区二区在线观看免费视频| 欧美午夜精品电影| 久久久久无码国产精品不卡| 一区二区三区视频免费| 91精品麻豆日日躁夜夜躁| 男男做性免费视频网| 高潮毛片在线观看| 日本成人三级电影| 国产一级18片视频| 伊人色综合久久天天人手人婷| gogo在线高清视频| 欧美日韩人人澡狠狠躁视频| 国产精品中文字幕亚洲欧美| 激情欧美一区二区三区黑长吊| 亚洲风情在线资源站| 视频免费一区| 国产麻豆精品视频| 成人黄网18免费观看的网站| 亚洲香蕉av在线一区二区三区| 国产不卡精品| 亚洲天堂视频网站| japanese国产精品| 国产精品一久久香蕉国产线看观看| 黄色网在线免费看| 国产精品一区二区3区| 免费免费啪视频在线观播放| 黑人巨茎大战欧美白妇| 国产精伦一区二区三区| 国产麻豆视频在线观看| 日韩精品麻豆| 日韩成人网免费视频| 天天色天天干天天色| 亚洲精品菠萝久久久久久久| 久久久久国产美女免费网站| 亚洲欧美日韩精品久久| 精品香蕉在线观看视频一| 久久精品免费电影| 国产欧美最新羞羞视频在线观看| 久草视频精品在线| 亚洲成a人v欧美综合天堂麻豆| 国产三级三级三级看三级| 欧洲日本不卡| 日本黄色免费观看| 中文字幕一区二| 插插插亚洲综合网| 欧美美乳视频| 国产精品黄色在线观看| www.日本一区| 欧美精品丝袜久久久中文字幕| 成人精品一区二区三区四区| 亚洲最大av网站| a级片免费观看| 在线观看91精品国产入口| 国产精品伦理一区二区三区| 久久精品成人一区二区三区蜜臀| 在线观看麻豆视频| 精品伊人久久久久7777人| 亚洲一区999| 激情成人中文字幕| 亚洲福利网站| 色88久久久久高潮综合影院| jizz中国女人| 午夜一区二区三区在线观看| 天天综合91| 天天综合网天天| 91麻豆桃色免费看| 久久久久久女乱国产| 国产超碰人人爽人人做人人爱| 中国女人久久久| 久草在线看片| 欧美婷婷精品激情| 久久久久久久久久久91| 成年人羞羞的网站| 国产亚洲精品精品精品| 国产伦精品免费视频| 亚洲欧美日韩人成在线播放| 99综合99| 久久综合中文色婷婷| 99视频只有精品| 日本三级亚洲精品| 国产精品一区二区三区精品| 性感美女极品91精品| 欧美xxxx视频| 51色欧美片视频在线观看| 久久精品日韩一区二区三区| 91成人抖音| 日韩精品中午字幕| 麻豆freexxxx性91精品| 久久久91精品国产一区二区精品| 草莓视频一区| 亚洲精品www久久久久久| 伊人精品久久| 亚洲qvod图片区电影| 97人妻精品视频一区| 欧美日韩一区二区在线观看视频| 精品国内二区三区| yy111111少妇嫩草影院| 久久久久久无码精品大片| 亚洲人吸女人奶水| 欧美一区二区三区在线播放| 亚洲产国偷v产偷v自拍涩爱| 免费a级观看| 美女尤物久久精品| 国产美女被遭强高潮免费网站| 国精产品999国精产品官网| 最新国产乱人伦偷精品免费网站| gogogo免费视频观看亚洲一| 中文字幕第一页在线| 91电影在线播放| 国产在线精品免费av| 中国极品少妇xxxx| 久久久99精品| 亚洲aaa激情| 天堂国产一区二区三区| 国模冰冰炮一区二区| 天天干天天av| 91久久精品国产91久久性色| 777久久久精品| 亚洲r级在线视频| 成人淫片免费视频95视频| 国产精品福利一区二区三区| 性欧美videos高清hd4k| 精品欧美乱码久久久久久1区2区| 你懂的视频网站| 在线观看日韩| 国产成人在线免费观看视频| 天堂在线网站| 久久精品99国产国产精| 91在线播放观看| 91麻豆精品国产91久久久久久久久| 国模gogo一区二区大胆私拍| 欧美高清在线观看| 国产亚洲欧美日韩在线一区| 亚洲女人天堂成人av在线| 最近中文字幕在线mv视频在线| 特级做a爱片免费69| 欧美日韩国产精品一区二区| 免费黄色在线播放| 热久久最新地址| 国产精品吹潮在线观看| 欧美三级午夜理伦三级中文幕| 国产又大又粗又爽的毛片| 正在播放91九色| 黄色片视频在线播放| 高清欧美精品xxxxx在线看| 精品国产成人av在线免| 欧美精品一本久久男人的天堂| 成人不卡免费视频| 免费在线观看av网站| 亚洲欧美国产不卡| 天天摸天天做天天爽水多| 精品国产亚洲一区二区三区| 深夜福利av| 性欧美1819sex性高清大胸| 国产精品日韩无码| 成人在线观看高清| 亚洲中国最大av网站| 亚洲人成网站在线播| 91网址在线观看| 成人高清dvd| 精品动漫一区二区| 亚洲国产精品久久久久婷婷884| 精品伦精品一区二区三区视频密桃| 久久亚洲精精品中文字幕| 一区二区三区四区高清精品免费观看| 久草在线视频资源| 91在线超碰| 日韩一级免费视频| www.国产色| 欧美一区精品| 中文字幕另类日韩欧美亚洲嫩草| 国产在视频线精品视频www666| 国产一区亚洲二区三区| 日本在线成人一区二区| 成年人在线观看视频免费| 国产精品青草综合久久久久99| 午夜福制92视频| 国产日产欧美一区二区视频| 免费a v网站| 国产欧美综合一区| 日本在线视频网| 综合精品一区| 久久久99国产精品免费| 99视频有精品| 国产国语老龄妇女a片| 一个人免费观看在线视频www| 欧美黄色一级网站| 国产亚洲午夜| 午夜欧美在线一二页| 免费av成人在线| 熟女少妇a性色生活片毛片| 欧美欧美天天天天操| 久久久久久久国产精品毛片| 欧美一卡二卡三卡| 亚洲蜜桃视频| 美女黄页在线观看| 国产精品成人一区二区网站软件| a级免费观看| 亚洲高清资源综合久久精品| 免费观看在线一区二区三区| 伊人色综合久久天天人手人婷| 久久久99精品久久| 爽爽窝窝午夜精品一区二区| 亚洲欧美日韩一区二区三区在线观看| 亚洲综合精品视频| 欧美人成在线视频| 久久精品www人人爽人人| 国产精品日日摸夜夜摸av| 91精品动漫在线观看| 欧美性色aⅴ视频一区日韩精品| 国产精品国产三级国产普通话三级| 亚洲色图88| 99这里有精品视频| 在线电影国产精品| 精品欧美国产| 日本视频免费在线| 中文字幕在线观看免费高清| 国产成人香蕉在线视频网站| 久久久高清一区二区三区| 99久久99久久精品国产片果冰| 亚洲精品成av人片天堂无码| 蜜桃av一区二区| www.99re7| 九九热hot精品视频在线播放| 欧美高清免费| 天海翼一区二区| 欧美色欧美亚洲另类二区| 亚洲熟妇av一区二区三区漫画| 亚洲精品无码专区| 国产黄色片中文字幕| av三级在线播放| 欧美日韩中国免费专区在线看| 情趣视频在线观看| 在线播放91| 欧美一区二区三区啪啪| 国产精品成人一区二区三区吃奶| 性视频在线播放| 亚洲人成在线观看网站高清| 国产精品999.| 欧美在线短视频| 一级片视频网站| 中文字幕在线不卡一区二区三区| 卡通动漫亚洲综合| 亚洲高清视频免费观看|