Einzelnen Beitrag anzeigen

mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

MySQL - Feld nicht gefunden

  Alt 1. Sep 2011, 11:43
Datenbank: MySQL • Version: 5.x • Zugriff über: ODBC
Hallo, alle miteinander,


ich habe ein Problem beim Zugriff auf eine externe MySQL-Datenbank, das ich nicht ganz verstehe. Die gleiche Datenbank lokal bereitet hingegen keine Probleme...

Zur Erläuterung:

Ich habe auf einem lokalen MySQL-Server (Version 5.5.8) eine Datenbank, in der unter anderem eine Tabelle mit folgendem Aufbau enthalten ist:

Code:
CREATE TABLE `tbfhe` (
  `id` int(10) NOT NULL auto_increment,
  `idlief` int(10) default NULL,
  `seite` int(10) default NULL,
  `nr` int(10) default NULL,
  `tocub` text,
  `leitsatz` text,
  `fstag` int(10) default NULL,
  `fsmonat` int(10) default NULL,
  `fsjahr` int(10) default NULL,
  `akzsen` varchar(20) default NULL,
  `akzsend` int(10) default NULL,
  `akzbuch` varchar(20) default NULL,
  `akznr` varchar(20) default NULL,
  `akznrd` int(10) default NULL,
  `akzjahr` int(10) default NULL,
  `akzzus` varchar(30) NOT NULL default '',
  `eintyp` varchar(30) default NULL,
  PRIMARY KEY (`id`)
);
Die Verbindung zur Datenbank wird über ODBC (MySQL ODBC 5.1 Treiber) aufgebaut.
Über ein TQuery-Objekt setze ich folgende Abfrage auf die Datenbank ab:

Code:
SELECT DISTINCT t1.*, t2.band, t2.lief FROM tbfhe t1 LEFT JOIN tbandlief t2 ON t1.idlief = t2.id LEFT JOIN tnormen t3 ON t1.id = t3.idbfhe LEFT JOIN tgesetze t4 ON t4.id = t3.idgesetz WHERE t1.idlief = 177 ORDER BY t1.nr
Wenn ich die Daten auslese und weiterverarbeite, ist auch alles in Ordnung:

Delphi-Quellcode:
with FQuery do begin
    SQL.Clear;
    SQL.Add ( Query );
    Open;
    if RowsAffected > 0 then begin
      SetLength ( BFHE^, RowsAffected );
      counter := 0;
      while not EOF do begin
        BFHE^[counter].ID := FieldByName ( 'id' ).AsInteger;
        BFHE^[counter].IDLIEF := FieldByName ( 'idlief' ).AsInteger;
        BFHE^[counter].SEITE := FieldByName ( 'seite' ).AsInteger;
        BFHE^[counter].NR := FieldByName ( 'nr' ).AsInteger;
        BFHE^[counter].TOCUB := _recodeFromMySQL ( FieldByName ( 'tocub' ).AsString );
        BFHE^[counter].LEITSATZ := _recodeFromMySQL ( FieldByName ( 'leitsatz' ).AsString );
        BFHE^[counter].FSTAG := FieldByName ( 'fstag' ).AsInteger;
        BFHE^[counter].FSMONAT := FieldByName ( 'fsmonat' ).AsInteger;
        BFHE^[counter].FSJAHR := FieldByName ( 'fsjahr' ).AsInteger;
        BFHE^[counter].AKZSEN := _recodeFromMySQL ( FieldByName ( 'akzsen' ).AsString );
        BFHE^[counter].AKZSEND := FieldByName ( 'akzsend' ).AsInteger;
        BFHE^[counter].AKZBUCH := _recodeFromMySQL ( FieldByName ( 'akzbuch' ).AsString );
        BFHE^[counter].AKZNR := _recodeFromMySQL ( FieldByName ( 'akznr' ).AsString );
        BFHE^[counter].AKZNRD := FieldByName ( 'akznrd' ).AsInteger;
        BFHE^[counter].AKZJAHR := FieldByName ( 'akzjahr' ).AsInteger;
        BFHE^[counter].AKZZUS := _recodeFromMySQL ( FieldByName ( 'akzzus' ).AsString );
        BFHE^[counter].EINTYP := _recodeFromMySQL ( FieldByName ( 'eintyp' ).AsString );
        BFHE^[counter].BAND := FieldByName ( 'band' ).AsInteger;
        BFHE^[counter].LIEF := FieldByName ( 'lief' ).AsInteger;
        SetLength ( BFHE^[counter].STICHWORTE, 0 );
        SetLength ( BFHE^[counter].NORMEN, 0 );
        SetLength ( BFHE^[counter].GRPMITGL, 0 );
        Inc ( counter );
        Next;
      end;
    end;
    Close;
  end;
Problematisch wird es erst, wenn ich auf die externe MySQL-Datenbank zugreife. Diese Datenbank wurde mit den gleichen CREATE-Statements (gleiche SQL-Datei) erzeugt und auch mit den gleichen Daten gefüllt (durch das gleiche Perl-Skript, mit dem ich die Daten in die lokale MySQL-DB geschrieben habe). Datentechnisch sind sie also identisch.

Die externe MySQL-Datenbank läuft auf einem MySQL-Server der Version 5.0.51a.

Das eigentliche Problem ist nun: Alle Felder, die als "text" angelegt sind (also "tocub", "leitsatz" etc.), werden hier nicht gefunden. Sie tauchen in der FieldList des TQuery-Objekts überhaupt nicht auf.

In der Datenbank sind sie aber vorhanden und gefüllt, denn mit anderen Programmen (Perl) kann ich auf sie zugreifen und sie auslesen...

Kennt jemand von Euch dieses Verhalten?


Vielen Dank für die Hilfe!!

Matthias
Matthias Jenke
  Mit Zitat antworten Zitat