AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi XE6 und SQLite

Ein Thema von schand99 · begonnen am 4. Feb 2015 · letzter Beitrag vom 5. Feb 2015
Antwort Antwort
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#1

Delphi XE6 und SQLite

  Alt 4. Feb 2015, 09:55
Datenbank: SQLite • Version: 3 • Zugriff über: TSQLConnection
Hallo,

bin noch ziemlich neu in Delphi und habe noch einige Schwierigkeiten mit Sachen die vielleicht für andere ganz einfach erscheinen. Zur Zeit versuche ich eine SQLite Datenbank zu erstellen (klappt), Daten einzutragen (klappt) und die Daten auszulesen (klappt nicht). In einem anderen Delphi-Forum habe ich ein kleines Tutorial über den Umgang mit SQLite gefunden. Das Tutorial ist für XE3, da nicht alles funktioniert wie beschrieben vermute ich dass es da doch ein paar kleine Unterschiede zwischen XE3 und XE6 gibt. Die vielen Versionen der Entwicklungsumgebung sind generell ein kleines Problem. Embarcadero wirft meiner Meinung nach viel zu oft neue Versionen auf den Markt.
Natürlich benutze ich auch die Delphi-Hilfe und Google in der Hoffnung irgendwo auf einen nützlichen Hinweis zu finden..

Hier ein kurzer Quellcode der mir nun schon ein paar Tage Kopfzerbrechen bereitet:

Delphi-Quellcode:
 Var
 SQLBefehl, Rg:String;
 DatenSatz:TDataSet;
 N: Integer;
begin
 Try
   SQLConnection.Connected:=False;
   SQLConnection.Params.Values['Database']:='C:\CD-Copy\SQLite.db';
   SQLCOnnection.Params.Values['FailIfMissing']:='False';
   SQLConnection.Connected:=True;
   SQLBefehl:='CREATE TABLE Fahrzeuge (MeinID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Marke VARCHAR(100), Modell VARCHAR(100));';
   SQLConnection.ExecuteDirect(SQLBefehl);
   SQLBefehl:='INSERT INTO Fahrzeuge (MeinID, Marke, Modell) VALUES (NULL, "Fiat", "Punto");';
   SQLConnection.ExecuteDirect(SQLBefehl);
   SQLBefehl:='SELECT * FROM Fahrzeuge;';
   SQLConnection.Execute(SQLBefehl,NIL, DatenSatz);
   DatenSatz.First;
   while NOT Datensatz.Bof do
   Begin
     Rg:='';
     for N := 0 to DatenSatz.FieldCount-1 do
       Rg:=Rg+' '+DatenSatz.Fields[N].AsString;
     ShowMessage(Rg);
     DatenSatz.Next;
   End;
 Except
   On E: EDataBaseError Do Showmessage(E.Message);
 End;
Läuft übrigens fehlerfrei durch, nur dass keine Daten aus der Datenbank gelesen werden stört ungeheuerlich

Bin für alle Tipps welche mir helfen könnten eine Messagebox mit Inhalten aus der Datenbank zu erzeugen dankbar

Geändert von schand99 ( 4. Feb 2015 um 10:03 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Delphi XE6 und SQLite

  Alt 4. Feb 2015, 10:02
.. sollte das nicht eof heißen?

Delphi-Quellcode:
 while NOT Datensatz.eof{Bof} do
   Begin
     Rg:='';
     for N := 0 to DatenSatz.FieldCount-1 do
       Rg:=Rg+' '+DatenSatz.Fields[N].AsString;
     ShowMessage(Rg);
     DatenSatz.Next;
   End;
oder
Delphi-Quellcode:
   repeat
     Rg:='';
     for N := 0 to DatenSatz.FieldCount-1 do
       Rg:=Rg+' '+DatenSatz.Fields[N].AsString;
     ShowMessage(Rg);
     DatenSatz.Next;
   until Datensatz.eof
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Delphi XE6 und SQLite

  Alt 4. Feb 2015, 10:15
Und wie schon erwähnt, kannst du das try except ersatzlos streichen.

Wenn eine Exception auftritt wird von ganz alleine (macht TApplication ) eine MessageBox mit der Exception angezeigt. Weniger machen und mehr bekommen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: Delphi XE6 und SQLite

  Alt 4. Feb 2015, 10:56
Der erste Tipp hat mich über einen Umweg auf die Lösung für das Problem gebracht.
Im Unterschied zu dem uralten VB6 steht der Datensatzzeiger in Delphi Anwendungen auch bei SQL Abfragen welche Daten enthalten erstmal immer auf BOF, in VB6 jedoch auf dem ersten Datensatz welcher Daten enthält
Wie gewohnt habe ich zur Überprüfung ob Daten vorhanden sind abgefragt ob BOF = True ist. Funktioniert in Delphi nicht so wie erwartet. Nun frage ich EOF ab und alles läuft. Wenn eine SQL Abfrage keine Datensätze liefert dann sind ja BOF und EOF True.

Die Try .. except finde ich hilfreich. Was mache ich da falsch?

Wie bereits gesagt bin ich in der Delphi Umgebung noch blutiger Anfänger...
  Mit Zitat antworten Zitat
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: Delphi XE6 und SQLite

  Alt 4. Feb 2015, 11:11
Und wie schon erwähnt, kannst du das try except ersatzlos streichen.

Wenn eine Exception auftritt wird von ganz alleine (macht TApplication ) eine MessageBox mit der Exception angezeigt. Weniger machen und mehr bekommen.
Glaube nicht dass dies auch für Android-Geräte zutrifft. Ohne Try.. Except schmiert die App kommentarlos ab.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Delphi XE6 und SQLite

  Alt 4. Feb 2015, 11:44
Und wie schon erwähnt, kannst du das try except ersatzlos streichen.

Wenn eine Exception auftritt wird von ganz alleine (macht TApplication ) eine MessageBox mit der Exception angezeigt. Weniger machen und mehr bekommen.
Glaube nicht dass dies auch für Android-Geräte zutrifft. Ohne Try.. Except schmiert die App kommentarlos ab.
Generell bei jeder nicht gefangenen Exception?

Kann ich mit XE7 so nicht nachvollziehen und wäre dann ein Bug in XE6. Aber der richtige Ort um dort helfend einzugreifen ist TApplication.OnException . Dort kannst du deine ungefangenen Exceptions behandeln wie du möchtest.
Anzeigen, Loggen, ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Delphi XE6 und SQLite

  Alt 5. Feb 2015, 07:24
Ein Try-Except-Skelett sehe ich auch immer wieder. Es schadet nichts und sagt aus, SOLANGE DER EXCEPT-TEIL NICHT LEER IST. Er besagt ja, das man eine Fehlerbehandlung noch einbauen möchte. Hier wäre ein TODO allerdings angebracht.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 19:32 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