SQL-Query Problem



  • Hallo

    Wenn du den Inhalt der Variable pw_try mit in den SQL-String mit aufnehmen wilst, dann must du das so schreiben (Reine Syntax für Testzwecke, für den ernsten Gebrauch solltest du unbedingt Parameter verwenden, ansonsten droht SQL-Injection) :

    AnsiString query = "SELECT User FROM UserTb WHERE User LIKE '" + user_try + "'";
    

    Der eigentliche Fehler (capability error) kommt allerdings nicht vom Builder oder TQuery, sondern von Paradox. Versuch mal so eine vollständige SQL-Query im "Datenbank-Explorer" auszuführen, dort sollte der gleiche Fehler kommen. Kann es sein, das Paradox LIKE zumindestens im Zusammenhang mit diesem speziellen Feldtyp nicht erlaubt?

    bis bald
    akari



  • akari schrieb:

    Kann es sein, das Paradox LIKE zumindestens im Zusammenhang mit diesem speziellen Feldtyp nicht erlaubt?

    Nein, das kann Paradox. Alphanumerisch ist nur die Bezeichnung für character in Paradox.

    Aus den hier gezeigten Codeausschnitten hätte ich ebenfalls die fehlenden Anführungszeichen als Ursache vermutet... Aber versuch es mal mit Parametern oder doppelten Anführungszeichen im Select.
    Also:

    AnsiString query = "SELECT User FROM UserTb WHERE (User LIKE \"" + user_try + "\"");
    


  • Im Database Explorer kommt der Capability Error auch.
    Sogar bei folgendem String:

    SELECT User FROM UserTb
    

    ist hier etwas mit dem ganzen System nicht in Ordnung?
    Als Treiber habe ich im Alias Manager "Stand art" gewählt, so stand es in allen Tutorials.



  • Ja, da stimmt etwas nicht. Ich habs nicht gefunden, deshalb: Welche BCB-Version und welches Betriebssystem?

    Dann gib uns noch Informationen zu den DB-Details. Welche DB-Komponenten verwendest Du? Wie sind die Einstellungen der Komponenten? Wie ist die Tabelle aufgebaut? Wo liegt die Tabelle?



  • BCB: Version 5.0
    Pfad der DB-Files und aller C-Builder Files:
    C:\Program Files\QMS\Vs1
    Zudem erstellt ein Alias mit dem Name QMS01, der auf das selbe Verzeichniss geht, also auch
    C:\Program Files\QMS\Vs1
    Treiber Typ ist auf Standard eingestellt.

    In der Tabelle sind folgende Felder:
    User
    Password
    UserType
    FirstName
    FamilyName

    Alle sind vom Typ Alpha, alle bis auf User haben die Länge 12, nur User hat die Länge 4.

    Betriebssystem: Vista, 64Bit

    Verwendete Komponenten: TQuery, TDataSource

    Übrigens mal besten Dank für die grosse Anteilnahme an meinem Problem!



  • Dumme Zwischenfrage: Läuft Paradox überhaupt korrekt unter Vista 64?

    Bekommst Du eine konkrete Fehlernummer von Paradox (ich hab bisher nicht danach gefragt, weil die manchmal irreführend sind)?
    Kannst Du mit der Datenbankoberfläche die Tabelle öffnen und neue Einträge erstellen?

    Wie sind die Enstellungen der Komponenten?



  • Mit dem Database Desktop konnte ich neue Einträge erstellen. Mit der TTable Komponente konnte ich die Einträge auch anzeigen, durchblättern und editieren, mit einem im Builder erzeugten Programm. (Unter Verwendung von DBNavigator)
    Mit dem Query

    SELECT User FROM UserTb
    

    BDE-Error:12289 Capability not supported.

    in einer anderen Tabelle der gleichen Datenbank komme ich auf den Fehler:
    BDE-Error:10770 Invalid use of keyword.

    Ich überlege mir, auf MYSQL umzustellen. Ich verwendete am Anfang Paradox, weil es so schön einfach war. Nun scheint Paradox selber fehler zu verursachen.



  • Hallo

    Ja, Paradox ist schon sehr alt und fehleranfällig. Der Umstieg von Paradox und BDE auf z.B. MySQL mit entsprechenden Komponenten, oder auch Firebird und ZEOS ist sehr angebracht.

    bis bald
    akari



  • User könnte ein reserviertes Schlüsselwort sein (von anderen DBs weiß ich es!).

    Daher probiere mal:

    SELECT "User" FROM UserTb
    

    bzw. in C++ dann entsprechend 'escapen':

    string SQL = "SELECT \"User\" FROM UserTb";
    

    Und ich muß akari zustimmen, es gibt heute deutlich bessere Datenbanken.



  • Ich kann akari nur zustimmen ALLES ist besser als die BDE und Paradox.

    Aber trotzdem, wenn es mit der Datenbankoberfläche und auch mit TTable funktioniert, dann muss das auch mit TQuery funktionieren - behaupte ich jetzt einfach mal. Kannst Du das Projekt irgendwo hochladen? (Ich bin allerdings in einer halben Stunde übers Wochenende weg, also nicht wundern, wenn ich erst Montag wieder antworte.)



  • Dankeschön für eure Tipps. Ich bin nun tatsächlich einen Schritt weiter. Das Problem lag genau am 'reservierten' Wort User. Darauf währe ich nie gekommen!
    Zudem funktionieren die Abfragen nicht immer, wenn im Database Desktop oder im Database Explorer noch Fenster der Tabellen geöffnet sind. Zugegeben, das müsste ich eigentlich eher gemerkt haben. 🙂
    Der Query-String bringt nun kein Fehler mehr. Allerdings habe ich noch einige andere Bug's zu korrigieren, bevor ich endgültig sehe, ob die Abfrage funktionert. Im Database Explorer scheint das ganze jedoch zu funktionieren.
    Ich bin nun noch am üben mit dem Auslesen der Daten. In der nächsten Zeit bin ich im WK, hoffe daher, dass ich viel Zeit habe für meine Programmierprobleme 🙂
    Trotz diesem Erfolg werde ich baldmöglichst auf MYSQL umstellen, so wie ihr mir das auch empfehlt. Eventuell werde ich auch auf die BDE verzichten. Für erste Versuche ist diese allerdings ganz nützlich denke ich.
    Gruss und Danke nochmals!!!


Anmelden zum Antworten