fReSh85 Geschrieben 15. Juni 2005 Geschrieben 15. Juni 2005 Also: Ich schreibe im Moment ein Programm, mit dem Datensätze mit der C++ eigenen Datenbank Paradox7 eingegeben und nach solchen gesucht werden soll. Die Eingabe ist mit den Bordmitteln von C++ kein Thema, habe ein DBGrid erstellt mit Datasource etc., das funktioniert auch ohne Probleme. Bei der Suchmaske will ich drei Eingaben eines Benutzers in ein SQL-Query übertragen (bzw. 3 SQL-Queries) um dann damit in der Datenbank nach dem Wert zu suchen. Da fangen die Probleme an, denn: 1. Sobald ich nach dem ersten anklicken des Buttons, mit dem ich die Suche starte, noch einmal klicke stürzt das Programm ab und meldet: "Im Projekt xyz.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Ungültiges Schlüsselwort / Symbol-String: Select / Zeilennummer: 2'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen" Woran kann das liegen? Ich hab ehrlich gesagt keine Ahnung, da die Syntax des SQL-Queries stimmen muss, beim ersten klicken zeigt er mir im DBGrid die komplette DB. 2. Wie bekomme ich die Benutzereingabe in das Query? Habs schon mit der direkten Deklaration (frmSuche->Edit1->Text) oder auch mit ner Variable versucht... obwohl sich das ja eigentlich nichts nehmen dürfte... Hier nochmal der Code für den Button: void __fastcall TfrmSuche::Button1Click(TObject *Sender) { if (frmSuche->Edit1->Text!=""){ Query1->Active = false; Query1->SQL->Add("Select Interpret from MP3Archiv where Interpret = frmSuche->Edit1->Text"); Query1->Active = true; }else ShowMessage("Bitte geben Sie etwas in das Feld ein!"); } Vielen Dank im Voraus, bin auch offen für andere Lösungsvorschläge P.S.: Muss dazu sagen, dass ich kein guter C++er bin Zitieren
Klotzkopp Geschrieben 15. Juni 2005 Geschrieben 15. Juni 2005 Ich schreibe im Moment ein Programm, mit dem Datensätze mit der C++ eigenen Datenbank Paradox7 eingegeben und nach solchen gesucht werden soll.Paradox7 ist keine C++-eigene Datenbank. So etwas gibt es nicht. 2. Wie bekomme ich die Benutzereingabe in das Query? Habs schon mit der direkten Deklaration (frmSuche->Edit1->Text) oder auch mit ner Variable versucht... obwohl sich das ja eigentlich nichts nehmen dürfte...So, wie du es jetzt machst, kann es jedenfalls nicht funktionieren. Du kannst nicht erwarten, dass der Compiler auf magische Weise erkennt, dass du da einen Variablennamen in einem Stringliteral hast, und den Namen durch den Inhalt ersetzt. Was wäre, wenn du eine Variable namens Select hättest? Dein Problem hat mit "Datenbankanbindung" nicht zu tun. Das Problem ist einfach nur, dass du nicht weißt, wie man Strings zusammensetzt. Da du offenbar den Borland Builder benutzt, verschiebe ich dich erst mal ins richtige Forum. P.S.: Der Zusatz [Hilfe] im Threadtitel bringt auch nichts. Hilfe sucht hier so ziemlich jeder. Zitieren
fReSh85 Geschrieben 15. Juni 2005 Autor Geschrieben 15. Juni 2005 Also, habe jetzt nochmal entsprechend nachbearbeitet (Google ist dein Freund ) und habe jetzt die Übergabe des Texts aus dem Editfeld geschafft... Jetzt habe ich aber das Problem, dass die Fehlermeldung die beim Zweimaligen anklicken des Buttons kam, beim einmaligen Klicken auf den Button aufpoppt... Hier der neue Code: void __fastcall TfrmSuche::Button1Click(TObject *Sender) { String sCol = ""; String sAdd = ""; String sDB = ""; sCol = "Interpret"; sDB = "MP3Archiv"; sAdd="Select" + sCol + "from" + sDB + "where" + sCol = frmSuche->Edit1->Text; if (frmSuche->Edit1->Text!=""){ Query1->Active = false; Query1->SQL->Clear(); Query1->SQL->Add(sAdd); Query1->Open(); Query1->Active = true; }else ShowMessage("Bitte geben Sie etwas in das Feld ein!"); } Vielleicht kannst du mir dazu etwas mehr sagen... Zitieren
fReSh85 Geschrieben 15. Juni 2005 Autor Geschrieben 15. Juni 2005 So hat sich erledigt, auch ohne große Hilfe geschafft thx trotzdem *close* void __fastcall TfrmSuche::Button1Click(TObject *Sender) { String sCol = "Interpret"; String sDB = "MP3Archiv"; String sAdd; sAdd= " Select " + sCol + " from " + sDB + " where " + sCol + "= '" + frmSuche->Edit1->Text + "'"; if (frmSuche->Edit1->Text!=""){ Query1->Active = false; Query1->SQL->Clear(); Query1->SQL->Add(sAdd); //Query1->Open(); Query1->Active = true; }else ShowMessage("Bitte geben Sie etwas in das Feld ein!"); } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.