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:
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');
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:
Delphi-Quellcode:
MySQLString := '99, ''Adler'', ''Felix'', ''Goethestrasse 4'', ''30453'', ''Hannover'',' +
'''9856023452'', ''10562382'', ''adler@on-line.de''';
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:
Delphi-Quellcode:
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;
Liegen die benötigten Werte bereits in Variablen vor, z.B. in Editfeldern, kannst du auch hier den Befehl
QuotedStr einsetzen:
Delphi-Quellcode:
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;
So, hoffentlich war das jetzt ein wenig einleuchtend ...
Ja, ne, ist klar, - wenn ich als Südländer mal Anleihen nehmen darf
- im Grunde ist gelesenes, gehörtes, geschriebenes Wort immer stumpfer Text, erst der Compiler u. ä. gibt der Sache Sinn.
Nein, denn geübte Programmierer können auch ohne Compiler erkennen, ob ein Quelltext Sinn ergibt oder nicht.