Zitate aus dem Netz:
"..komplizierter wird es bei INSERT-Anweisungen. Da man damit Werte aus
programmeigenen Datenstrukturen in die Datenbank schreibt, lässt sich die entsprechende SQLAnweisung nur aufwändig als String formulieren und direkt ausführen: Deshalb geht man hier einen anderen Weg: Wir speichern die mit Platzhaltern ausgestattete Anfrage mit prepare() im QueryObjekt:
// sqlexample/main.cpp (fortgesetzt)
query.prepare("INSERT INTO mitarbeiter (nachname, vorname, abteilung)"
"VALUES(:nachname, :vorname, :abteilung)");
query.bindValue(":nachname", "Hasse");
query.bindValue(":vorname", "Peter");
query.bindValue(":abteilung", 3);
query.exec();
Die aus der OracleWelt stammenden benannten Platzhalter im VALUES-Teil des SQLKommandos beginnen jeweils mit einem Doppelpunkt. Mit dem Kommando bindValue() ersetzen wir sie durch die konkreten Werte.
Auch mit den aus ODBC bekannten unbenannten Parametern kann QSqlQuery umgehen. Jeder bindValue()Aufruf ersetzt der Reihe nach eines der Fragezeichen:
// sqlexample/main.cpp (fortgesetzt)
query.prepare("INSERT INTO mitarbeiter (nachname, vorname, abteilung)"
"VALUES(?, ?, ?");
query.bindValue("Schwan");
query.bindValue("Waldemar");
query.bindValue(3);
query.exec();
Möchte man die Werte nicht der Reihenfolge nach ersetzen, nutzt man folgende überladene Variante:
query.bindValue(3, 3);
query.bindValue(1, "Schwan");
query.bindValue(2, "Waldemar");
Hier gibt der erste Parameter die zu ersetzende Position, also das zu ersetzende Fragezeichen, im prepare()String an.
Auch bei gespeicherten Prozeduren (Stored Procedures) spielt bindValue() eine zentrale Rolle, denn deren Parameter können sowohl als IN als auch als OUT deklariert sein. OUT deklarierte Parameter fungieren als Rückgabewert. "...
oder
SQL > Tabellenbearbeitung > Insert Into
In den vorhergehenden Abschnitten haben wir uns mit dem Aufrufen von Daten aus Tabellen beschäftigt. Wie gelangen diese Datenzeilen aber ursprünglich in die Tabellen? Um diese Frage geht es in den nächsten Abschnitten, die die Anweisungen INSERT und UPDATE behandeln.
In SQL gibt es im Wesentlichen zwei Methoden zum Einfügen

NSERT) von Daten in eine Tabelle: Bei der einen wird jeweils eine Zeile eingefügt und bei der anderen mehrere gleichzeitig. Sehen wir uns zunächst den Befehl zum Einfügen

NSERT) einzelner Datenzeilen an.
Die Syntax für die entsprechende Funktion sieht folgendermaßen aus:
INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
VALUES ("Wert1", "Wert2", ...)
Nehmen wir an, uns liegt eine Tabelle mit der folgenden Struktur vor,
Tabelle Store_Information
Spalte Name Datentyp
store_name char(50)
Sales float
Date datetime
und wir möchten nun eine weitere Zeile mit den Umsatzdaten für Los Angeles am 10. Januar 1999 in die Tabelle einfügen. An diesem Tag erzielte das entsprechende Warenhaus einen Umsatz von ¤ 900. Wir verwenden dazu das folgende SQL-Skript:
INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, '10.Jan.1999')
Mit dem zweiten Typ von INSERT INTO können wir mehrere Zeilen in eine Tabelle einfügen. Im Gegensatz zum vorhergehenden Beispiel, bei dem wir eine einzelne Zeile durch Angabe der Werte für alle Spalten eingefügt haben, verwenden wir nunmehr eine SELECT-Anweisung, um die einzufügenden Daten festzulegen. Mit der Vermutung, dass dies die Verwendung von Daten aus einer anderen Tabelle impliziert, liegen Sie richtig.
Wie bei SELECT kann man hier keinen solchen String basteln...
Man muss schon mit bindValue arbeiten..