Problem mit Sql Abfrage
-
Hallo zusammen,
Ich Versuche einen Sql-String wie folgt aufzubauen...AnsiString S = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
AnsiString sql=Format("Select * From '%s'",OPENARRAY(TVarRec,((S))));
Query1->SQL->Clear();
Query1->SQL->Add(sql);
Query1->Open();Ich versuche mir hiermit Dynamisch Tabellen in meinen DBGrid anzeigen zu lassen,
jedoch bekomme ich immer eine Fehlermeldung, das die Syntax im Sql-String falsch ist, jedoch ist meiner Meinung nach der Sting richtig aufgebaut!
Könnte mir hier eventuell jemand bei meinem Problem weiterhelfen?Mfg Bambino
-
Standard C++ ist das nicht.
Auch wenn ich nicht wirklich weiß was OPENARRAY macht, warum machst du es nicht so?AnsiString S = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; AnsiString sql=Format("Select * From '%s'",S);
-
du kannst auch einfach sowas machen:
AnsiString S = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; AnsiString sql="Select * From " + S;außerdem gehört das eher ins VCL-Forum
-
Bambino, der Fehler kommt deshalb, weil du noch einfache Anführungsstriche um den Tabellennamen gesetzt hast (und das ist falsch, wenn schon dann doppelte).
Nur innerhalb von Bedinugngen sind die einfachen Anführungsstriche richtig, z.B.:SELECT * FROM Tabelle WHERE Name = 'Meier'
-
Zu Standart5 & Linnea :
Beide Methoden funktionieren nicht.
Das Problem dabei ist, das es sich nicht ganz um reines Sql handelt, somit muss ich mit OPPENARRY(TVarRec,()) arbeiten.ich hab die Einfache Sql-Anweisung jetzt soweit hinbekommen
AnsiString sql = Format("SELECT * FROM %s", OPENARRAY(TVarRec, (S)));
Somit nimmt er nicht mehr die '' in den Sql-String mit rein, jedoch ist hierbei
jetzt das Problem das komplizierte Abfragen nicht mehr funktionieren
AnsiString sql=Format("UPDATE %s SET %s.Deutsch = '%s', %s.Englisch = '%s', %s.Lektion = %d, %s.Geschaft = %d WHERE (%s.[Id] = %d)",OPENARRAY(TVarRec, ((Tabelle), (Tabelle),(Deutsch), (Tabelle),(Englisch), (Tabelle),(Lektion), (Tabelle),(Geschafft), (Tabelle),(Id))));
und damit steh ich jetzt völlig auf dem Schlauch! :p
Mfg Bambino
-
Kriegst du einen Compilerfehler oder einen Laufzeitfehler?
Bei ersterem würde ich die inneren Klammern um die Parameter entfernen.
Und ansonsten schau dir doch mal im Debugger den String sql an.
-
auch dieses Kommando sollte ohne OpenArray funktionieren, z.B.:
AnsiString sql="UPDATE " + Tabelle + " SET Deutsch = :Deutsch, Englisch = :Englisch , Lektion = :Lektion, Geschaft = :Geschaft WHERE ([Id] = :Id)"; Query1->SQL->Clear(); Query1->SQL->Add(sql); Query1->ParamByName("Deutsch")->AsString = Deutsch; Query1->ParamByName("Englisch")->AsString = Englisch; Query1->ParamByName("Lektion")->AsInteger = Lektion; Query1->ParamByName("Geschafft")->AsInteger = Geschafft; Query1->ParamByName("Id")->AsInteger = Id; Query1->ExecSQL();der Vorteil der Parameter ist, daß sie den jeweiligen Typ entsprechend eintragen und somit z.B. die Hochkommas entfallen
und um Update zu machen muß man "Query1->ExecSQL();" aufrufen
-
Hey super, das letzte hat wunderbar funktioniert.
Danke an alle, die mir bei meinem Problem so schnell geholfen haben!
Mfg
Bambino
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL (C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.