![]() |
AW: In SQLite Integer-Wert schreiben?
Hallo Sir Rufo,
Zitat:
Gruß |
AW: In SQLite Integer-Wert schreiben?
Mein lieber Volker Z,
die Übergabe von Werten an externe Programme erfolgt im Grunde immer mittels eines Strings. Das ist z.B. auch so, wenn du ein Programm mit Parametern startest: Wenn dein Programm die Parameter auswertet, muß es eventuell erwartete Zahlenwerte erst umwandeln, um sie verwenden zu können. Bei SQL-Strings, die einen SQL-konformen Text zur Manipulation einer SQL-Datenbank beinhalten (sollen), ist das ganz genau so: Zeichenfolgen, die in der Datenbank als Zahlenwerte (Integer, Currency ...) erwartet werden, müssen vom SQL-Parser des DBMS (DatenBankManagementSystem) erst in die entsprechenden Zahlenwerte umgewandelt werden. Um dem DBMS zu vermitteln, ob es sich um einen Zahlenwert oder um eine Zeichenfolge (Name, Vorname ...) handelt, wird das Quoten eingesetzt: In Hochkommas eingeschlossene Zeichenfolgen werden vom SQL-Parser nicht als Zahlenfolgen interpretiert:
Code:
Wie du hier in der Zeile mit den Values (Werten) siehst, wird hier die Kunden-Nummer nicht als Zeichenfolge übermittelt, sondern als Zahlenwert. Alle anderen Zeichenfolgen sind keine Zahlenwerte und deshalb gequotet, also in Hochkommas eingeschlossen. Für den SQL-Parser deines DBMS ist aber das ganze Ding ein einziger String, eben ein SQL-String, der entsprechend auseinandergenommen wird, um mit den Einzelteilen hier z.B. den neuen Eintrag zu "berechnen". Um in Delphi eine String-Variable mit einem Wert zu belegen (indizieren bzw. zuweisen), muß bereits der komplette String in Hochkommas eingeschlossen werden, damit der Delphi-Compiler – der ja auch einen Parser verwendet, um die im Quelltext stehenden Worte und Zeichen interpretieren zu können, bevor er daraus Maschinencode macht – den String als solchen erkennen kann. Werden nun im String weitere Hochkommas benötigt, kann man das Problem, daß erstmal jedes Hochkomma den String beendet, auf zwei verschiedene Arten lösen:
insert into KUNDE
(kundennr, name, vorname, strasse, plz, ort, telefongesch, telefonprivat, email) values (99, 'Adler', 'Felix', 'Goethestrasse 4', '30453', 'Hannover', '9856023452', '10562382', 'adler@on-line.de');
Delphi-Quellcode:
Wie du hier leicht erkennen kannst, werden in Delphi, um innerhalb eines Strings ein Hochkomma zu platzieren, zwei hintereinander stehende Hochkommas verwendet. Statt der zahlreichen Hochkommas kannst du aber auch Befehl QuotedStr verwenden:
MySQLString := '99, ''Adler'', ''Felix'', ''Goethestrasse 4'', ''30453'', ''Hannover'',' +
'''9856023452'', ''10562382'', ''adler@on-line.de''';
Delphi-Quellcode:
Liegen die benötigten Werte bereits in Variablen vor, z.B. in Editfeldern, kannst du auch hier den Befehl QuotedStr einsetzen:
Const
K = ','; begin MySQLString := '99' + K + QuotedStr('Adler') + K + QuotedStr('Felix') + K + QuotedStr('Goethestrasse 4') + K + QuotedStr('30453') + K + QuotedStr('Hannover') + K + QuotedStr('9856023452') + K + QuotedStr('10562382') + K + QuotedStr('adler@on-line.de'); end;
Delphi-Quellcode:
So, hoffentlich war das jetzt ein wenig einleuchtend ... :nerd:
Const
K = ','; begin MySQLString := Edit_KdNr.Text + K + QuotedStr(Edit_Nachname.Text) + K + QuotedStr(Edit_Vorname.Text) + K + QuotedStr(Edit_Strasse.Text) + K + QuotedStr(Edit_PLZ.Text) + K + QuotedStr(Edit_Ort.Text) + K + QuotedStr(Edit_TelGesch.Text) + K + QuotedStr(Edit_TelPriv.Text) + K + QuotedStr(Edit_Email.Text); end; Zitat:
|
AW: In SQLite Integer-Wert schreiben?
Vielleicht hab es es auch nur überlesen und es wurde schon erwähnt, aber im Grunde lag hier ein Verständnisproblem vor.
Delphi-Quellcode:
ist für SQL ein "Integer" und
123
Delphi-Quellcode:
ist ein Text, auch wenn Beides im SQL-Text ein "String" ist.
"123"
SQL wollte praktisch den Integer, also ohne die ", aber für den SQL-Text muß deine Integervariable in einen "String" umewandelt werden, denn diesen baust du ja als Text zusammen. Außer du nutzt parametrisierte Abfragen, wo du deine Variable an den Parameter auch als Interger übergeben könntest. Und ja, einige SQL-Dialekte besitzen eine automatische Typumwandlung zwischen Zahlen und Texten. Wobei diese über die Operatoren erkennen, was da zusammengesetzt werden soll. (z.B.
Delphi-Quellcode:
ergibt den Text "123465" und
"123" || 456
Delphi-Quellcode:
ergibt 579)
"123" + 456
|
AW: In SQLite Integer-Wert schreiben?
Hallo Frank,
Zitat:
Zitat:
BTW: Meine Erfahrung und mein KC sagt mir, dass der SQL-Parser Dein drittes Beispiel wohl mit "You have an error in your SQL syntax; check the manual [...]" anmeckern würde (da fehlen ein paar Kommas) :wink: Gruß |
AW: In SQLite Integer-Wert schreiben?
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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