AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TSQLiteDatabase: A SQLite3 Database Wrapper

TSQLiteDatabase: A SQLite3 Database Wrapper

Ein Thema von HalloDu · begonnen am 17. Sep 2009 · letzter Beitrag vom 11. Nov 2016
Antwort Antwort
Seite 3 von 3     123
HalloDu
Registriert seit: 24. Apr 2006
TSQLiteDatabase: A SQLite3 Database Wrapper
Kompatible SQLite3 Version: 3.6.16
TSQLiteDatabase ist ein nahezu vollständiger OOP-Wrapper um die SQLite3.dll. Er wurde erstellt da ich für eine Anwendung in Delphi 2009 ein kleine, freie Datenbank brauchte nd ich mich für SQLite entschieden hatte. Da ich aber für den Zugriff eine kleine, schlanke Klasse brauchte und mir die im Internet gefundenen Lösungen nicht gefallen haben, habe ich kurzerhand selbst einen Wrapper geschrieben. Zur Nutzung wird die SQLite3.dll benötigt

Features
Verbinden mit einer SQLite3 kompatiblen Datenbank
Ausführen von SQL-Statments
Bindings in den Statments
Erzeugen von Collations, Aggregaten und Funktionen
Fortschrittsereignis bei längeren Prozessen
Autorisieren von bestimmten SQL-Aktionen
Blob-Zugriff als Stream
Weiterarbeiten mit SQLite-internen Werten
Limits setzen
In Delphi 2009: Unicode
NoVCL kompatibel

Beispiele zur Benutzung
Zur Datenbank verbinden und ein "INSERT" ausführen
Delphi-Quellcode:
var DB: TSQLiteDatabase;
begin
  DB := TSQLiteDatabase.Create('test.db');
  DB.Execute('INSERT INTO TEST (TEST) VALUES ("TEST");');
  DB.Free;
end;
Ein "INSERT" mit Binding
Delphi-Quellcode:
var DB: TSQLiteDatabase;
    Command: TSQLiteCommand;
begin
  DB := TSQLiteDatabase.Create('test.db');
  Command := DB.Command('INSERT INTO TEST (TEST) VALUES (?);');
  Command.Binding[1].AsString := 'Test';
  Command.Execute;
  Command.Free;
  DB.Free;
end.
Auflisten der Daten einer Tabelle
Delphi-Quellcode:
var DB: TSQLiteDatabase;
    Query: TSQLiteQuery;
begin
  DB := TSQLiteDatabase.Create('test.db');
  Query := DB.Query('SELECT * FROM TEST');
  while Query.Next do
    begin
      WriteLn(Query[0].AsString);
    end;
  Query.Free;
  DB.Free;
end.
Beispiel mit vielen "INSERT"s
Delphi-Quellcode:
var DB: TSQLiteDatabase;
    Command: TSQLiteCommand;
begin
  DB := TSQLiteDatabase.Create('test.db');
  DB.Execute('BEGIN TRANSACTION'); // Damit nicht so viele Festplattenzugriffe gemacht werden müssen
  Command := DB.Command('INSERT INTO TEST (TEST) VALUES (?);');
  For I := 1 to 200 do
    begin
      Command.Reset;
      Command.Binding[1].AsString := 'Test'+IntToStr(I);
      Command.Execute;
    end;
  Command.Free;
  DB.Execute('END TRANSACTION');
  DB.Free;
end.
Getestet mit...
Delphi 2009 größtenteils, da ich es im Moment in einem Projekt einsetze
Delphi 7 rudimentär

SVN: svn://delphidev.net/public/SQLiteDatabase

Wäre klasse, wenn sich das wer von euch mal ansehen oder sogar ein bisschen testen könnte
Angehängte Dateien
Dateityp: zip sqlitedatabase_573.zip (48,1 KB, 362x aufgerufen)
 
dGeek
 
#21
  Alt 21. Jul 2016, 16:02
Um ehrlich zu sein verstehe ich nur Bahnhof
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#22
  Alt 21. Jul 2016, 16:09
So etwas z.B.
Delphi-Quellcode:
unit Unit2;

interface

uses
  System.IniFiles;

type
  TEinstellungen = class abstract
  private
    procedure SetFoo( const Value: string );
    function GetFoo: string;
  protected
    function GetValue( const Key: string ): string; virtual; abstract;
    procedure SetValue( const Key, Value: string ); virtual; abstract;
  public
    property Foo: string read GetFoo write SetFoo;
  end;

  TIniEinstellungen = class( TEinstellungen )
  private
    FIniFile: TMemIniFile;
  protected
    function GetValue( const Key: string ): string; override;
    procedure SetValue( const Key: string; const Value: string ); override;
  public
    constructor Create( const IniFileName: string );
    destructor Destroy; override;
  end;

implementation

{ TEinstellungen }

function TEinstellungen.GetFoo: string;
begin
  Result := GetValue( 'foo' );
end;

procedure TEinstellungen.SetFoo( const Value: string );
begin
  SetValue( 'foo', Value );
end;

{ TIniEinstellungen }

constructor TIniEinstellungen.Create( const IniFileName: string );
begin
  inherited Create;
  FIniFile := TMemIniFile.Create( IniFileName );
end;

destructor TIniEinstellungen.Destroy;
begin
  FIniFile.Free;
  inherited;
end;

function TIniEinstellungen.GetValue( const Key: string ): string;
begin
  Result := FIniFile.ReadString( 'Default', Key, '' );
end;

procedure TIniEinstellungen.SetValue( const Key, Value: string );
begin
  FIniFile.WriteString( 'Default', Key, Value );
  FIniFile.UpdateFile;
end;

end.
  Mit Zitat antworten Zitat
dGeek
 
#23
  Alt 21. Jul 2016, 16:19
Ok nun hab ich es kapiert!

Was in meinem Fall aber absolut schrecklich wäre ist folgendes:
Delphi-Quellcode:
{ TEinstellungen }

function TEinstellungen.GetFoo: string;
begin
  Result := GetValue( 'foo' );
end;

procedure TEinstellungen.SetFoo( const Value: string );
begin
  SetValue( 'foo', Value );
end;
Dafür habe ich zu viele Werte.

Oder ich kapier den Sinn nicht.

Ich glaube ich wechsle einfach zu TMemIniFile und gut ist. Klasse hin oder her, alles zu ver-komplizieren ist nicht mein Ding.
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#24
  Alt 10. Nov 2016, 19:36
Gibts hier was aktuelleres/neues ?

Ansonsten würd ich die Klasse evtl. selbst um ein/zwei Features erweitern
Uwe
  Mit Zitat antworten Zitat
Aviator

 
Delphi 10.3 Rio
 
#25
  Alt 10. Nov 2016, 21:04
Gibts hier was aktuelleres/neues ?

Ansonsten würd ich die Klasse evtl. selbst um ein/zwei Features erweitern
Also ich hatte damals als ich auch auf der Suche war nichts gefunden. Ist jetzt etwa 1 Jahr her. Habe mir dann auch diverse andere Funktionen eingebaut die in dem Wrapper nicht drin waren. Bzw. habe ich nur die Funktionsdefinitionen davon verwendet und mir einen eigenen Wrapper geschrieben. Den kann und möchte ich hier aber leider nicht veröffentlichen.
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#26
  Alt 10. Nov 2016, 21:58
hm...wenn ich mir die Source der Klassen angugg ist das schon ein ziemlicher Verhau.

Aber im Moment reicht mir eine kleine Erweiterung aus.

Evtl. werd ich mal auf Basis des eigentlich Wrappers mal noch was Übersichtliches Bauen
Uwe
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#27
  Alt 11. Nov 2016, 06:04
Für Interresenten:

unter https://github.com/stijnsanders/TSQLite gibt es eine etwas aktuellere DLL-Umsetzung (der dazugehörige Wrapper ist.....sehr einfach )
Uwe
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz