Entwickler-Ecke

Datenbanken - SQL: Insert into


LickstheComp - Fr 17.04.09 13:28
Titel: SQL: Insert into
Ich möchte zu einem bestimmten Datensatz andere Daten dazuspeichern. Aber es kommt immer das ein Semikolon fehlt. .


Delphi-Quelltext
1:
ADOquery4.sql.add('Insert INTO Tabelle1 (User) VALUES ("'+combobox1.Text+'") SELECT * FROM Tabelle1 WHERE (LNR=10) ;');                    


Die Nummer von LNR ist egal, die mach ich dan noch dynamisch.

lg


zuma - Fr 17.04.09 13:40

Was auch immer du mit dem Select.. bezweckst ..
du schreibst 2 Sql-Befehle in eins - das geht nicht

Insert into .. () values (); <-- fertig bei schreiben ohne bedingung

oder (was ich eher vermute, du willst bedingt schreiben )

insert into .. () values () where xy = Select ...


LickstheComp - Fr 17.04.09 13:56

ja mit bedingung, also so:
Insert INTO Tabelle1 (User) VALUES ("'+combobox1.Text+'") WHERE (LNR=10) ?


Nersgatt - Fr 17.04.09 14:02

user profile iconLickstheComp hat folgendes geschrieben Zum zitierten Posting springen:
ja mit bedingung, also so:
Insert INTO Tabelle1 (User) VALUES ("'+combobox1.Text+'") WHERE (LNR=10) ?

Ja, so ungefähr muss es aussehen. Wobei Du aber ein Problem bekommst, wenn in combox1.Text ein " oder ein ; vorkommt.


LickstheComp - Fr 17.04.09 14:08

Trotzdem kommt das ein Semikolon fehlt :(


Nersgatt - Fr 17.04.09 14:12

Was steht denn in Combobox1.Text?

Schau Dir das zusammengebastelte Statement mal an: ShowMessage(ADOquery4.sql.GetText) und poste ggf. hier.


Xentar - Fr 17.04.09 14:18

Äh.. was bitte soll ein INSERT mit einem WHERE?
Insert fügt einen Datensatz hinzu - wofür soll man da noch eine Bedingung angeben?

Kann es sein, dass ihr das mit UPDATE verwechselt?


Nersgatt - Fr 17.04.09 14:19

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Äh.. was bitte soll ein INSERT mit einem WHERE?
Insert fügt einen Datensatz hinzu - wofür soll man da noch eine Bedingung angeben?

Kann es sein, dass ihr das mit UPDATE verwechselt?

:autsch: :autsch:
Womit Du natürlich vollkommen recht hast! Naja, man merkt, dass es Freitag ist.


LickstheComp - Fr 17.04.09 14:21

also statt insert into einfach update schreiben?


firool - Fr 17.04.09 14:24

Hi,

mach zusätzlich aus dem:

VALUES ("'+combobox1.Text+'") SELECT
ein
VALUES ('''+combobox1.Text+''') SELECT

Also 3 einzelne Hochkommas.

Gruß
firool


Nersgatt - Fr 17.04.09 14:25

user profile iconLickstheComp hat folgendes geschrieben Zum zitierten Posting springen:
also statt insert into einfach update schreiben?

Da ist die Frage, was Du willst.

Möchtest Du einen NEUEN Datensatz einfügen:

SQL-Anweisung
1:
Insert into tabelle (feld1, feld2) VALUES (wert1, wert2)                    


Möchtest Du einen BESTEHENDEN Datensatz ändern:

SQL-Anweisung
1:
Update tabelle set feld1=wert1,feld2=wert2 where bedingung                    


bis11 - Fr 17.04.09 14:25

Die Zeile muss entweder so lauten :

Delphi-Quelltext
1:
ADOquery4.sql.add('Insert INTO Tabelle1 (User) VALUES (' + QuotedStr(combobox1.text) + ') ;');                    

oder so :

Delphi-Quelltext
1:
ADOquery4.sql.add('UPDATE Tabelle1 SET User =' + QuotedStr(combobox1.text) + ') WHERE LNR=10;');                    


LickstheComp - Fr 17.04.09 14:30

Danke die Zeile von bis11 funktioniert!
was bedeutet QuotedStr ?
lg


p.s. kann man statt ' + QuotedStr(combobox1.text) + ' nicht was anderes schreiben?


Nersgatt - Fr 17.04.09 14:31

user profile iconLickstheComp hat folgendes geschrieben Zum zitierten Posting springen:

was bedeutet QuotedStr ?
lg

Einfach mal den Cursor draufstellen und F1 drücken.


LickstheComp - Fr 17.04.09 14:33

ok danke habs!!


Delete - Fr 17.04.09 15:10

Ich würde aber SQL-Parameter verwenden, dann bist Du auch vor SQL-Injection geschützt.