Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access - Firebird (https://www.delphipraxis.net/48742-access-firebird.html)

ucor 29. Jun 2005 20:45

Datenbank: Acess / Firebird • Zugriff über: ADO / Zeos

Access - Firebird
 
Hallo,

ich habe Probleme mit folgender Zeile:

Delphi-Quellcode:
SQL.Add ('SELECT Ort, Straße, Name FROM db WHERE Name LIKE "%' + s + '%"');
+ s + ist ein Edit-Feld.

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.

MrSpock 29. Jun 2005 20:52

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]

ucor 29. Jun 2005 21:14

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:
var
  s: string;
begin
s:= e1.Text; //edit-feld
Gruß U.

Basilikum 29. Jun 2005 21:30

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 + '%''');

ucor 29. Jun 2005 21:42

Re: Access - Firebird
 
Hallo Basilikum,

bringt leider auch keinen Erfolg.
Es kommt dieselbe Fehlermeldung.

Error Code = -206

Gruß U.

Hansa 29. Jun 2005 23:28

Re: Access - Firebird
 
Den "Tip" von Basilikum würde ich mal schnellstens vergessen !

Delphi-Quellcode:
ArtDS.Close;
    ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR';
    ArtDS.Open;
Da geht es jetzt um die Suche nach einem Artikel. Kupfere das ab mit den entsprechenden Änderungen. 8) Das muß doch so gehen !

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 !!

Basilikum 30. Jun 2005 08:45

Re: Access - Firebird
 
Zitat:

Zitat von Hansa
Edit : @Basilikum, der * ist schon manchmal brauchbar,

wo habe ich einen * (Stern) verwendet ? meinst du damit ' (Single Quote) ?

Zitat:

Zitat von Hansa
aber der Hinweis mit "", der nützt nichts ! Man kann nicht auf Feldwerte genauso zugreifen wie auf Feldnamen !!

hm ? Feldwerte, Feldnamen ?

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)

Robert_G 30. Jun 2005 09:19

Re: Access - Firebird
 
Zitat:

Zitat von Basilikum
Zitat:

Zitat von Hansa
Edit : @Basilikum, der * ist schon manchmal brauchbar,

wo habe ich einen * (Stern) verwendet ? meinst du damit ' (Single Quote) ?

Einfach ignorieren. ;)
Zitat:

Zitat von Basilikum
Zitat:

Zitat von Hansa
aber der Hinweis mit "", der nützt nichts ! Man kann nicht auf Feldwerte genauso zugreifen wie auf Feldnamen !!

hm ? Feldwerte, Feldnamen ?

Richtig das hat hier keiner behauptet... :roll:
Zitat:

Zitat von Basilikum
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.

Das ist so nicht richtig. Es gibt so eine nervige IB/FB IDE, die das so handhabt. Die wird einfach entweder alles hässlich in Großbuchstaben umwandeln oder, noch hässlicher, in double quotes setzen. :kotz:
Das ist/KEIN / Verhalten der Datenbank!
Zitat:

Zitat von Basilikum
"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)

Das dürfte genau das Problem sein.
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.
  • " in Standard-SQL ist [ ] in Jet
  • ' als string literal wird nicht unbedingt immer in Jet funktionieren
JOINS müssen in Jet verschachtelt werden, wenn man nicht ewig auf die Ergebnismenge warten will.
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. ;)

Hansa 30. Jun 2005 10:12

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:
if not MySql then
Case DBTyp of...
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.

Um zum Kern des Themas zurückzukommen : mit einem einzigen String wirst Du die Syntax verschiedener DBs nicht in den Griff bekommen.

mschaefer 30. Jun 2005 11:03

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:
select ADR_BAS_TITEL FROM adress_basis WHERE ADR_BAS_TITEL LIKE 'Dipl%'
Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz