AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Access - Firebird

Ein Thema von ucor · begonnen am 29. Jun 2005 · letzter Beitrag vom 30. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#1

Access - Firebird

  Alt 29. Jun 2005, 21:45
Datenbank: Acess / Firebird • Zugriff über: ADO / Zeos
Hallo,

ich habe Probleme mit folgender Zeile:

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.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Access - Firebird

  Alt 29. Jun 2005, 21:52
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]
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#3

Re: Access - Firebird

  Alt 29. Jun 2005, 22:14
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.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Access - Firebird

  Alt 29. Jun 2005, 22:30
Firebird behandelt Spaltennamen Case-Sensitiv...
weiter ist das Zeichen " der Identifier-Quote... für String-Literale muss ' verwendet werden...

versuchs mal mit:
SQL.Add ('SELECT "Ort", "Straße", "Name" FROM db WHERE "Name" LIKE ''%' + s + '%''');
  Mit Zitat antworten Zitat
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#5

Re: Access - Firebird

  Alt 29. Jun 2005, 22:42
Hallo Basilikum,

bringt leider auch keinen Erfolg.
Es kommt dieselbe Fehlermeldung.

Error Code = -206

Gruß U.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Access - Firebird

  Alt 30. Jun 2005, 00:28
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 !!
Gruß
Hansa
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#7

Re: Access - Firebird

  Alt 30. Jun 2005, 09:45
Zitat von Hansa:
Edit : @Basilikum, der * ist schon manchmal brauchbar,
wo habe ich einen * (Stern) verwendet ? meinst du damit ' (Single Quote) ?

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)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Access - Firebird

  Alt 30. Jun 2005, 10:19
Zitat von Basilikum:
Zitat von Hansa:
Edit : @Basilikum, der * ist schon manchmal brauchbar,
wo habe ich einen * (Stern) verwendet ? meinst du damit ' (Single Quote) ?
Einfach ignorieren.
Zitat von Basilikum:
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...
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.
Das ist/KEIN / Verhalten der Datenbank!
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Access - Firebird

  Alt 30. Jun 2005, 11:12
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.

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 ? Das läuft ja auch noch auf einen Haufen (*$IFDEF*) hinaus. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#10

Re: Access - Firebird

  Alt 30. Jun 2005, 12:03
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.

select ADR_BAS_TITEL FROM adress_basis WHERE ADR_BAS_TITEL LIKE 'Dipl%' Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.
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