MySqlDac TableName mit leerzeichen
-
Hallo Leute,
nun habe ich fas 4 Stunden ausprobiert bis ich die Lösung fand, warum kommt immer ein Fehlermeldung beim erstellen einer Tabelle (mit MySqlDac) über ein sql-statment wenn TableName ein Leerzeichen enthällt.
es muss so aussehen:mySQLQuery->Close(); mySQLQuery->SQL->Clear(); mySQLQuery->SQL->Add("CREATE TABLE `neues Projekt` (id int(10), plannummer varchar(50)) TYPE=MyISAM;"); mySQLQuery->ExecSQL();Achtet bitte auf die ` und nicht ' oder " bei Tablename.
Nun kommt meine Frage:
ich kann kein Daten einfügen in eine Tabelle die Leerzeichen enthällt (ohne Leerzeichen geht es, z.B wenn die Tabellenname: neues_Projekt heißt), und das geht über ein mySQLTable so:mySQLTable->Append(); mySQLTable->FieldByName("plannummer")->AsString = DBEdit1->DataField; mySQLTable->Post();es kommt eine FehlerMeldung, hat jemanden schon das Problem gehabt?
danke
C++_Hoby
-
Hallo
kannst du uns diese Fehlermeldung denn nicht mitteilen

MfG
Klaus
-
klar:
-------------
Project Projekt1.exe raised execption class EmySQLDatabaseError with message 'mySQL Error Code (1064)' you have an error in your SQL syntax. Chek the maual that corresponds to your MySQL server version for the right syntax to use near 'projekt (plannummer) VALUES ('plannummer')' at line 1'. Process stopped. Use Step or Run to Contineu.
---------------
Achte bitte auf TableName, es heißt neues projekt und nicht nur projekt wie in der FelherMeldung erscheint.
komischerweise wenn TableName ohne leerzeichen ist dann läuft es problemlos.
Gruß
C++_Hoby
-
Hallo
deine Fehlermeldung sagt aus, dass dein SQL-String nicht korrekt ist
(das hast du sicher auch schon so vermutet
)zeig dochmal deinen ganzen SQL-String
INSERT INTO .....
MfG
Klaus
-
hier ist alles:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "mySQLDbTables" #pragma resource "*.dfm" TForm1 *Form1; String projekt; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonAppendClick(TObject *Sender) { mySQLTable->Append(); DBEditPlannummer->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonSaveClick(TObject *Sender) { try { mySQLTable->FieldByName("plannummer")->AsString = DBEditPlannummer->DataField; mySQLTable->Post(); } catch(...) { Beep(); ShowMessage("Error"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonConnectClick(TObject *Sender) { mySQLTable->TableName = projekt; mySQLTable->Active = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonProjektErstellenClick(TObject *Sender) { if (InputQuery("Projekt einfügen", "Projektname:", projekt)) { mySQLQuery->Close(); mySQLQuery->SQL->Clear(); mySQLQuery->SQL->Add("CREATE TABLE `"+projekt+"` (id int(10), plannummer varchar(50)) TYPE=MyISAM;"); mySQLQuery->ExecSQL(); } } //---------------------------------------------------------------------------
-
hallo,
ich möchte mein Problem besser schildern:
also mit dem MySqlDac habe ich wie folgendes ein Tabelle über einen SQL-Statment erstellet:mySQLQuery->Close(); mySQLQuery->SQL->Clear(); mySQLQuery->SQL->Add("CREATE TABLE `neues projekt` (id int(10), plannummer varchar(50));"); mySQLQuery->ExecSQL();Die Tabelle `neues projekt` ist auch Ordnungsgemäß erstellt wurde, dies kann ich mit PhpMyAdmin prüfen.
Jetzt möchte ich einen Datensatz in die Tabelle `neues projekt` einfügen so:mySQLTable->Append(); mySQLTable->FieldByName("plannummer")->AsString = DBEditPlannummer->Field->Value; mySQLTable->Post();Ich bekomme immer eine Fehlermeldung (s. oben), es klappt nur wenn die Tabellenname keine Leerzeichen enthällt, wie z.B. neues_projekt.
Ist es nun ein Bug? oder mache ich einen Gedankenfehler?
Ich Füge die Datensatzte über ein mySQLTable und nicht über mySQLQuery weil es einfach ist, ich brauche die Zeile:mySQLTable->FieldByName("plannummer")->AsString = DBEditPlannummer->Field->Value;sogar nicht zu schreiben, ich setzte die Tabelle in den AppendModus dann schreibe ich alle mein Daten in die verschiedenen BDEdits und dann sage ich Post(), dann klappt es (aber wenn die Tabellenname kein Leerzeichen enthällt).
Ich habe natürlich versucht die Daten mit mySQLQuery einzufügen wie folgendes:mySQLQuery->Close(); mySQLQuery->SQL->Clear(); mySQLQuery->SQL->Add("INSERT INTO `neues projekt` (plannummer) VALUES (:plannummer)"); mySQLQuery->ParamByName("plannummer")->Value = Edit1->Text; mySQLQuery->ExecSQL();Es klappt, auch mit TableName der Leerzeichen enthällt, das Problem hier ist ich für jeden Feld 2 extra Zeilen schreiben, außerdem wie kann ich direkt in den DBEditPlannummer schreiben wenn ich mySQLQuery benutze? Mit mySQLTable habe ich Append() gesagt und schon darf mann in die DBEditPlannummer schreiben.
Nun reicht es erstmal, ich bin Dankbar wenn Jemand mir hilft.
Gruß
c++_Hoby
-
Nun ja, wer Tabellennamen mit Leerzeichen oder Sonderzeichen verwendet, muß mit Problemen rechnen... (hat man dann aber auch verdient
).Ich kenn die Komponenten, die Du verwendest nicht, aber normalerweise:
Wenn Du Queries verwenden willst, gibt es zwei Möglichkeiten.Man kann in Queries Append() und Edit() verwenden, was aber normalerweise voraussetzt, dass die Query vorher in den Bearbeitungsmodus versetzt wírd. Bei TQuery wäre das RequestLive = true. Allerdings funktioniert das nur, wenn man Daten nur aus einer Tabelle abruft.
Ansonsten kann man sich auch reinen SQLs bedienen: INSERT, UPDATE und DELETE.
-
Hallo Joe_M.;
ganz neue Kentnisse für mich mit dem sql->Append(), sql->Post() mit RequestLive = true.
Es klappt, auch mit Leerzeichen.
Vielen Dank noch mal.
Gruß
C++_Hoby