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