Toon posts:

[BCB6] Syntax error bij SQL insert *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo mensen,

ik heb het volgende stukje sourcecode maar kom er dus helemaal niet uit. Ik verwacht dat het een klein foutje is maar weet het niet 100% zeker. Wie kan mij helpen?

Form1->query->Close();
Form1->query->SQL->Clear();
Form1->query->SQL->Add("Insert INTO testtabel VALUES (edit->Text)");
Form1->query->ExecSQL();

Het is dus de bedoeling dat hij de info uit edit->Text haalt en deze wegschrijft in de database. Maar hij blijft maar zeggen dat er een syntaxfout is.

BVD Programbillie

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Mjah dit schiet niet echt op natuurlijk. Hoe verwacht je dat jouw database manager weet hoe hij 'edit->Text' op moet halen als ie potentieel aan de andere kant van de wereld draait als je GUI?

Professionele website nodig?


Verwijderd

Topicstarter
Sorry maar ik ben ook maar een beginnend programmeur. Zou je iets duidelijker kunnen zijn aub?

BVD Porgrambillie

  • Database freak
  • Registratie: Oktober 1999
  • Laatst online: 21-01 12:56
bij een SQL insert into moet je ook de veldnamen v/d tabel geven.
Dus;
Insert INTO testtabel (veld1, veld2, veld3) VALUES (1, 'annemarie de V.', 123.89)

Verwijderd

Topicstarter
Je bedoeld zo Database freak?

Form1->query->Close();
Form1->query->SQL->Clear();
Form1->query->SQL->Add("Insert INTO testtabel(tekst) VALUES (edit->Text)");
Form1->query->ExecSQL();

Dan krijg ik nog steeds de error dat er iets niet goed is met de syntax.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Database freak schreef op 14 december 2003 @ 23:04:
bij een SQL insert into moet je ook de veldnamen v/d tabel geven.
Dat hoeft helemaal niet, hij pakt standaard de volgorde van de kolommen. Het is natuurlijk wel verstandig, want als je nou ergens voor het eind een kolom toevoegt dan klopt het niet meer.
Verwijderd schreef op 14 december 2003 @ 22:58:
Sorry maar ik ben ook maar een beginnend programmeur. Zou je iets duidelijker kunnen zijn aub?
De database heeft helemaal geen weet van jouw applicatie, hij reageert alleen maar op de commando's die je hem geeft. Wat curry bedoelt is dat de database zich feitelijk aan de andere kant van de wereld kan bevinden. Hoe moet hij dan weten wat "edit->text" is? Hij kan niet zomaar in jouw GUI kijken (wat totaal niet op zijn eigen systeem draait) en de text property van je edit op vragen. Je moet de waarde van edit->text dus in de query zetten, niet "edit->text" zelf

(hint: als je edit->text "Bladiebla" bevat, dan moet de query dus worden: "Insert INTO testtabel VALUES ('Bladiebla')". Je zult dus een string moeten maken met dat laatste als resultaat, wat je vervolgens naar je database kunt sturen)

[ Voor 11% gewijzigd door .oisyn op 14-12-2003 23:40 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
En je kan dat dus op verschillende manieren gaan bereiken.

Je kunt een string samenstellen waaraan je dan de waarde van Edit1->Text gaat gaan plakken zoals:
code:
1
Form1->Query->SQL-Add("INSERT INTO tabel (veld1) VALUES ( " + QuotedStr(Edit1->Text) + ")");


Maar, de mooiste en veiligste (en snelste) manier is toch wel om gebruik te maken van parametrized queries. Je gaat dus parameters gebruiken om de waarden die je wilt inserten mee te geven aan je query.
In C++ Builder doe je dit bv zo:
code:
1
2
Form1->Query1->SQL->Text = "INSERT INTO tabel (veld2) VALUES (:p_NaamParam)";
Form1->Query1->ParamByName("p_NaamParam").AsString = Edit1->Text;

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hartelijk bedankt voor jullie hulp. Nu werkt het perfect!! :) :)

Mzzls Programbillie

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
Voor welke methode heb je nu gekozen?

Ik zie trouwens dat je nieuw bent hier op GoT: welkom. :)
Je moet trouwens niet onder iedere post groeten ofzo, dat leest alleen maar irritant.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

whoami schreef op 15 december 2003 @ 09:58:
Voor welke methode heb je nu gekozen?
En belangrijker nog: snap je nu mijn eerste reactie en waarom je origineel fout zat en hoe je het de volgende keer wel in 1 keer goed doet? :)

Professionele website nodig?


Verwijderd

Topicstarter
Ik heb nu voor de volgende oplossing gekozen:

code:
1

Form1->Query->SQL-Add("INSERT INTO tabel (veld1) VALUES ( " + QuotedStr(Edit1->Text) + ")");

Want de andere methode werkte niet met ADOQueries. Met de bovenstaande query werkt deze wel goed.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Die andere werkt ook met ADO, maar daar is de functie net iets anders genoemd. Form1->Query1->Parameters->ParamByName ofzo. In de Help kan je vast de precise naam vinden.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1