在Delphi7 TListView中显示一个SynopseSQLite3表列

问题描述

| 我想采用以下单位(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.
    

解决方法

不错的尝试! 但是恐怕您会缺少该框架的某些要点: 例如,您在混合记录级别和MVC应用程序级别:
TSQLRecord
映射数据库表,并且您不应在此类中声明MVC
TSQLModel
TSQLRest
; 并且您错过了ORM方法,则不需要编写所有这些SQL代码(CREATE TABLE和INSERT):框架将为您编写它,而不会出现错误,并且提供了确切的预期列类型(排序规则)! 最好不要使用
TSQLRestClientDB
(它将实例化其私有
TSQLRestServerDB
),而不是直接单独使用
TSQLRestServerDB
,即使您仍在本地工作。因此,您将获得更多功能而不会降低性能。 您在代码中使用
Char
类型。我们的框架面向UTF-8,因此您应改用AnsiChar,或使用or8ѭ函数来确保正确性(至少在Unicode版本的Delphi中)。 我建议您看一下示例代码的源代码和提供的文档(特别是SAD文档,在第一页的概述中,包括SynFile主演示)。 要检索一些数据,然后将其显示在VCL中(例如,在ѭ9中),请看一下
TSQLTableJSON
类。 SAD文档中有一些代码示例(如果您有点迷茫,请查看文档开头的关键字索引)。 也许StackOverflow不是询问此类特定问题的最佳场所。您可以在http://synopse.info上找到我们的论坛,以发布有关此框架的任何问题。您可以在此处发布您的代码。 感谢您的关注!     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...