AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hilfe zu Synopse SQLite3
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe zu Synopse SQLite3

Ein Thema von AnCorr · begonnen am 15. Mai 2010 · letzter Beitrag vom 17. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
AnCorr

Registriert seit: 15. Mär 2010
45 Beiträge
 
#1

Hilfe zu Synopse SQLite3

  Alt 15. Mai 2010, 23:52
Datenbank: SQLite3 • Version: 3.6 • Zugriff über: Synopse SQLite3 Framework
Hallo zusammen

Leider hat mir die Suchfunktion zu 'Synopse SQLite3' keine Treffer angezeigt. Deshalb wende ich mich jetzt an euch.

Das Framework scheint ja sehr interessant zu sein, leider gibt es keine Dokumentation dazu und die Beispiele sind alles andere als 'brauchbar'. Der Blog dazu gibt auch gar nichts her. Das Framework ist fuer mich deshalb interessant, da man damit ohne die sonst verwendete externe sqlite3.dll auskommt.

Worum geht's?
Ich habe eine kleine SQLite3 Datenbank mit einigen Tabellen. Nun moechte ich aus einer der Tabellen bestimmte Datensaetze auslesen.
Der SQL Befehl wuerde dann z. B. so lauten: "Select * From Mp3Record Where Genre = 'Asian Music'"
Als Ergebnis muesste dann ein oder mehrere Records zurueckkommen (sofern entsprechende Datensaetze gefunden werden).

Kennt jemand von euch das Framework? Weiss jemand, wie ich das realisieren kann?

Vom Autor des Frameworks bekam ich folgende Antwort(leider etwas abwertent auf meine Anfrage hin):

Zitat:
For such low level SQLite3 work, take a look at TSQLRequest.Execute methods, and see how to loop through all rows.

Delphi-Quellcode:
var
  R: TSQLRequest;
  value: Int64;
  res: integer;
begin
  try
    R.Prepare(aDB,'Select * From Mp3Table Where Genre=''Asian Music'';'); // note the '' double quotes inside the ' string '
    repeat
      res := R.Step;
      if res=SQLITE_ROW then
      begin // we got some data
        value := sqlite3_column_int64(R.Request,0);
        // use other low level functions to get your data
      end;
    until res=SQLITE_DONE;
  finally
    R.Close; // always release statement
  end;
end;
With the framework, you should better create a TSQLRecord descendant class with the appropriate fields corresponding to your database, then use a Client/Server approach as shown in the supplied samples.
Das grosse Problem fuer mich hier ist die Variable 'aDB'. Laut Funktion in der Datei SQLite3.pas muss 'aDB' vom Typ TSQLHandle sein.
Leider habe ich damit noch nie etwas zu tun gehabt. Was ist denn ein TSQLHandle?
In der Datei SQLite3.pas ist der Typ so deklariert:

/// internaly store the SQLite3 database handle
TSQLHandle = type cardinal;

Wie definiere ich in meinem Programm 'aDB' (oder auch einen anderen Namen) so, dass sie als TSQLHandle verwendet wird?
Wo stelle ich die Beziehung zu meiner Datenbankdatei her?


Waere schoen, wenn mir jemand helfen koennte.
Danke schon im voraus!

Gruss
AnCorr
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 00:45
Beim Herstellen der Verbindung zur Datenbank, wirst du wohl irgendwo ein Handle zurückbekommen. Und ich denke mal, das wird dann an dieser Stelle gebraucht.

Aber wo ist die Antwort abwertend? Du hast sogar kompletten Quellcode für dein Problem bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#3

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 02:41
Das DB-Handle referenziert deine Datenbank-"Verbindung".
Einfach global (unsauber aber schnell) eine Variable deklarieren vom Typ TSQLHandle und dann der Funktion uebergeben.
Das Handle wird wahrscheinlich dann fuer weitere Operationen auf der Datenbank oder zumindest zum schliessen der Verbindung benoetigt.
(allgemeine Antwort, ich hab kein Wissen zu SQLLite oder diesem Framework)
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#4

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 09:24
Da ist nichts abwertend: Das 'low level' bezieht sich auf die untere Zugriffsebene ohne Komponenten und ist hier als sachliche Codeeinordnung zu sehen . . .
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
AnCorr

Registriert seit: 15. Mär 2010
45 Beiträge
 
#5

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 11:10
Hallo

Erst mal Danke fuer die schnellen Antworten.
O.k., wahrscheinlich habe ich das 'For such low level' etwas zu persoenlich genommen.
Ich assoziierte das 'such low level' mit 'solch einfachen' - sprich, wie kannst Du nur solche Fragen stellen.

Nun aber zum Problem.
Ich weiss noch immer nicht, wie ich die Verbindung von Datenbank zum Handle herstelle.

Wenn ich mit dem Framework eine Datenbank erstelle, dann geht das z. B. folgendermassen:
Delphi-Quellcode:
Database: TSQLRest; // Database object Synopse SQLite3
Mp3Model: TSQLModel; // 'Model' for database
Mp3Model := CreateMp3Model;
Database := TSQLRestServerDB.Create(Mp3Model, MediaPath);
Das 'Model' ist eine Unit, welches einen Record und ein paar Methoden zur Verfuegung stellt.
'MediaPath' ist der Pfad inkl. Dateiname zur Datenbank. Z. B.: G:\Data\Media\Media.db3

In der Funktion
  R.Prepare(aDB,'Select * From Mp3Table Where Genre=''Asian Music'';'); kann ich 'aDB' nicht durch Database ersetzen, da hier ja das Handle erwartet wird. Ich hatte auch schon versucht den Aufruf so zu gestallten:
  R.Prepare([Database], 'Select * From Mp3Table Where Genre=''Asian Music'';'); Aber das hat natuerlich auch nicht funktioniert.

Vielleicht findet sich ja noch jemand, der mir hier weiter helfen kann.

Gruss
AnCorr
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 15:41
Zitat von AnCorr:
In der Funktion
  R.Prepare(aDB,'Select * From Mp3Table Where Genre=''Asian Music'';'); kann ich 'aDB' nicht durch Database ersetzen, da hier ja das Handle erwartet wird. Ich hatte auch schon versucht den Aufruf so zu gestallten:
  R.Prepare([Database], 'Select * From Mp3Table Where Genre=''Asian Music'';');
Du hast dir deine Frage doch schon selbst beantwortet - du brauchst einfach nur eine Variable vom Typ TSQLHandle, ist doch nicht schwer ^^

Delphi-Quellcode:
var
  DatabaseHandle: TSQLHandle; // global
...
begin
  R.Prepare(DatabaseHandle, 'Select * From Mp3Table Where Genre=''Asian Music'';');
Und immer wenn nach einem TSQLHandle gefragt wird, gibst du DatabaseHandle rein.
Ein Handle ist nix weiter als eine Referenz oder ein Pointer. Du musst da nix selbst reinschreiben, da uebernimmt das Framework fuer dich.
Es muss diesen Wert nur wahrscheinlich nach aussen geben, damit intern nicht irgendwas komisch gespeichert werden muss.
Manuel
  Mit Zitat antworten Zitat
AnCorr

Registriert seit: 15. Mär 2010
45 Beiträge
 
#7

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 17:34
Hallo H4ndy

Na ja, ganz so einfach scheint es wohl nicht zu sein.
Ich habe nun ein TSQLHandle deklariert wie Du es angegeben hast.
Danach habe ich der Funktion 'Prepare' das Handle uebergeben.

Ich erhalte dann folgenden Laufzeitfehler:
Invalid SQLite3 database handle (14)

Ich frage mich immer noch, wie die 'Beziehung' (Assoziation) vom Handle auf die eigentliche Datenbank erfolgen soll. Letztendlich muss doch irgendwo klar sein, auf welche Datenbank die verschiedenen Funktionen zugreifen muessen.

Gruss
AnCorr
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 17:38
Das Handle sollte bei der Verbindung zur DB erzeugt und zurückgegeben werden
Markus Kinzler
  Mit Zitat antworten Zitat
AnCorr

Registriert seit: 15. Mär 2010
45 Beiträge
 
#9

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 18:11
Hallo mkinzler

Zum Erstellen der Datenbank lautet der Befehl:
Database := TSQLRestServerDB.Create(Mp3Model, MediaPath); Da wird leider keine Handle zurueckgegeben.

Ich habe mir die komplette SQLite3.pas durchgesehen. Es gibt dort auch keine Funktion (ausser 'function TSQLRequest.FieldValue(Col: integer): TSQLHandle;'), welche ein TSQLHandle zurueckgibt.
Es gibt auch keine 'Bind' oder 'Open' Funktion, die mich hier weiterbringen wuerde.

Gruss
AnCorr
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Hilfe zu Synopse SQLite3

  Alt 16. Mai 2010, 21:38
Zitat von AnCorr:
Hallo mkinzler

Zum Erstellen der Datenbank lautet der Befehl:
Database := TSQLRestServerDB.Create(Mp3Model, MediaPath); Da wird leider keine Handle zurueckgegeben.
Und was macht dich so sicher, dass der Rückgabewert des Konstruktors nicht das benötigte Handle ist? Hast du mal versucht die Variable Database als Handle einzusetzen? Mach das doch einfach mal.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:53 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