• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Synopse mORMot框架樣例學習02 - Embedded SQLite3 ORM

    標簽: delphi  mORMot  pascal

    通過樣例01,學習到了數據單元的定義方法,靜態服務器的創建方式,以及ORM的基本使用方法,現在來看看樣例02 - Embedded SQLite3 ORM,同樣從字面意思猜測它應該是介紹嵌入式SQLite3數據庫的ORM方法.

    通過例02的源碼,可以發現只有Project02.dpr工程文件源碼,并沒有pas單元文件,在例01里邊簡單做過說明,是因為例02共用01的所有單元,所以看到的項目管理界面和例01是一樣的,僅僅有2行工程代碼有點變動,如下:

    { 嵌入式數據庫引擎初始化 }  
    Form1.Database := TSQLRestServerDB.Create(Form1.Model, ChangeFileExt(ExeVersion.ProgramFileName, '.db3'));
    { 根據Model(SampleData單元中的定義)創建表格 }
    TSQLRestServerDB(Form1.Database).CreateMissingTables;

    因為Unit1.pas單元代碼就是例01的,所以直接運行程序看看,同樣輸入3組測試數據:
    a MessageA,b MessageB,c MessageC

    然后借助sqliteadmin打開例2文件夾下的Project02.db3文件,可以看到數據的存儲情況.

    添加和查找的過程就是CRUD中的Create和Read,下面試試Update和Delete,先把界面改造一下,添加2個按鈕Update和Delete,再添加一個顯示日志的Memo,具體界面如下:

    具體的實現代碼如下:

    { 刪除數據的操作 }
    procedure TForm1.DeleteButtonClick(Sender: TObject);
    var
      Rec: TSQLSampleRecord;
    begin
      Rec := TSQLSampleRecord.Create(Database, 'Name=?', [StringToUTF8(NameEdit.Text)]);
      try
        if Rec.ID = 0 then
          LogMemo.Lines.Add('Delete:無此數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
        else
        begin
          if Database.Delete(TSQLSampleRecord, Rec.ID) then
            LogMemo.Lines.Add('Delete:刪除一條數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
          else
            LogMemo.Lines.Add('Delete:刪除失敗,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條');
        end;
      finally
        Rec.Free;
      end;
    end;
    { 更新數據的操作 }
    procedure TForm1.UpdateButtonClick(Sender: TObject);
    var
      Rec: TSQLSampleRecord;
    begin
      Rec := TSQLSampleRecord.Create(Database, 'Name=?', [StringToUTF8(NameEdit.Text)]);
      try
        if Rec.ID = 0 then
          LogMemo.Lines.Add('Update:無此數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
        else
        begin
          Rec.Question := StringToUTF8(QuestionMemo.Text);
          if Database.Update(Rec) then
            LogMemo.Lines.Add('Update:更新一條記錄,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
          else
            LogMemo.Lines.Add('Update:更新失敗,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
        end;
      finally
        Rec.Free;
      end;
    end;

    同樣的代碼可以直接用到例01中,效果是一樣的,實現這些并沒有寫任何SQL語句,也就是說這些基本操作是和數據庫無關的,看樣子這樣的設計應該比較好維護,繼續學習,希望在學習中不斷得到新的養分,充實自己,每天都需要挑戰,每天都要進步一點點,防止老年癡呆.

     


     

    版權聲明:本文為loloopop原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/loloopop/article/details/102613507

    智能推薦

    Sqlite3源碼學習(5)OS的接口VFS

        之前講了那么多的環境搭建,現在終于可以學習源碼了。官方有一篇講解VFS的文檔,對理解sqlite3的VFS有很大的幫助: http://www.sqlite.org/vfs.html 1.VFS簡介       VFS也就是所謂的虛擬文件系統,因為sqlite3運行在不同的平臺上會有不同的文件系統,V...

    ORM 框架

    ORM 框架 轉:https://www.cnblogs.com/pycode/p/mysql-orm.html SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,簡言之便是:將對象轉換成SQL,然后使用數據API執行SQL并獲取執行結果。 SQLAlchemy本身無法操作數據庫,其必須依賴pymsql等第三方插件,Dial...

    Django框架(3) —— ORM框架、模型設計

    ORM框架 O: object,類對象 R: relation,關系,也就是關系數據庫中數據表 M: mapping,映射 在ORM框架中,它幫我們把類和數據表進行了一個映射,可以讓我們通過類和類對象就能操作它所對應的表格中的數據。ORM框架還有一個功能,它可以根據我們設計的類自動幫我們生成數據庫中的表格,省去了我們自己建表的過程。 django中內嵌了ORM框架,不需要直接面向數據庫編程,而是定...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡