AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL - Feld nicht gefunden
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL - Feld nicht gefunden

Ein Thema von mjenke · begonnen am 1. Sep 2011 · letzter Beitrag vom 1. Sep 2011
Antwort Antwort
mjenke

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

MySQL - Feld nicht gefunden

  Alt 1. Sep 2011, 10: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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MySQL - Feld nicht gefunden

  Alt 1. Sep 2011, 10:51
Ich Tipp mal darauf das diese MySQL-Version die Felder mal wieder fehlerhaft vom Typ zurückliefert und die BDE damit nicht zurecht kommt.

Mein Tipp: Schmeiß die hoffnungslos veraltete BDE weg und nimm notfalls (wenn du die SW nicht verkaufst) ZEOS für den direkten MySQL-Zugriff.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#3

AW: MySQL - Feld nicht gefunden

  Alt 1. Sep 2011, 12:04
Ich stand zufälligerweise gerade vor dem gleichen Problem, das ist offensichtlich ein Zeichensatz/Collation Problem welches die BDE mit den MySQL Tabellen hat.

Bei mir hat ein Downgrade auf den MySQL Connector/ODBC 3.15 geholfen.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:46 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