![]() |
Datenbank: Acess / Firebird • Zugriff über: ADO / Zeos
Access - Firebird
Hallo,
ich habe Probleme mit folgender Zeile:
Delphi-Quellcode:
+ s + ist ein Edit-Feld.
SQL.Add ('SELECT Ort, Straße, Name FROM db WHERE Name LIKE "%' + s + '%"');
Mit einer Access Datenbank und ADO funktioniert alles einwandfrei. Mit derselben Syntax bekomme ich Fehlermeldungen bei einer Firebird Datenbank. Der Zugriff erfolgt über Zeos Komponenten. Gruß U. |
Re: Access - Firebird
Hallo ucor,
häufig macht das ß im Feldnamen ein Problem. Welchen Zeichensatz nutzt du? [edit] Wenn s ein Editfeld ist, dann muss es natürlich s.Text heißen [/edit] |
Re: Access - Firebird
Hallo MrSpock,
ich habe es auch schon mit ss anstelle von ß probiert, funktioniert auch nicht. Der Zeichensatz ist: DEFAULT CHARACTER SET Beim SQL habe ich sowohl Dialect 1 als auch 3 erfolglos probiert. s habe ich folgendermassen deklariert, wie gesagt, mit Access kein Problem.
Delphi-Quellcode:
Gruß U.
var
s: string; begin s:= e1.Text; //edit-feld |
Re: Access - Firebird
Firebird behandelt Spaltennamen Case-Sensitiv...
weiter ist das Zeichen " der Identifier-Quote... für String-Literale muss ' verwendet werden... versuchs mal mit:
Delphi-Quellcode:
SQL.Add ('SELECT "Ort", "Straße", "Name" FROM db WHERE "Name" LIKE ''%' + s + '%''');
|
Re: Access - Firebird
Hallo Basilikum,
bringt leider auch keinen Erfolg. Es kommt dieselbe Fehlermeldung. Error Code = -206 Gruß U. |
Re: Access - Firebird
Den "Tip" von Basilikum würde ich mal schnellstens vergessen !
Delphi-Quellcode:
Da geht es jetzt um die Suche nach einem Artikel. Kupfere das ab mit den entsprechenden Änderungen. 8) Das muß doch so gehen !
ArtDS.Close;
ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR'; ArtDS.Open; Edit : @Basilikum, der * ist schon manchmal brauchbar, aber der Hinweis mit "", der nützt nichts ! Man kann nicht auf Feldwerte genauso zugreifen wie auf Feldnamen !! |
Re: Access - Firebird
Zitat:
Zitat:
sobald die Feldnamen in Firebird nicht mit nur Gross-Buchstaben definiert sind, müssen die Feldnamen in Querys mit " (Double-Quote) eingefasst werden, mit der korrekten Gross-Klein-Schreibung. "Column" - Double Quote für Feldnamen 'irgend ein Text' - Single Quote für Text-Literale (gilt für InterBase/Firebird/PostgreSQL/ und vermutlich für viele mehr, ausser MySQL) |
Re: Access - Firebird
Zitat:
Zitat:
Zitat:
Das ist/KEIN / Verhalten der Datenbank! Zitat:
Man kann kein mittelalterliches Prökeldings, wie Jet, mit den gleichen SQL Staements wie eine richtige DB fahren, wie FB. Jedenfalls bezweifle ich, dass es gut geht wenn die Statements komplexer werden.
Verschachtelte JOINS gibt es nicht in Standard-SQL und somit auch in FB nicht. Der letzte Punkt dürfte verhindern, dass du die gleichen Statements auf beide fahren kannst. Tausche Jet mit der MSDE und du hast zumindest bis zu einem gewissen Level gleiche Statements und Funktionalität. Wobei es IMHO sinnlos ist den Jet/MSDE Zug weiterzufahren, wenn man sowieso schon eine freie DB wie FB benutzt. ;) |
Re: Access - Firebird
Bei dem * ging es mir darum, grundsätzlich darauf hinzuweisen, daß der nicht unbedingt gut ist. Vor allem weil ich ihn auf die Schnelle in meinem eigenen Beispiel verwendet habe !
Und an dem Zeos-Konzept, völlig unterschiedliche Datenbanken unter einen Hut zu bringen, scheiden sich die Geister. Auf den ersten Blick klingt das nicht schlecht. Aber die Nebenwirkungen !! Fragen sie ihren Arzt oder Apotheker. :mrgreen: Die sehen nämlich so aus : Wie auch hier schön zu sehen ist, der eigene Source muß auch auf die verschiedenen DBs angepaßt werden. Dies bedeutet einen Haufen
Delphi-Quellcode:
an allen Ecken und Kanten. Dasselbe gilt für Zeos. Wegen dieses Konzeptes sind sie wohl auch etwas buggy geworden. IMHO ist es besser, sich mit einer DB gut auszukennen und auch darauf spezialisierte Zugriffskomponenten zu verwenden, anstatt einen Mix zu haben. Wie sieht denn das mit der Uses-Liste bei solchen Programmen überhaupt aus ? :gruebel: Das läuft ja auch noch auf einen Haufen (*$IFDEF*) hinaus. :shock: Wer soll denn das überhaupt alles testen ? Der Aufwand ist immens. Einen Enduser, der nach der Datenbank gefragt hat, habe ich übrigens noch nie gesehen.
if not MySql then
Case DBTyp of... Um zum Kern des Themas zurückzukommen : mit einem einzigen String wirst Du die Syntax verschiedener DBs nicht in den Griff bekommen. |
Re: Access - Firebird
Moin zusammen,
ja sehe schon, das die Wellen wieder schlagen, na dann haben auch alle ihren Kaffee schon gehabt. Aber kurzum bei mir funktioniert folgendes Statement einwandfrei. Das Access Doublequotes verlangt liegt an einem zugeständnis zur Stringbehandlung unter VB wo auch mit Doublequotes gearbeitet wird. Beim Übergang auf FB müssen die ersetzt werden.
Delphi-Quellcode:
Grüße // Martin
select ADR_BAS_TITEL FROM adress_basis WHERE ADR_BAS_TITEL LIKE 'Dipl%'
|
Re: Access - Firebird
Bleibt das jetzt hier, oder geht es da weiter ?
![]() :shock: Egal wo, die wichtigen Antworten werden immer die gleichen sein. Siehe mein letztes Posting: die Syntax der verschiedenen DBs ist eben nicht dieselbe !! |
Re: Access - Firebird
Danke an Alle,
mit folgender Syntax von Hansa funktionierts.
Delphi-Quellcode:
Edit: Bei der Migration der Access-DB zur Firebird-DB mit sql2gdb sind wohl auch Fehler bezüglich der Indizies entstanden.
ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR';
Nachdem ich diese behoben habe, läuft alles fehlerfrei. Gruß U. |
Re: Access - Firebird
Das will ich aber auch hoffen, daß das geht. Falls nicht, dann müßte ich nämliche sämtliche eigenen Suchfunktionen verschrotten. 8) Vergesse aber jetzt den * nicht ! Das ist mit Kanonen auf Spatzen geschossen. Bei mir stehen da die Felder drin, die ich tatsächlich zur Suche brauche. Die wollte ich Dir ersparen. Antworten kommen hier übrigens recht schnell, also ist querposten nicht nötig. Und last but not least : Überdenke, ob es wirklich notwendig ist, tatsächlich alle möglichen Datenbanken zu unterstützen !! Mein Tip : lasse es sein und verwende FB. Dann tauchen zumindest solche Syntax-Probleme nicht mehr auf.
Edit zum Edit von ucor : Du sagst was von Migration. Willst Du deshalb die DB vorerst doppelt unterstützen ? Falls dem so ist, dann gebe das bekannt ! Es gibt bestimmt viele hier, die auch die Schnauze voll haben von Access und trotzdem von RG niedergemacht werden. :mrgreen: Edit2 : ich meine damit die Stolpersteine etwas näher zu beschreiben ! Worauf man achten muß usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz