Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Einfache Datenbank mit libSQL (https://www.delphipraxis.net/106180-einfache-datenbank-mit-libsql.html)

holle 6. Jan 2008 21:51

Datenbank: SQLite • Version: 3 • Zugriff über: libSQL

Einfache Datenbank mit libSQL
 
Ich habe mir die Datenbankkomponenten libSQL runtergeladen um damit auf eine SQLite Datenbank zuzugreifen. Leider bekomme ich es einfach nicht auf die Reihe, einen SQL-Befehl an die Datenbank zu senden. Kann mir jemand ein kleines Beispielprogramm geben, damit ich den Umgang mit Datenbanken, Delphi, libSQL und SQLite verstehe?
Ich habe wirklich schon die Suchfunktion gequält, Google bemüht und versuch mir das Beispielprogramm anzusehen. Es hat aber nicht gereicht. Ist libSQL so kompliziert? Sollte ich vielleicht eine andere Komponente benutzen?

Danke,
Marcel

holle 7. Jan 2008 16:20

Re: Einfache Datenbank mit libSQL
 
Wenn sich keiner mit libSQL auskennt nutze ich auch gerne andere Komponenten. Ich brauche nur ein kleines Beispiel als Einstig, an dem ich mich dann orientieren kann.

Danke, Marcel

haentschman 7. Jan 2008 16:30

Re: Einfache Datenbank mit libSQL
 
...Hallo

mit libSQl kann ich Dir leider auch nicht helfen... :(

...wenns um den Einstieg geht... Firebird Tutorial... habe den Link nicht parat... findest du aber über die Suche.
... in Zusammenhang mit Firebird habe ich mit den Zeos Komponenten gearbeitet.
... SQL Tutorial SQL-Syntax

:!: zum Thema welche Datenbank, gibt es hier genug Antworten und Vorschläge Datenbank für Anfänger
:hi:

OG Karotte 7. Jan 2008 17:24

Re: Einfache Datenbank mit libSQL
 
Mit libsql kenne ich mich leider auch nicht aus.
Ich greife über ZEOS auf SQLite zu. Funktioniert ausgezeichnet :thumb:

[Edit] UUPS, D7 PE übersehen :wall: [/Edit]

shmia 7. Jan 2008 17:31

Re: Einfache Datenbank mit libSQL
 
D7 Personal hat IMHO doch keine Unterstützung für TDataset und alle davon abgeleiteten Komponenten !!
Damit wird das Arbeiten mit Datenbanken zu einer ganz üblen Quälerei.
Wenn in deiner Komponenten Palette also "Datensteuerung" und "Datenzugriff" nicht vorhanden sind, kann man die Sache wirklich vergessen.

Alien426 7. Jan 2008 18:35

Re: Einfache Datenbank mit libSQL
 
Auch ich kenne libSQL nicht. Ich benutze den Simple SQLite Wrapper. Und man bekommt genau das. Vielleicht ist er für bestimmte Vorhaben weniger gut geeignet, aber für mich ist er im Moment genau richtig.

EDIT:
Dein Scheitern könnte unter Umständen mit dem neuen Release von SQLite zusammenhängen. Siehe Update vom August 2007 beim Wrapper. libSQL wurde ja zuletzt Mitte 2006 geupda..ändert.

holle 7. Jan 2008 19:37

Re: Einfache Datenbank mit libSQL
 
ups, mein fehler. habe damals nicht so recht auf meiner delphiversion geachtet. ich habe die delphi 7 enterprise version, die natürlich datenbanken unterstützt.

ich habe mich jetzt durch unendlich viele seiten geklickt und bekomme es einfach nicht auf die reihe mit delphi eine datenbank zu erstellen, auf die ich sql-befehle anwenden kann. entweder sind die tutorials zu lückenhaft oder zu unverständlich. jedenfalls kriege ich es einfach nicht hin.

zuletzt habe ich mich mit zeos und firebird embedded auseinandergesetzt. klingt ganz gut, aber laufen will es trotzdem nicht :/ kann mir keiner helfen?

marcel

OG Karotte 7. Jan 2008 20:07

Re: Einfache Datenbank mit libSQL
 
Also wie gesagt ich arbeite schon länger mit ZEOS und SQLite und alles ohne Probs.

Wo hast Du denn das Problem???

Verbindung mit SQLite???

Erstellen einer DB???

oder was :gruebel:

Kopiere die sqlite.dll z.B. in deinen Projektpfad (z.B. D:\Meine Projekte\Mein DBProjekt\)
Platziere die ZEOS-Connection Komponente auf eine Form.


Delphi-Quellcode:
procedure Tfrm_Main.Create;
var
  sql_tmp: TZQuery;
begin
    with MyCon do begin // ZEOS Connection
      Protocol := 'sqlite-3';
      Database := 'MyDB.db'; // evtl. mit Pfadangaben; DB wird erstellt, wenn nicht vorhanden
      Connect; // verbinden
    end;
   
    // Erstellen von Tabellen
    sql_tmp := TZQuery.Create(self);
    with sql_tmp do begin
      Connection := MyCon;
      // Tabelle 1
      SQL.Add('CREATE TABLE [tblirgendwas] (');
      SQL.Add('[ti_ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,');
      SQL.Add('[ti_Text] VARCHAR(255) NULL,');
      SQL.Add(');');
      // Tabelle 2
      SQL.Add('CREATE TABLE [tblwasanderes] (');
      SQL.Add('[tw_ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,');
      SQL.Add('[tw_Title] VARCHAR(255) NULL,');
      SQL.Add('[tw_Description] TEXT NOT NULL,');
      SQL.Add('[tw_Category] INTEGER NULL,');
      SQL.Add('[tw_Keyword] VARCHAR(255) NULL');
      SQL.Add(');');
      // Ausführen
      ExecSQL;
    end;
    FreeAndNil(sql_tmp);
end;
Hoffe das hilft Dir ein wenig...

[edit=Phoenix]Tippfehler im Auftrag von OP korrigiert. Mfg, Phoenix[/edit]

Ghostwalker 8. Jan 2008 06:21

Re: Einfache Datenbank mit libSQL
 
Alternativ zu ZEOS gibts auch noch www.aducom.com/SQLite. Diese sind genau auf SQLite3 abgestimmt und funktionieren wunderbar :)

holle 8. Jan 2008 19:00

Re: Einfache Datenbank mit libSQL
 
@ Ghostwalker
du meintest bestimmt die hier: http://aducom.com/cen/download.php?view.1
ich schaue mir die komponenten mal an...


@ OG Karotte
danke, das ist doch schon mal ein anfang. habe ein zconnection und ein zquery hinzugefügt und den quelltext für meine bedürfnisse geändert.
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  with ZConnection do begin
    Protocol := 'sqlite-3';
    Database := 'database.db';
    Connect;
  end;

  with ZQuery do begin
    SQL.Add('CREATE TABLE [tblTracks] (');
    SQL.Add('[ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,');
    SQL.Add('[Artist] VARCHAR(255) NULL,');
    SQL.Add('[Album] VARCHAR(255) NULL,');
    SQL.Add('[Track] INTEGER NULL,');
    SQL.Add('[Title] VARCHAR(255) NULL,');
    SQL.Add(');');
    ExecSQL;
  end;
end;
beim testen bekomme ich aber leider eine fehlermeldung:
Code:
quelldatei nicht gefunden: ZDbcSqLiteUtils.pas
ist die zeos-komponente nicht richtig installiert, oder woran liegt das?

marcel

OG Karotte 8. Jan 2008 19:13

Re: Einfache Datenbank mit libSQL
 
Hast Du die Pfade zu den Zeos-Quellcode-Dateien unter Tools - Optionen - Bibliothek (also Bibliothek bzw. Suchpfad) eingetragen?

holle 8. Jan 2008 19:28

Re: Einfache Datenbank mit libSQL
 
ja das hat gefehlt. jetzt habe ich aber eine neue fehlermeldung:
Code:
Im Projekt mMP3.exe ist eine Execption der Klasse EZSQLException aufgetreten. Meldung: 'SQL Error: near ")": sytax error'
Was ist denn da jetzt schon wieder falsch? ich habe mir mal die erstellte datenbank mit einem programm angesehen, die ist in ordnung.

marcel

OG Karotte 8. Jan 2008 19:33

Re: Einfache Datenbank mit libSQL
 
Wo genau tritt denn der Fehler auf???

Beim Erstellen der Tabellen oder kommt da später noch irgend etwas???

haentschman 8. Jan 2008 19:36

Re: Einfache Datenbank mit libSQL
 
...laß mal die [ ] weg...

holle 8. Jan 2008 19:42

Re: Einfache Datenbank mit libSQL
 
ohne [] entsteht der gleiche fehler, es wird aber keine ordentliche datenbank mehr erstellt. die entstandene datei kann ich nicht öffnen.

marcel

OG Karotte 8. Jan 2008 19:48

Re: Einfache Datenbank mit libSQL
 
Zitat:

Zitat von haentschman
...laß mal die [ ] weg...

warum ??? Die gehören schon dazu.

@holle: Ist der von Dir gepostete Code auch der der den Fehler verursacht, oder kommt der Fehler evtl. an ein anderen Stelle???

holle 8. Jan 2008 19:52

Re: Einfache Datenbank mit libSQL
 
hier die komplette unit. bis zum showMessage(''); kommt er gar nicht.
Delphi-Quellcode:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZConnection, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset,
  ZAbstractTable;

type
  TfrmMain = class(TForm)
    ZConnection: TZConnection;
    ZQuery: TZQuery;
    ZTable: TZTable;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  with ZConnection do begin
    Protocol := 'sqlite-3';
    Database := 'database.db';
    Connect;
  end;

  with ZQuery do begin
    SQL.Add('CREATE TABLE [tblTracks] (');
    SQL.Add('[ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,');
    SQL.Add('[Artist] VARCHAR(255) NULL,');
    SQL.Add('[Album] VARCHAR(255) NULL,');
    SQL.Add('[Track] INTEGER NULL,');
    SQL.Add('[Title] VARCHAR(255) NULL,');
    SQL.Add(');');
    ExecSQL;
  end;

  showMessage('') ;

  with ZTable do begin
    TableName := 'tblTracks';
    Active := true;
  end;
end;

end.
marcel

Dax 8. Jan 2008 19:56

Re: Einfache Datenbank mit libSQL
 
Kein Wunder, dein SQL ist
SQL-Code:
CREATE TABLE [tblTracks] (
  [ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  [Artist] VARCHAR(255) NULL,
  [Album] VARCHAR(255) NULL,
  [Track] INTEGER NULL,
  [Title] VARCHAR(255) NULL, --oh schau mal, ein satzzeichen
);

OG Karotte 8. Jan 2008 20:00

Re: Einfache Datenbank mit libSQL
 
:wall: :wall: :wall: AAARRRGGGHHH, 37 mal den Code gelesen und 37 mal dieses blöde Komma übersehen :wall: :wall: :wall:

[Edit] und das Ding ist sogar in meinem Beispiel mit drin :wall: :duck: :wall: (gibt's hier kein "Ich nehm' mir'n Strick und erschiess mich"- Smiley [/Edit]

[Edit] Fehler (Komma) im Beitrag #8 wurde entfernt (Danke Phoenix)[/Edit]

holle 8. Jan 2008 20:01

Re: Einfache Datenbank mit libSQL
 
verdammter copy and waste quelltext :wall: :wall: :wall:
DANKE

holle 8. Jan 2008 20:14

Re: Einfache Datenbank mit libSQL
 
und wofür sind jetzt die []? wenn ich datensätze hinzufügen möchte wie schreib ich das dann? so, oder mit []?
Code:
INSERT INTO tblTracks(ID, Artist, Album, Track, Title) VALUES (NULL, 'Die Ärzte', 'Jazz ist anders', 9, 'Junge');
Marcel

DeddyH 8. Jan 2008 20:55

Re: Einfache Datenbank mit libSQL
 
Mach das besser mit Parametern:
Delphi-Quellcode:
ZQuery.SQL := 'INSERT INTO tblTracks(Artist, Album, Track, Title) VALUES (:artist, :album, :track, :title)';
ZQuery.ParamByName('artist').AsString := 'Die Ärzte';
ZQuery.ParamByName('album').AsString := 'Jazz ist anders';
ZQuery.ParamByName('track').AsInteger := 9;
ZQuery.ParamByName('title').AsString := 'Junge';
ZQuery.ExecSQL;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz