在Delphi7 TListView中显示(Synopse)SQLite3表列

时间:2011-05-23 13:47:44

标签: database delphi sqlite

我想采用以下单元(DrivesData)并在TListView中显示驱动器列。我之前从未使用过(Synopse)SQLite3代码,所以我希望有人能给我一点正确的方向。

只需将DrivesData单元添加到uses子句然后运行,它将创建" drives.sqlite"带有驱动器列表的数据库文件' A'到' Z'。

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 个答案:

答案 0 :(得分:3)

很好的尝试!

但我担心你遗漏了框架的一些要点:

  • 例如,您正在混合记录级别和MVC应用程序级别:TSQLRecord映射数据库表,您不应在此类中声明MVC TSQLModelTSQLRest;
  • 并且您错过了ORM方法,您不需要编写所有这些SQL代码(CREATE TABLE和INSERT):框架将为您编写,没有错误,以及确切的预期列类型(有整理)!

除非直接使用TSQLRestServerDB,否则最好使用TSQLRestClientDB(将实例化其私有TSQLRestServerDB),即使您仍在本地工作。因此,您将获得更多功能而不会降低性能。

您在代码中使用Char类型。我们的框架是面向UTF-8的,所以你应该使用AnsiChar,或使用StringToUtf8()函数来确保正确性(至少使用Unicode版本的Delphi)。

我建议您查看示例代码源代码和provided documentation(特别是SAD文档,在第一页的常规演示中,包括SynFile主演示)。

要检索某些数据,然后将其显示在VCL中(例如在TListBox中),请查看TSQLTableJSON类。 SAD文档中有一些代码示例(如果您有点丢失,请查看文档开头的关键字索引。)

也许StackOverflow不是提出这些具体问题的最佳场所。您可以在http://synopse.info处找到我们的论坛,以发布有关此框架的任何问题。您可以在此处发布您的代码。

感谢您的关注!