SQLite3 update

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

SQLite3 update

Beitrag von vazili_Zaitzef »

Hallo,

Habe ein kleines Problem und verstehe nicht warum. :!:
Wenn ich den Befehl Datenbank update benutze geht dieser Befehl nur wenn es eine Zahl ist. Sobald Buchstaben dabei kommen, tritt immer ein Fehler auf. :(

DataModule1.SQLQuery1.SQL.Text:='UPDATE ' + Tabellenname + ' SET ' + Header + '=' + Header + ', ' + Header + '=' + Zuaenderndendereintrag + ' WHERE ID=' Zeilennumer;

Kann mir bitte jemand sagen, was ich hier falsch mache?

Danke und allen einen schönen Start in die Woche :D

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: SQLite3 update

Beitrag von Michl »

Keine Ahnung, wie deine Deklaration aussieht. Empfehlen würde ich aber Parameter zu verwenden z.B.:

Code: Alles auswählen

  DataModule1.SQLQuery1.SQL.Text := 'UPDATE ' + Tabellenname + ' SET ' + Header + '= :aHeader WHERE ID = :aID;';
  DataModule1.SQLQuery1.ParamByName('aHeader').AsString := 'Neuer String';
  DataModule1.SQLQuery1.ParamByName('aID').AsInteger := Zeilennumer; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: SQLite3 update

Beitrag von TT73GP7 »

vazili_Zaitzef hat geschrieben:Hallo,

Habe ein kleines Problem und verstehe nicht warum. :!:
Wenn ich den Befehl Datenbank update benutze geht dieser Befehl nur wenn es eine Zahl ist. Sobald Buchstaben dabei kommen, tritt immer ein Fehler auf. :(

DataModule1.SQLQuery1.SQL.Text:='UPDATE ' + Tabellenname + ' SET ' + Header + '=' + Header + ', ' + Header + '=' + Zuaenderndendereintrag + ' WHERE ID=' Zeilennumer;

Kann mir bitte jemand sagen, was ich hier falsch mache?

Danke und allen einen schönen Start in die Woche :D


joar weil weil Buchstaben in "" gesetzt werden müssen
also so

DataModule1.SQLQuery1.SQL.Text:='UPDATE ' + Tabellenname + ' SET ' + Header + '=' + Header + ', ' + Header + '= " ' + Zuaenderndendereintrag + ' " WHERE ID=' Zeilennumer;

aber ich würde das so machen wie Michl geschrieben hat

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: SQLite3 update

Beitrag von vazili_Zaitzef »

Hallo,
allen einen herzlichen Dank für die Schnelle Antwort. :D :D :D
Das mit den " hat geholfen und arbeitet nun so wie es sein soll :)

Warum würdet Ihr das mit den 3 Zeilen Programmieren?
Für mich ist die Wahl auf eine Zeile gefallen, um Programmcode zu sparen, was mir später sicher leichter fallen wird den Code wieder zu verstehen. Laut meinen Recherchen macht beides das gleiche. Stimmt das etwa nicht :?:

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: SQLite3 update

Beitrag von Michl »

vazili_Zaitzef hat geschrieben:Warum würdet Ihr das mit den 3 Zeilen Programmieren?
Für mich ist die Wahl auf eine Zeile gefallen, um Programmcode zu sparen, was mir später sicher leichter fallen wird den Code wieder zu verstehen. Laut meinen Recherchen macht beides das gleiche. Stimmt das etwa nicht :?:
Nachdem mich mse mal darauf hingewiesen hat, achte ich sehr genau darauf, Paramter zu verwenden: https://de.wikipedia.org/wiki/SQL-Injection#Gegenma.C3.9Fnahmen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6199
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQLite3 update

Beitrag von af0815 »

Mit Parameter hat der SQL-Server die Möglichkeit die Ausführung zu Cachen und zu Prüfen, das bringt Sicherheit und auch Geschwindigkeit. Ist vielleicht bei Dir momentan nicht so wichtig, wenn mans dauernd macht, ist es Gewohnheit. Ausserdem ist man nicht so vom funktionieren der aktuellen Stringumwandlungen abhängig. Beispiel Zahlen und Umlaute. Wenn man die plötzlich verarbeiten will/muß, so wünsche ich dir bei den Stringfunktion viel Spaß (Leidvolle Erfahrung).

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: SQLite3 update

Beitrag von vazili_Zaitzef »

Ja Prüfen ist wichtig.
Dann muss ich wohl noch mal ran und von vorne beginnen. :)

Auf zum zweiten Versuch :)

Danke für Eure Hilfe!!!

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: SQLite3 update

Beitrag von vazili_Zaitzef »

Hi,

ich habe mal wieder :!: noch eine Frage zur SQLite Datenbank. Wie kann ich auslesen, mit welchem Datentyp Spalte in der Datenbank erstellt wurde :?:

Beispiel:
Eine Tabelle wurde erstellt und die Spalte "Eintrag" ist mit dem Datentyp VARCHAR erstellt worden.
Wie kann ich später herausbekommen, das der Eintrag VARCHAR dafür benutzt wurde :?:

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: SQLite3 update

Beitrag von mschnell »

Ich habe eine Off-Topic Frage zu SQLite3.

Ich habe gehört diese Version soll (bei gewissen Aktionen) massiv (10 mal) schneller sein als die vorige Version.

Könnt Ihr das bestätigen ?

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6199
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQLite3 update

Beitrag von af0815 »

Ich kann dir nur bestätigen, das mit der richtigen Wahl von einigen Einstellungsmöglichkeiten verdammt viel Speed herausholen kann bei der Version 3. Dazu gab es hier mal einen Thread über JSON Daten und bei den Versuchen ist mir das aufgefallen.

Edit:
af0815 hat geschrieben:Meine schnellste Version 1000 Datensätze in ca. 5.5 sec

Folgendes mach SQLite schnell. Sollte aber nach dem Import wieder einschalten werden. Damit wartet SQLite nicht aus die Fertigmeldung des Betriebssystems, sondern schreibt was da Zeug hergibt. Wenn es zu einem Crash kommt, könnten die Daten inkonsistent sein.

Code: Alles auswählen

 
  ZConnection1.StartTransaction;
  ZConnection1.ExecuteDirect('PRAGMA synchronous = OFF;');
  ZConnection1.Commit;
 

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SQLite3 update

Beitrag von Socke »

vazili_Zaitzef hat geschrieben:ich habe mal wieder :!: noch eine Frage zur SQLite Datenbank. Wie kann ich auslesen, mit welchem Datentyp Spalte in der Datenbank erstellt wurde :?:

Beispiel:
Eine Tabelle wurde erstellt und die Spalte "Eintrag" ist mit dem Datentyp VARCHAR erstellt worden.
Wie kann ich später herausbekommen, das der Eintrag VARCHAR dafür benutzt wurde :?:


Über den Befehl

Code: Alles auswählen

http://sqlite.org/pragma.html#pragma_table_info
kannst du dir die Datentypen der Spalten anzeigen. Wichtig dabei ist, dass SQLite das nicht interessiert und du trotzdem Daten aller Datentypen in jeder Spalte ablegen kannst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: SQLite3 update

Beitrag von mschnell »

af0815 hat geschrieben:Ich kann dir nur bestätigen, das mit der richtigen Wahl von einigen Einstellungsmöglichkeiten verdammt viel Speed herausholen kann bei der Version 3. Dazu gab es hier mal einen Thread über JSON Daten und bei den Versuchen ist mir das aufgefallen.

Vielen Dank !
-Michael

Antworten