2011-05-23 42 views
3

我想採用以下單元(DrivesData)並在TListView中顯示驅動器列。我從來沒有使用過(Synopse)SQLite3代碼,所以我希望有人能給我一點點正確的方向。在Delphi7 TListView中顯示(Synopse)SQLite3表列

只需將DrivesData單元添加到uses子句然後運行,它將創建帶有驅動器'A'到'Z'列表的「drives.sqlite」數據庫文件。

unit DrivesData; 

interface 

uses 
    SynCommons, SQLite3Commons; 

type 
    TDrives = class(TSQLRecord) 
    private 
    { Private declarations } 
    FDrive: RawUTF8; 
    protected 
    { Protected declarations } 
    FDrivesModel: TSQLModel; 
    FDrivesDatabase: TSQLRest; 
    public 
    { Public declarations } 
    constructor Create(); override; 
    destructor Destroy(); override; 
    published 
    { Published declarations } 
    property Drive: RawUTF8 read FDrive write FDrive; 
    end; 

var 
    DriveRecord: TDrives; 

implementation 

uses 
    SQLite3; 

function CreateDrivesModel(): TSQLModel; 
begin 
    Result := TSQLModel.Create([TDrives]); 
end; 

{ TDrives } 
constructor TDrives.Create(); 
var 
    X: Char; 
begin 
    inherited Create(); 

    FDrivesModel := CreateDrivesModel(); 
    FDrivesDatabase := TSQLRestServerDB.Create(FDrivesModel, 'drives.sqlite'); 

    TSQLRestServerDB(FDrivesDatabase).DB.Execute(
    'CREATE TABLE IF NOT EXISTS drives ' + 
    '(id INTEGER PRIMARY KEY, drive TEXT NOT NULL UNIQUE COLLATE NOCASE);'); 

    for X := 'A' to 'Z' do 
    begin 
    TSQLRestServerDB(FDrivesDatabase).DB.Execute(
     'INSERT OR IGNORE INTO drives (drive) VALUES ("' + X + ':")'); 
    end; 
end; 

destructor TDrives.Destroy(); 
begin 
    if Assigned(FDrivesDatabase) then 
    FDrivesDatabase.Free(); 

    if Assigned(FDrivesModel) then 
    FDrivesModel.Free(); 

    inherited Destroy(); 
end; 

initialization 
    DriveRecord := TDrives.Create(); 

finalization 
    if Assigned(DriveRecord) then 
    DriveRecord.Free(); 

end. 
+1

爲什麼不直接將26個項目添加到列表視圖中,而不是在表格中添加26個項目?爲什麼涉及數據庫呢? – 2011-05-23 13:57:09

+1

爲什麼?基本上,爲了教育目的。 – eyeClaxton 2011-05-23 14:07:00

回答

3

不錯的嘗試!

但我怕你缺少該構架的一些要點:

  • 比如你混合創紀錄水平,MVC應用層面:一個TSQLRecord映射一個數據庫表,你不應該申報MVC TSQLModelTSQLRest這個班裏面;
  • 並且您錯過了ORM方法,您不需要編寫所有這些SQL代碼(CREATE TABLE和INSERT):框架將爲您編寫它,沒有錯誤,並且確切的期望列類型(與整理)!

,而不是直接使用TSQLRestServerDB本身,你應該更好地使用TSQLRestClientDB(這將實例的私有TSQLRestServerDB),即使你仍然在本地工作。所以你會得到更多的功能,而不會影響性能。

您在代碼中使用的是Char類型。我們的框架是面向UTF-8的,所以你應該使用AnsiChar代替,或者使用StringToUtf8()函數來保證正確性(至少在Delphi的Unicode版本中)。

我建議你看看示例代碼源代碼和provided documentation(特別是SAD文檔,在第一頁的一般介紹中,包括SynFile主演示)。

要檢索一些數據,然後將其顯示在VCL中(例如,在TListBox中),請查看TSQLTableJSON類。 SAD文檔中有一些代碼示例(查看關鍵字索引,在文檔的開頭,如果您有點丟失)。

也許StackOverflow並不是問這種特定問題的最佳地點。您有我們的論壇可在http://synopse.info發佈有關此框架的任何問題。你可以在這裏發佈你的代碼。

感謝您的關注!

+0

謝謝,我今天將前往論壇。 – eyeClaxton 2011-05-23 15:07:34

+0

我在論壇上寫了一些更正確的代碼,遵循你的目的。 – 2011-05-24 07:01:54