Отображение (Synopse) столбца таблицы SQLite3 в Delphi7 TListView - PullRequest
3 голосов
/ 23 мая 2011

Я хотел бы взять следующий блок (DrivesData) и отобразить столбец диска в TListView. Я никогда раньше не работал с (Synopse) кодом SQLite3, поэтому я надеюсь, что кто-нибудь может дать мне небольшой толчок в правильном направлении.

Просто добавьте модуль DrivesData в условие использования, затем запустите, и он создаст файл базы данных «drive.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 Ответ

3 голосов
/ 23 мая 2011

Хорошая попытка!

Но, боюсь, вам не хватает некоторых моментов фреймворка:

  • например, вы смешиваете уровень записи и уровень приложения MVC: TSQLRecord отображает таблицу БД, и вы не должны объявлять MVC TSQLModel и TSQLRest внутри этого класса;
  • и вы упускаете подход ORM, вам не нужно писать весь этот код SQL (CREATE TABLE и INSERT): инфраструктура напишет его для вас без ошибок и точный ожидаемый тип столбца (с сопоставлениями)!

Вместо непосредственного использования TSQLRestServerDB лучше использовать TSQLRestClientDB (который создаст экземпляр его TSQLRestServerDB, находящегося в частной собственности), даже если вы все еще работаете локально. Таким образом, вы получите гораздо больше возможностей без потери производительности.

Вы используете тип Char в своем коде. Наш фреймворк ориентирован на UTF-8, поэтому вы должны использовать вместо него AnsiChar или использовать функцию StringToUtf8() для обеспечения корректности (по крайней мере, в версии Delphi для Unicode).

Я рекомендую вам взглянуть на пример исходного кода и предоставленную документацию (особенно документ SAD, в общей презентации на первых страницах, включая основную демонстрацию SynFile).

Чтобы получить некоторые данные, а затем отобразить их в VCL (например, в TListBox), взгляните на класс TSQLTableJSON. В документе SAD есть некоторый пример кода (посмотрите на индекс ключевого слова в начале документа, если вы немного растерялись).

Возможно, StackOverflow - не лучшее место, чтобы задавать такие конкретные вопросы. У вас есть наш форум, доступный по http://synopse.info для публикации любых вопросов, касающихся этой структуры. Вы можете разместить свой код здесь.

Спасибо за проявленный интерес!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...