<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      秋·風

        博客園 :: 首頁 :: 博問 :: 閃存 :: 新隨筆 :: 聯系 :: 訂閱 訂閱 :: 管理 ::

             轉到Lazarus后發現缺少適合的三層控件,嘗試過國產商業及網上的開源三層控件,但存在或多或少的問題,始終找不到滿意的三層控件(特別是linux aarch64下),決定趁2022年最后一天,開發一個基于RealThinClient SDK簡單實用的lazarus三層控件(參考網上的相關代碼)。
             服務端網絡通信組件和數據庫組件決定三層控件性能和穩定可靠的關鍵所在,delphi很多三層使用強大的mORMot作為網絡通信控件,還有部分使用RealThinClient SDK,如全能中間件等,RTC的特點為是輕量/穩定,還有,RealThinClient SDK比mORMot使用更簡單方便,也比較容易實現我想要的功能,最重要的是能在linux(包括amr64/x86_64等CPU)和windows下使用,準備使用RTC作為我的三層控件的網絡通信組件。服務端用數據庫組件測試了unidac、zeosdbo和lazarus自帶的SQLDB等,zeosdbo和lazarus自帶的SQLDB在不同平臺需要各種數據庫驅動,部署難度大;unidac支持直連方式與數據庫連接,不需要數據庫驅動,部署簡單方便,linux服務端首選unidac作為服務端的數據庫控件。
             數據庫可以選擇MSSQL2000、MySQL和PostgreSQL,中間件已適配這3種數據庫,其中MSSQL為支持分頁,表需添加ID字段。如果服務端在Linux運行,建議使用MySQL和PostgreSQL,因unidac不支持linux aarch64 for SQLite,所以數據庫沒選擇SQLite。
             服務端使用RealThinClient SDK和UNIDAC,客戶端使用RealThinClient SDK和RealThinClient SDK的內存表(TRTCMemdataset),客戶端封裝了TQFRemoteConnection、TQFRemoteTable、TQFRemoteQuery和TQFRemoteStoredProc等4個控件,其中TQFRemoteTable支持分頁功能,如果沒分頁功能,在數據量大時性能下降嚴重,影響用戶體驗,2023-1-20增加自動保存變更后的數據。TQFRemoteConnection包含從服務端返回使用Snowflake方法生成的ID,取服務端時間和上傳/下載文件(沒有進度提示)功能,近日,將QFRemoteDataSet封裝為可視控件,使用更簡單方便。
             這個三層控件功能相對簡單,只適合lazarus使用,但非常實用,編寫的應用軟件能在windows和國產信創操作系統(linux)及CPU運行,使用時只需在uses添加QFRemoteDataSet單元,按下面的方法使用就可以,使用起來挺簡單的。
      QQ:315175176 秋風
      1.直接引用QFRemoteDataSet單元時的代碼:

      procedure TForm1.FormCreate(Sender: TObject);
      var myinifile:Tinifile;
      begin
        MYIniFile := TIniFile.Create(Extractfilepath(Paramstr(0)) + 'config.ini');
        Edit1.Text:=MyIniFile.readstring('服務器', 'IP', '127.0.0.1');
        Edit2.Text:= MyIniFile.readstring('服務器', '端口', '81');
        Edit5.Text:=MyIniFile.readstring('服務器', '加密密鑰', '');
        MYIniFile.Free;
      
        QFConnect1:=TQFRemoteConnection.Create;
        QFConnect1.server_ip:=edit1.Text;
        QFConnect1.server_port:=edit2.text;
        QFConnect1.Compression:=true; //壓縮
        QFConnect1.SecureKey:=Edit5.text;//加密key
        QFTable:=TQFRemoteTable.Create(self);
        QFTable.DataPagination:=True;
        QFTable.Connection:=QFConnect1;
        DataSource1.DataSet:=QFTable;
        QFTable.TableName:='混凝土試塊數據';
        QFTable.KeyFields:='報告編號,序號';
      end;
      
      procedure TForm1.Button2Click(Sender: TObject);
      begin
        FTimeUsed := GetTickCount;
        if QFConnect1=nil then
        begin
          QFConnect1:=TQFRemoteConnection.Create;//創建連接
          QFConnect1.server_ip:=edit1.Text; //設置服務端IP
          QFConnect1.server_port:=edit2.text;//設置服務端端口
        end;
        if QFTable=nil then
        begin
          QFTable:=TQFRemoteTable.Create(nil);//創建Table
          QFTable.Connection:=QFConnect1; //指定Table的connection
          QFTable.TableName:='混凝土試塊數據';
          QFTable.KeyFields:='報告編號,序號';
        end;
        QFTable.DataPagination:=CheckBox1.Checked;//數據分頁
        DataSource1.DataSet:=QFTable;
        QFTable.open;
        Label2.Caption:= '記錄數:'+QFTable.RecordCount.ToString+''+QFTable.CurPage.ToString+'頁/共'+QFTable.PageNoMax.ToString+''+'  '+IntToStr(GetTickCount - FTimeUsed) + '毫秒';
      end;

      2.用控件時的代碼:

      procedure TForm1.FormCreate(Sender: TObject);
      var myinifile:Tinifile;
      begin
        MYIniFile := TIniFile.Create(Extractfilepath(Paramstr(0)) + 'config.ini');
        Edit1.Text:=MyIniFile.readstring('服務器', 'IP', '127.0.0.1');
        Edit2.Text:= MyIniFile.readstring('服務器', '端口', '81');
        Edit5.Text:=MyIniFile.readstring('服務器', '加密密鑰', '');
        MYIniFile.Free;
        QFRemoteConnection1.SecureKey:=Edit5.Text;
        QFRemoteConnection1.Server_ip:=Edit1.Text;
        QFRemoteConnection1.Server_port:=Edit2.Text;
      end;
      
      procedure TForm1.Button2Click(Sender: TObject);
      begin
        FTimeUsed := GetTickCount;
        QFRemoteTable1.DataPagination:=CheckBox1.Checked;//數據分頁
        DataSource1.DataSet:=QFRemoteTable1;
        QFRemoteTable1.open;
        Label2.Caption:= '記錄數:'+QFRemoteTable1.RecordCount.ToString+''+QFRemoteTable1.CurPage.ToString+'頁/共'+QFRemoteTable1.PageNoMax.ToString+''+'  '+IntToStr(GetTickCount - FTimeUsed) + '毫秒';
      end;

      將QFRemoteDataSet封裝為可視控件:

       windows服務端:

      linux服務端:

       客戶端在windows運行時的截圖:

      客戶端在銀河麒麟linux arm64運行截圖:


      QFRemoteDataSet下載鏈接:
      通過百度網盤分享的文件:QFRemote...

      https://pan.baidu.com/s/16TGs5LWYHBEpoeBM-K1-BA?pwd=G876
      提取碼:G876

       

      posted on 2023-01-09 12:30  秋·風  閱讀(2319)  評論(8)    收藏  舉報
      主站蜘蛛池模板: 欧美成人精品三级网站| 国产精品亚洲二区在线播放| 美女内射毛片在线看3d| 亚洲精品中文字幕码专区| 91精品国产色综合久久不| 国产精品一区二区AV| 亚洲成人av在线高清| 大屁股国产白浆一二区| 中文字幕亚洲一区二区三区| 丘北县| 国产网友愉拍精品视频手机 | 日本美女性亚洲精品黄色| 国产高清免费午夜在线视频| 久章草在线毛片视频播放| 起碰免费公开97在线视频| 国产一卡2卡三卡4卡免费网站| 欧美日韩国产亚洲沙发| 色老头在线一区二区三区| 四虎国产精品永久在线| 国产精欧美一区二区三区| 少妇被粗大的猛烈xx动态图 | 国产一区二区三区四区色| 大帝AV在线一区二区三区| 色又黄又爽18禁免费视频| 欧美国产成人久久精品| 少妇人妻真实偷人精品| 原阳县| 国产精品无码不卡在线播放| 成年黄页网站大全免费无码| 国产成人亚洲欧美二区综合| 99久久精品国产熟女拳交| 国产免费高清69式视频在线观看 | 91青青草视频在线观看| 亚洲国产精品一区二区视频| 亚洲欧美日韩高清一区二区三区| 91密桃精品国产91久久| 久久99九九精品久久久久蜜桃 | 最近2019免费中文字幕8| 精品久久人人做爽综合| 国精品午夜福利视频不卡| 色综合久久久久综合体桃花网|