Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler bei Bereichsprüfung (https://www.delphipraxis.net/169077-fehler-bei-bereichspruefung.html)

Captnemo 27. Jun 2012 12:59

Datenbank: MySQL • Version: 5.0 • Zugriff über: ZEOS 6.6.6

Fehler bei Bereichsprüfung
 
hallo Leute,

ich hab mal wieder ein Problem, bei welchem ich nicht weiter komme.

D7 - Windows XP - MySQL 5.0

tmp_adressen ca 1500 Datensätze
tmp_fahrzeuge ca 2200 Datensätze
tmp_anreden 4 Datensätze

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.

Im MySQL-Administrator funktioniert sie aber einwandfrei.

Wenn ich statt tmp_fahrzeuge die tmp_anreden verwende

Code:
SELECT tmp_anreden.*, tmp_adressen.* FROM tmp_adressen left join tmp_anreden on tmp_adressen.kd_anredenr=tmp_anreden.anr_lfdnr
dann wird kein Fehler ausgeworfen.

Ich nehmen mal an, dass liegt daran, dass in der tmp_anreden wesentlich weniger Felder und Zeilen sind. Kennt jemand das Problem bzw. eine Lösung?
Kann leider die Tabelle weder umstellen noch sonst wie ändern, da es sich um Daten aus einem Fremdprodukt handelt. Auch kann jetzt nicht von Zeos auf was anderes umsteigen, weil das Projekt einfach zu groß dafür ist.

shmia 27. Jun 2012 13:49

AW: Fehler bei Bereichsprüfung
 
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.

p80286 27. Jun 2012 15:46

AW: Fehler bei Bereichsprüfung
 
Zitat:

Zitat von Captnemo (Beitrag 1172671)
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

Captnemo 28. Jun 2012 06:00

AW: Fehler bei Bereichsprüfung
 
Zitat:

Zitat von shmia (Beitrag 1172682)
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.

Zitat:

Zitat von p80286 (Beitrag 1172711)
Zitat:

Zitat von Captnemo (Beitrag 1172671)
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.

Captnemo 28. Jun 2012 06:39

AW: Fehler bei Bereichsprüfung
 
Kleine Ergänzung noch:

Die Exception tritt in folgender Procedure auf:

Unit ZPlainMySqlDriver
Delphi-Quellcode:
function TZMySQL5PlainDriver.GetFieldData(Row: PZMySQLRow;
  Offset: Cardinal): PChar;
begin
  Result := ZPlainMySql5.PMYSQL_ROW(ROW)[Offset];
end;

Uwe Raabe 28. Jun 2012 06:49

AW: Fehler bei Bereichsprüfung
 
Zitat:

Zitat von Captnemo (Beitrag 1172763)
Die Exception tritt in folgender Procedure auf:

Unit ZPlainMySqlDriver
Delphi-Quellcode:
function TZMySQL5PlainDriver.GetFieldData(Row: PZMySQLRow;
  Offset: Cardinal): PChar;
begin
  Result := ZPlainMySql5.PMYSQL_ROW(ROW)[Offset];
end;

Dann prüf doch einfach nach, ob Offset an dieser Stelle überhaupt im gültigen Bereich liegt.

Furtbichler 28. Jun 2012 08:08

AW: Fehler bei Bereichsprüfung
 
Und was hat er davon? Er ist doch kein Zeos-Entwickler.

Allerdings.... Wenn die Zeos-Entwickler etwas blöd waren, dann haben sie vielleicht das Ergebnis der Funktion "ZPlainMySql5.PMYSQL_ROW" als "Array [0..0] Of Char" deklariert und setzen eine abgeschaltete Bereichsprüfung voraus.

Schalte sie mal aus und versuch dein Glück.

Weitere Ideen zur Umgehung des Problems:
Gibt es noch andere Provider für MySQL, ODBC z.B.? Versuche es damit. Vielleicht ist das mal wieder ein Problem bei Zeos.

Wenn die Query bei expliziter Angabe der Feldnamen funktioniert, dann kannst Du dir vielleicht behelfen, wenn Du vorher die Feldnamen der Tabellen ermittelst und dann die Query dynamisch zusammen baust.

Captnemo 28. Jun 2012 08:27

AW: Fehler bei Bereichsprüfung
 
Also ich hab das jetzt mal mit expliziten Feldnamen im Query probiert.

Code:
SELECT tmp_anreden.anr_KURZANREDE,tmp_anreden.anr_LANGANREDE,tmp_anreden.anr_LFDNR,tmp_anreden.anr_PLUS,
tmp_adressen.kd_ANREDE,tmp_adressen.kd_ANREDENR,tmp_adressen.kd_APARTNER,tmp_adressen.kd_ARTVKNR,
tmp_adressen.kd_ARTVK_RAB,tmp_adressen.kd_AUFNDAT,tmp_adressen.kd_AWGRPLFDNR,tmp_adressen.kd_AWRABATT,
tmp_adressen.kd_BRIEFANR,tmp_adressen.kd_BUDAT_ANR,tmp_adressen.kd_BUDAT_IC,tmp_adressen.kd_BUDAT_KST,
tmp_adressen.kd_DTAUS,tmp_adressen.kd_DUMMY01,tmp_adressen.kd_EINMALKTO,tmp_adressen.kd_EMAIL,
tmp_adressen.kd_ETRABATT,tmp_adressen.kd_EXTRA1,tmp_adressen.kd_EXTRA2,tmp_adressen.kd_EXTRA3,
tmp_adressen.kd_EXTRA4,tmp_adressen.kd_EXTSALDDAT,tmp_adressen.kd_EXT_SALDO,tmp_adressen.kd_FIBUKONTO,
tmp_adressen.kd_FIRMENNR,tmp_adressen.kd_GEBDATUM,tmp_adressen.kd_GEBMONNR,tmp_adressen.kd_GEBTAGNR,
tmp_adressen.kd_GESPERRT,tmp_adressen.kd_HANDSCHUH,tmp_adressen.kd_HELM,tmp_adressen.kd_HOSE,
tmp_adressen.kd_INFO,tmp_adressen.kd_JACKE,tmp_adressen.kd_KDGRP,tmp_adressen.kd_KONZEPTNR,
tmp_adressen.kd_LADRESSNR,tmp_adressen.kd_LADRLFDNR,tmp_adressen.kd_LAND,tmp_adressen.kd_LANREDENR,
tmp_adressen.kd_LFDNR,tmp_adressen.kd_LKURZANR,tmp_adressen.kd_LKZ,tmp_adressen.kd_LLANGANR,
tmp_adressen.kd_LLKZ,tmp_adressen.kd_LNAME1,tmp_adressen.kd_LNAME2,tmp_adressen.kd_LNAME3,
tmp_adressen.kd_LORT,tmp_adressen.kd_LPLZ,tmp_adressen.kd_LSTRASSE,tmp_adressen.kd_L_RECHDATE,
tmp_adressen.kd_MAHNSPERRE,tmp_adressen.kd_MOBIL,tmp_adressen.kd_NAME1,tmp_adressen.kd_NAME2,
tmp_adressen.kd_NAME3,tmp_adressen.kd_NON_EU,tmp_adressen.kd_NOTIZ2,tmp_adressen.kd_NPR_AUF_LF,
tmp_adressen.kd_NUMMER,tmp_adressen.kd_ORT,tmp_adressen.kd_PFACH,tmp_adressen.kd_PLUS,tmp_adressen.kd_PLZ,
tmp_adressen.kd_PLZPF,tmp_adressen.kd_POSTFACH,tmp_adressen.kd_PREFERENGL,tmp_adressen.kd_PR_AUF_LF,
tmp_adressen.kd_SALDO,tmp_adressen.kd_SAMMELKZ,tmp_adressen.kd_SCHUHE,tmp_adressen.kd_STEUERNR,
tmp_adressen.kd_STEUER_ID,tmp_adressen.kd_STEU_IDENT,tmp_adressen.kd_STRASSE,tmp_adressen.kd_SUCHNAME,
tmp_adressen.kd_TELEFAX,tmp_adressen.kd_TELEFAX1,tmp_adressen.kd_TELEFAX2,tmp_adressen.kd_TELEFON1,
tmp_adressen.kd_TELEFON2,tmp_adressen.kd_TK_RAB_AB,tmp_adressen.kd_TK_RAB_DS,tmp_adressen.kd_TX_RAB_OE,
tmp_adressen.kd_VKPREISNR,tmp_adressen.kd_WOHNORT,tmp_adressen.kd_WWSPERRE,tmp_adressen.kd_WWW,
tmp_adressen.kd_ZBED_NR,tmp_adressen.kd_EXCL_R_AB,tmp_adressen.kd_EXCL_R_DS,tmp_adressen.kd_EXCL_R_OE,
tmp_adressen.kd_KUNDE_INT,tmp_adressen.kd_ORGAN_SCH,tmp_adressen.kd_MAHNSTLFD,tmp_adressen.kd_PERMITCODE,
tmp_adressen.kd_PERMITNOTE,tmp_adressen.kd_EDITDATE,tmp_adressen.kd_CRENT_DONE,tmp_adressen.kd_OP_EXCLUDE,
tmp_adressen.kd_OUT_ONLINE,tmp_fahrzeuge.fzg_ACHSEN,tmp_fahrzeuge.fzg_ACHSGEW,tmp_fahrzeuge.fzg_ACHS_P,
tmp_fahrzeuge.fzg_ACHS_PN,tmp_fahrzeuge.fzg_ADRNR,tmp_fahrzeuge.fzg_ANHBREMS,tmp_fahrzeuge.fzg_ANHFORM,
tmp_fahrzeuge.fzg_ANHOBREMS,tmp_fahrzeuge.fzg_ANHPRUEF,tmp_fahrzeuge.fzg_ANKAUF,tmp_fahrzeuge.fzg_ANKAUFVON,
tmp_fahrzeuge.fzg_ANKDATUM,tmp_fahrzeuge.fzg_ANTRARTNR,tmp_fahrzeuge.fzg_ANTR_ACHS,tmp_fahrzeuge.fzg_ANTR_ART,
tmp_fahrzeuge.fzg_ART,tmp_fahrzeuge.fzg_AUFBAU,tmp_fahrzeuge.fzg_AUFNDAT,tmp_fahrzeuge.fzg_AUFRIST,
tmp_fahrzeuge.fzg_AUSFUHR,tmp_fahrzeuge.fzg_AUSSTATT,tmp_fahrzeuge.fzg_AUSST_SER,tmp_fahrzeuge.fzg_AUSST_XTRA,
tmp_fahrzeuge.fzg_BAUREIHENR,tmp_fahrzeuge.fzg_BEMERK,tmp_fahrzeuge.fzg_BESITZ_ST,tmp_fahrzeuge.fzg_BEST_DAT,
tmp_fahrzeuge.fzg_BETRIEB,tmp_fahrzeuge.fzg_BEZ,tmp_fahrzeuge.fzg_BREITE,tmp_fahrzeuge.fzg_BREMSE1,
tmp_fahrzeuge.fzg_BREMSE2,tmp_fahrzeuge.fzg_BREMSTYP,tmp_fahrzeuge.fzg_BUDAT_FLAG,tmp_fahrzeuge.fzg_BU_KOSTART,
tmp_fahrzeuge.fzg_CCM,tmp_fahrzeuge.fzg_CO2,tmp_fahrzeuge.fzg_CO2_G_KM,tmp_fahrzeuge.fzg_CODE_KRFT,
tmp_fahrzeuge.fzg_DBFAHR,tmp_fahrzeuge.fzg_DBSTAND,tmp_fahrzeuge.fzg_DKBANR,tmp_fahrzeuge.fzg_DOK1,
tmp_fahrzeuge.fzg_DOK1TYP,tmp_fahrzeuge.fzg_DREHSTAND,tmp_fahrzeuge.fzg_DREHZAHL,tmp_fahrzeuge.fzg_D_VORLAUF,
tmp_fahrzeuge.fzg_D_ZUGESAGT,tmp_fahrzeuge.fzg_EGTYPDATUM,tmp_fahrzeuge.fzg_EGTYPGEN,tmp_fahrzeuge.fzg_EKBRUTTO,
tmp_fahrzeuge.fzg_EKNETTO,tmp_fahrzeuge.fzg_EMISSION,tmp_fahrzeuge.fzg_EM_NR,tmp_fahrzeuge.fzg_ERSTZULASS,
tmp_fahrzeuge.fzg_EU_CATEG,tmp_fahrzeuge.fzg_EU_SCHAD,tmp_fahrzeuge.fzg_EXTERN,tmp_fahrzeuge.fzg_EXTFZGNR,
tmp_fahrzeuge.fzg_EXTRA1,tmp_fahrzeuge.fzg_EXTRA2,tmp_fahrzeuge.fzg_EXTRA3,tmp_fahrzeuge.fzg_EXTRA4,
tmp_fahrzeuge.fzg_EXTRA5,tmp_fahrzeuge.fzg_EXTRA6,tmp_fahrzeuge.fzg_EXTRAD1,tmp_fahrzeuge.fzg_EXTRAD2,
tmp_fahrzeuge.fzg_EXTRAD3,tmp_fahrzeuge.fzg_EXTRAD4,tmp_fahrzeuge.fzg_EXTRAD5,tmp_fahrzeuge.fzg_EXTRAD6,
tmp_fahrzeuge.fzg_EXTRADATUM,tmp_fahrzeuge.fzg_EXTRATEXT,tmp_fahrzeuge.fzg_FARBCODE,tmp_fahrzeuge.fzg_FARBE,
tmp_fahrzeuge.fzg_FELGE_H,tmp_fahrzeuge.fzg_FELGE_V,tmp_fahrzeuge.fzg_FINPRUEF,tmp_fahrzeuge.fzg_FRISTNR,
tmp_fahrzeuge.fzg_FSCHR,tmp_fahrzeuge.fzg_FZGDRUCK,tmp_fahrzeuge.fzg_F_ART,tmp_fahrzeuge.fzg_F_ARTSCHL,
tmp_fahrzeuge.fzg_F_ART_SCHL,tmp_fahrzeuge.fzg_F_HER_SCHL,tmp_fahrzeuge.fzg_F_TYPSCHL,tmp_fahrzeuge.fzg_F_TYP_SCHL,
tmp_fahrzeuge.fzg_FZGKLASSE,tmp_fahrzeuge.fzg_GAENGE,tmp_fahrzeuge.fzg_GARANTENDE,tmp_fahrzeuge.fzg_GARANTNR,
tmp_fahrzeuge.fzg_GARANT_D,tmp_fahrzeuge.fzg_GETRB_ART,tmp_fahrzeuge.fzg_GETRIEBE,tmp_fahrzeuge.fzg_GETR_CODE,
tmp_fahrzeuge.fzg_GEWICHT,tmp_fahrzeuge.fzg_HERSTELLER,tmp_fahrzeuge.fzg_HND_NEBENK,tmp_fahrzeuge.fzg_HOEHE,
tmp_fahrzeuge.fzg_HUNR,tmp_fahrzeuge.fzg_IC_AUFTRAG,tmp_fahrzeuge.fzg_IDENTNR,tmp_fahrzeuge.fzg_IGNOREDAT,
tmp_fahrzeuge.fzg_INFO,tmp_fahrzeuge.fzg_IN_HANDEL,tmp_fahrzeuge.fzg_IST_DIFF,tmp_fahrzeuge.fzg_KBAHERST,
tmp_fahrzeuge.fzg_KBANR,tmp_fahrzeuge.fzg_KENNZ,tmp_fahrzeuge.fzg_KMH_MAX,tmp_fahrzeuge.fzg_KMSTAND,
tmp_fahrzeuge.fzg_KM_OR_STD,tmp_fahrzeuge.fzg_KRAFTSTOFF,tmp_fahrzeuge.fzg_KRSTAUFBER,tmp_fahrzeuge.fzg_KST_CODE,
tmp_fahrzeuge.fzg_KTYPNR,tmp_fahrzeuge.fzg_KW,tmp_fahrzeuge.fzg_L100AGO,tmp_fahrzeuge.fzg_L100IGO,
tmp_fahrzeuge.fzg_L100KOMBI,tmp_fahrzeuge.fzg_LAENDAT,tmp_fahrzeuge.fzg_LAENGE,tmp_fahrzeuge.fzg_LAG_STATUS,
tmp_fahrzeuge.fzg_LAUDAT,tmp_fahrzeuge.fzg_LEERGEW,tmp_fahrzeuge.fzg_LEISTGEW,tmp_fahrzeuge.fzg_LFDNR,
tmp_fahrzeuge.fzg_LFSCHRDAT,tmp_fahrzeuge.fzg_LHUDAT,tmp_fahrzeuge.fzg_LIEF_ZEIT,tmp_fahrzeuge.fzg_LISTENPR,
tmp_fahrzeuge.fzg_LSPDAT,tmp_fahrzeuge.fzg_LUVVDAT,tmp_fahrzeuge.fzg_MAXGEW,tmp_fahrzeuge.fzg_MERKMAL,
tmp_fahrzeuge.fzg_MID_NR,tmp_fahrzeuge.fzg_MIKE_NR,tmp_fahrzeuge.fzg_MODELL,tmp_fahrzeuge.fzg_MOTORCODE,
tmp_fahrzeuge.fzg_MOTORKAT,tmp_fahrzeuge.fzg_MOTORNR,tmp_fahrzeuge.fzg_NAECHSTEAU,tmp_fahrzeuge.fzg_NAECHSTEHU,
tmp_fahrzeuge.fzg_NAECHSTEKL,tmp_fahrzeuge.fzg_NAECHSTESP,tmp_fahrzeuge.fzg_NEU_STATUS,tmp_fahrzeuge.fzg_NUTZLAST,
tmp_fahrzeuge.fzg_N_BILDMAIN,tmp_fahrzeuge.fzg_OHNESP_KEY,tmp_fahrzeuge.fzg_ORIG_JN,tmp_fahrzeuge.fzg_PKW_BIKE,
tmp_fahrzeuge.fzg_PS,tmp_fahrzeuge.fzg_RADIOCODE,tmp_fahrzeuge.fzg_RAEDER,tmp_fahrzeuge.fzg_REIFENGR,
tmp_fahrzeuge.fzg_REIFENHINT,tmp_fahrzeuge.fzg_REIFENP57B,tmp_fahrzeuge.fzg_REIFENVORN,tmp_fahrzeuge.fzg_REIFEN_H,
tmp_fahrzeuge.fzg_REIFEN_V,tmp_fahrzeuge.fzg_RESERV_BIS,tmp_fahrzeuge.fzg_RFH_TERMIN,tmp_fahrzeuge.fzg_SIMPLE2P,
tmp_fahrzeuge.fzg_SITZE,tmp_fahrzeuge.fzg_SOFORTZAHL,tmp_fahrzeuge.fzg_SONST,tmp_fahrzeuge.fzg_SPERRE,
tmp_fahrzeuge.fzg_SPTROTZHU,tmp_fahrzeuge.fzg_STANDORT,tmp_fahrzeuge.fzg_STAND_SEIT,tmp_fahrzeuge.fzg_STD_STAND,
tmp_fahrzeuge.fzg_STEHPLATZ,tmp_fahrzeuge.fzg_STEUER1,tmp_fahrzeuge.fzg_STEUER2,tmp_fahrzeuge.fzg_STEUER3,
tmp_fahrzeuge.fzg_STUETZLAST,tmp_fahrzeuge.fzg_SUCHNR,tmp_fahrzeuge.fzg_S_TAG_KOST,tmp_fahrzeuge.fzg_TACHO,
tmp_fahrzeuge.fzg_TACHONR,tmp_fahrzeuge.fzg_TACHOSTAND,tmp_fahrzeuge.fzg_TACHOTYP,tmp_fahrzeuge.fzg_TANKRAUM,
tmp_fahrzeuge.fzg_TAXIMIET,tmp_fahrzeuge.fzg_TECHACHS1,tmp_fahrzeuge.fzg_TECHACHS2,tmp_fahrzeuge.fzg_TECHACHS3,
tmp_fahrzeuge.fzg_TECHGEW,tmp_fahrzeuge.fzg_TEIL2,tmp_fahrzeuge.fzg_TERMINV,tmp_fahrzeuge.fzg_TOLERANZ,
tmp_fahrzeuge.fzg_TYP,tmp_fahrzeuge.fzg_TYP3,tmp_fahrzeuge.fzg_TYP_AU,tmp_fahrzeuge.fzg_TXTAUFBAU,
tmp_fahrzeuge.fzg_TYPVARIVER,tmp_fahrzeuge.fzg_TÜVEXPORT,tmp_fahrzeuge.fzg_UEBERFUEHR,tmp_fahrzeuge.fzg_UEBERF_EK,
tmp_fahrzeuge.fzg_UF_INCL,tmp_fahrzeuge.fzg_UNFALLHIST,tmp_fahrzeuge.fzg_UNTERTYP,tmp_fahrzeuge.fzg_UVV,
tmp_fahrzeuge.fzg_VARI_TXT,tmp_fahrzeuge.fzg_VERKAUFT,tmp_fahrzeuge.fzg_VER_TXT1,tmp_fahrzeuge.fzg_VER_TXT2,
tmp_fahrzeuge.fzg_VK1BRUTTO,tmp_fahrzeuge.fzg_VK2BRUTTO,tmp_fahrzeuge.fzg_VK3BRUTTO,tmp_fahrzeuge.fzg_VK_BEDING,
tmp_fahrzeuge.fzg_VK_DATUM,tmp_fahrzeuge.fzg_VORBESITZ,tmp_fahrzeuge.fzg_WGRUPPE,tmp_fahrzeuge.fzg_X_KM1,
tmp_fahrzeuge.fzg_X_KM2,tmp_fahrzeuge.fzg_X_KM3,tmp_fahrzeuge.fzg_X_KM4,tmp_fahrzeuge.fzg_ZGEB_INCL,
tmp_fahrzeuge.fzg_ZUL_GEBUEH,tmp_fahrzeuge.fzg_ZYLINDER,tmp_fahrzeuge.fzg_WRTLFDNR,tmp_fahrzeuge.fzg_MITZYKLUS,
tmp_fahrzeuge.fzg_VORFELDNR
from tmp_fahrzeuge
left join tmp_adressen on tmp_fahrzeuge.fzg_adrnr=tmp_adressen.kd_lfdnr
left join tmp_anreden on tmp_adressen.kd_anredenr=tmp_anreden.anr_lfdnr
Allerdings hab ich so das Gefühl, dass hier vielleicht für Zeos zuviele Felder sind. Immerhin 330. Hab ich vorher gar nicht drauf geachtet. Gibt es denn bei Zeos eine Obergrenze für die Felderanzahl? Im MySQL-Administrator gibt's ja keine Probleme, somit kann MySQL das sehrwohl.

Furtbichler 28. Jun 2012 08:30

AW: Fehler bei Bereichsprüfung
 
Und? Funktioniert es?

PS: Ich persönlich bin an der exakten Query gar nicht interessiert. Du hättest sie auch kürzen können, denn zumindest meine Phantasie reicht aus, um mir das vorzustellen. ;-)

Captnemo 28. Jun 2012 09:56

AW: Fehler bei Bereichsprüfung
 
Achso, hätte ich vielleicht dazu schreiben sollen. Funktioniert natürlich nicht. Es kommt excakt die gleich Fehlermeldung.
Also liegt es nicht an den Wildcards sondern wohl eher an das anzahl der Felder im SQL-Result. Das meine Frage: Weiß jemand ob es bei Zeos eine Obergrenze gibt, was die Anzahl der Felder im Query-Result angeht.

p80286 28. Jun 2012 10:28

AW: Fehler bei Bereichsprüfung
 
Zufällig geht es auch hier um ZEOS, demnach scheint es sich dabei um ein echte Krankheit zu handeln.

Hast Du es einmal mit abgeschalteter Bereichsprüfung versucht?

Gruß
K-H

Captnemo 28. Jun 2012 13:34

AW: Fehler bei Bereichsprüfung
 
Wenn du Projektoptionen - Compiler - Laufzeitfehler - Bereichsüberprüfung meinst, den hab ich schon die ganze Zeit abgeschaltet.

Ich habe jetzt die ganze Routine umgestellt. Ziel war, dem Benutzer aus den 3 Tabellen eine Feldauswahl zur Verfügung zu stellen, und hinterher die Daten entsprechend seiner Auswahl zu übernehmen. Ich mußte aber auch sicherstellen, dass mittels join die Daten der 3 Tabellen zusammen zu führen ist.

Im erten Ansatz wollte einfach alle Daten der 3 Tabellen erst einmal in meine MySQL-DB zu übernehmen um dann dem Benutzer seien Auswahl anzeigen zu lassen. Das hat aber auf Grund der hohen Feldanzahl zu dem bekannten Fehler geführt.

Jetzt bin anders herangegangen. Ich lese einfach vorab alle Feldnamen aus den 3 Tabellen aus, und übertrage diese in die Comboboxen für die Auswahl des Users. Erst wenn die Daten dann übernommen werden sollen, erstelle ich mir die TMP-Tabellen, aber eben nur mit den Feldern, die tatsächlich benötigt werden.
Dann klappt auch die Abfage mit Platzhaltern und (!) mit zwei JOIN's in der Abfrage (Fahrzeug -> Kunden -> Anrede).

Problem ist also für mich gelöst. Erkenntnis daraus: Ab einer gewissen Felderanzahl kommt Zeos einfach an seine Grenzen.
Sicherlich ließe sich in den Sources von Zeos das Problem ergründen, aber dazu fehlt mir jetzt die Muße.

(Wird Zeos eigentlich noch weiterentwickelt?) <- Nur mal so am Rande.

Captnemo 28. Jun 2012 22:11

AW: Fehler bei Bereichsprüfung
 
Eine Rückfrage im Forum ZeosLib hat alles bestätigt. Es wird je Row im Query-Result max. 32 kb reserviert. Interessant dabei ist, dass jeweils der maximal benötigte Platz eines Feldes verwendet wird, unabhängig ob sie NULL, leer, nur 2 Zeichen oder bis zu ihrer definierten Größe belegt ist. Das heist eine Feld varchar(200) belegt bei der Abfrag über Zeos immer 200 Byte im Speicher, egal was drin steht.
Das erklährt bei 330 Feldern schon so einiges (hab's jetzt aber nicht nachgerechnet).

Hier der Link zum Thread (wenn das hier an dieser Stelle nicht erlaubt, bitte bescheid geben)
http://zeos.firmos.at/viewtopic.php?t=3531

Ab Zeos 7 soll der Buffer auf 64 kb erhöht sein.

Uwe Raabe 29. Jun 2012 09:35

AW: Fehler bei Bereichsprüfung
 
Zitat:

Zitat von Captnemo (Beitrag 1172911)
Ab Zeos 7 soll der Buffer auf 64 kb erhöht sein.

Was das Problem im Grunde aber nicht löst.

Captnemo 29. Jun 2012 16:58

AW: Fehler bei Bereichsprüfung
 
Richtig. Und im Zuge der Entwicklung, und der immer größer werdenden Speicher, und der zu verwaltenden Datenmengen, ist das Problem damit nur weiter in die Zukunft verlagert.

Noch besser wäre es natürlich einen solchen Fehler anzufangen, und ggf. wenigstens eine Teilmenge zurückzuliefern. Und noch besser wäre es, wenn innerhalb der Komponenten der Buffer vom Entwickler festgelegt werden könnte.

Aber immerhin. Jetzt, wo ich davon weiß, finde ich Möglichkeiten mir zu helfen. Bedeutet zwar mehr Programmieraufwand, aber damit kann ich leben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 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