Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE (https://www.delphipraxis.net/179290-zugruffsverletzung-bei-abfrage-von-text-feldern-aus-mysql-mit-bde.html)

Bbommel 25. Feb 2014 09:11

Datenbank: MySQL • Version: 5.5.8 • Zugriff über: ODBC/BDE

Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Hallo zusammen,

ja, es geht um die böse BDE und ja, es geht um das nervige ODBC. ;)

Es geht hier um eines dieser Alt-Projekte. Ich habe das noch zu Zeiten entwickelt, als ich das Ganze noch nicht beruflich gemacht hatte und mir einiges an Erfahrung fehlte, die ich heute habe - daher ist es auch an manchen Stellen nicht so geschickt programmiert, wie ich das (hoffentlich) heute machen würde. Das nur vorweg, warum ich die BDE nicht mal eben so austauchen kann, denn die steckt da an zu vielen Stellen drin.

Es geht um eine Art Mini-ERP-System, das ich vor... ach... 12, 13 Jahren mal für die kleine Firma gebastelt habe. Läuft seitdem eigentlich ganz wunderbar. Jetzt hatten sie aber einen kleinen Änderungswunsch, der eigentlich auch schnell zu realisieren gewesen wäre. Aber: wenn ich das Programm mit meinem aktuellen XE3 kompiliere und dann starte, kommt jedes Mal, wenn das Programm auf ein TEXT-Feld zugreifen will, eine Zugriffsverletzung. Ansonsten funktioniert der Datenbankzugriff problemlos.

Ich habe schon versucht, den MySQL-ODBC-Treiber zu aktualisieren, aber das hat nichts geholfen.

So sieht der Code aus, wobei der ja jetzt nicht so spektakulär ist:

Delphi-Quellcode:
    with AbfrageBestellung.SQL do begin
      Add ('SELECT lieferantID, kundeID, bestellungNr,');
      Add ('      YEAR(bestellungDatum) AS bestellungJahr,');
      Add ('      MONTH(bestellungDatum) AS bestellungMonat,');
      Add ('      DAYOFMONTH(bestellungDatum) AS bestellungTag,');
      Add ('      bestellungLiefertermin, mitarbeiterID,');
      Add ('      bestellungFax, bestellungKundenschutz,');
      Add ('      bestellstatusBez, bestellungLieferschein, bestellungHinweise,');
      Add ('      Bestellung.bestellstatusID AS statusID');
      Add ('FROM Bestellung LEFT JOIN BestellStatus USING (bestellstatusID)');
      Add ('WHERE BestellungID='+inttostr(editID));
    end;
    AbfrageBestellung.Open;
    kontaktID:=AbfrageBestellung['lieferantID'];
    kontaktKID:=AbfrageBestellung['kundeID'];
    EditBestellungNr.Text:=AbfrageBestellung['bestellungNr'];
    EditBestellungDatum.Text:=inttostr(AbfrageBestellung['bestellungTag'])+'.'+inttostr(AbfrageBestellung['bestellungMonat'])+'.'+inttostr(AbfrageBestellung['bestellungJahr']);
    ComboLiefertermin.Text:=AbfrageBestellung['bestellungLiefertermin'];
    ComboMitarbeiter.KeyValue:=AbfrageBestellung['mitarbeiterID'];
    LabelBestellungsStatus.Caption:=AbfrageBestellung['bestellstatusBez'];
    if AbfrageBestellung['bestellungFax']=1 then CheckFax.Checked:=true else CheckFax.Checked:=false;
    if AbfrageBestellung['bestellungLieferschein']=1 then CheckLieferschein.Checked:=true else CheckLieferschein.Checked:=false;
    if AbfrageBestellung['bestellungKundenschutz']=1 then CheckKundenschutz.Checked:=true else CheckKundenschutz.Checked:=false;
    MemoHinweise.Text:=AbfrageBestellung['bestellungHinweise'];  // ******* Hier die AV ******
    [...]
Das Ganze knallt also in der letzten Zeile. Obwohl es halt seit vielen, vielen Jahren eigentlich funktioniert.

Irgendwelche Ideen? Irgendwelche Parameter im ODBC-Treiber, die helfen könnten?

Bis denn
Bommel

Bernhard Geyer 25. Feb 2014 09:58

AW: Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Wieso kompilierst du das nicht mit der gleichen Delphi-Version die du schon vor Jahren verwendet hast?
Jetzt das "mal schnell zum kompilieren" mit XE3 zu machen wird nicht funktionieren da du wegen Unicode/... viele andere Problemstellen haben wirst die du gar noch nicht siehst.

hoika 25. Feb 2014 10:09

AW: Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Hallo,

ist bestellungHinweise vielleicht ein Blob-Feld ?
XE2 und höher, BDE und Blobs, da war doch was ???


Heiko

himitsu 25. Feb 2014 10:13

AW: Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Oder zumindestens maximal mit D2007 (das Letzte ohne Unicode), bzw. D7 (das Letzte mit der alten IDE und das Erste, auf das Emba noch Zugriff hat), aber wegen nur einer kleinen Änderung und wenn sonst alles läuft, dann wäre die selbe Delphi-Version schon noch das Problemloseste.


Zugriffsverletzung?
Welche denn?
Irgendwas mit bei Adresse 0000**** vielleicht?
Und was sagt der Debugger dazu? (eventuell auch mit DebugDCUs, was im Delphi ja nun, kranker Weise, per Standard aktiv ist)



[add]
Zitat:

wenn das Programm auf ein TEXT-Feld zugreifen will
Das klingt nach BLOB.

Bbommel 25. Feb 2014 10:50

AW: Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1249465)
Wieso kompilierst du das nicht mit der gleichen Delphi-Version die du schon vor Jahren verwendet hast?

Weil ich die nicht mehr habe und mittlerweile auch gar nicht mehr wüsste, mit welcher Lizenz ich die damals hatte. Ist aber an der Stelle auch egal, denn...

Zitat:

Zitat von Bernhard Geyer (Beitrag 1249465)
Jetzt das "mal schnell zum kompilieren" mit XE3 zu machen wird nicht funktionieren da du wegen Unicode/... viele andere Problemstellen haben wirst die du gar noch nicht siehst.

...den Schritt habe ich mal irgendwann gemacht. Ich habe das Programm damals noch relativ sauber vom BDS2006 auf D2007 und D2009 migriert und mit letzterem ja auch die Umstellung auf Unicode mitgemacht. Ich habe noch 2011 Änderungen am Programm gemacht, die ich dann auch ausgeliefert habe und mit denen die arbeiten.

Zitat:

Zitat von hoika (Beitrag 1249470)
ist bestellungHinweise vielleicht ein Blob-Feld ?
XE2 und höher, BDE und Blobs, da war doch was ???

Jo, TEXT und BLOB ist irgendwie ähnlich oder technisch das gleiche oder so, oder?

Genau das, was du geschrieben hast, meinte ein Kollege eben: "Hm, ja, BDE und Blob, da war neulich irgendwas". Aber was? :)

Hmmm... gerade mal mit den Infos im Hinterkopf etwas gegoogelt und gesehen, dass das XE3 Update 1 den Bug korrigiert haben soll (hier steht das). Hatte das noch nicht installiert, werde ich dann mal nachholen.

Wenn aber jemand einen Workaround kennt, wäre ich auch noch für Hinweise dankbar.

Wenn gar nichts hilft, könnte ich natürlich auf Bernhards Vorschlag zurückkommen und D2009 wieder ausgraben. Ist uwar nicht die ursprüngliche Version, aber eine, bei der das Programm definitiv noch funktioniert hatte.

Bis denn
Christoph

himitsu 25. Feb 2014 11:00

AW: Zugruffsverletzung bei Abfrage von "Text"-Feldern aus MySQL mit BDE
 
Beim Kauf von Delphi bekommt man seit einigen Jahren (auch schon bei XE3) Lizenzen für alle möglichen Vorgängerversion der selben Edition gratis dazu und die Installer kann man sich dann bei Emba runterladen.
Für XE3 Prof sind das D7, D2007 und dann alles ab D2009. (auf die Borland-Installer/Lizenzierung vor Delphi 7 haben die leider keinen Zugriff)

Schau mal in "meine registrierten Produkte", ob da schon die Lizenzen drinstehn und notfalls kannst'e dich auch an germany.info@embarcadero.com wenden.


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