问题描述
|
我想采用以下单位(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
映射数据库表,并且您不应在此类中声明MVCTSQLModel
和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上找到我们的论坛,以发布有关此框架的任何问题。您可以在此处发布您的代码。
感谢您的关注!