Einzelnen Beitrag anzeigen

Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Fehler bei Bereichsprüfung

  Alt 28. Jun 2012, 07:00
Wenn du per SQL Daten aus mehreren Tabellen abfragst, dann darfst du strenggenommen nur einmal den Wildcard * benützen.
SQL-Code:
SELECT tmp_adressen.*, tmp_fahrzeuge.Feld1, tmp_fahrzeuge.Feld2,...
FROM tmp_fahrzeuge left join tmp_adressen on tmp_fahrzeuge.fzg_adrnr=tmp_adressen.kd_lfdnr
Grund: es könnte gleichnamige Feldnamen in mehreren Tabellen geben.
Je nach Treiber und Datenbank gibt es unterschiedliche Strategien diese Feldnamenkollisionen aufzulösen.
Wenn es blöd läuft, gibt es zwei Felder mit dem gleichen Namen.
Dies könnte die Datenbanktreiberschicht (Zeos) natürlich in Bedrängnis bringen, wenn im Fields[]-Array gleichnamige Felder sind.
Genau genommen sind die Tabellen, aus denen ich was einlesen muß, Foxpro-Tabellen. Da ich aber die Tabellen über ein Join zusammenführen muß, habe ich mich dazu entschieden diese erst einmal in tmp_tabellen in meine MySQL-DB 1-zu-1 zu übertragen. Einzigen Änderung: Feldname bekommen jeweils ein Präfix KD_ für Adressen, FZG_ für Fahrzeuge und ANR_ für Anreden. Damit ist schon einaml sichergestellt, dass es eben keine doppelten Feldname geben wird, wenn mal mit Platzhaltern arbeitet.

Alle Feldnamen explizit im Select ..... join... aufzuführen wäre zwar möglich, möchte ich aber eigentlich nicht machen, weil ich nicht sicherstellen kann, dass die Feldnamen bzw. Feldanzahl der Quell-Forxpro-Dateien immer so bleibt. Und wenn sich diese mal verändern sollte, würde meine Select-Anweisung plötzlich nicht mehr funktionien bzw. nicht alle Daten liefern.

Außerdem bleibt dann ja die Frage, warum es bei Adressen mit Join auf Anreden mit den Wildcard's geht? Da müßte der Fehler ja auch auftreten.

Folgende Abfrage

Code:
SELECT tmp_adressen.*, tmp_fahrzeuge.* FROM tmp_fahrzeuge left join tmp_adressen on tmp_fahrzeuge.fzg_adrnr=tmp_adressen.kd_lfdnr
schlägt unter delphi mit folgendem Fehler an: Fehler bei Bereichsprüfung.
Bereichsprüfung hört sich so an als ob z.B. ein solches Konstruckt im Spiel sei:
Delphi-Quellcode:
type
  Sqlstring=array [1..80] of char;
...
 Sqlstring:=Stringmit90zeichen;
Könnte das der Grund sein?
Gruß
K-H
Hier weiß ich lieder nicht so ganz, was du meinst bzw. worauf du hinaus willst.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat