Autor Beitrag
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Fr 15.02.13 00:31 
Ich wollte mal über einen besonderen Effekt berichten, der mir letztens passierte.

Bei einem Programm -ich arbeite häufig mit Datenbanken (meist ODBC, weil es für mich einfacher ist (Delphi 5)) habe ich eine Datenbankformular angelegt und eine Database-Komponente und diverse davon abhängige Tabellen definiert. Nun habe ich für die Database-Komponenten eine AfterConnect-Prozedur geschreiben, in der die Tabellen geöffnet weden, die zu der Database gehören. Beim Schließen des Programms stürzte dieses mit Runtime Error 216 ab. Nach langem Probieren mit dem Debugger, wo der Fehler lag, habe ich festgestellt, dass die Datenbank sich nicht schließen ließ udn den Fehler produzierte. Als ich die gleiche Prozedur wie bei AfterConnect der Datenbank als BeforeDisconnect der Database, allerdings diesmal eben das Schließen der Tabellen implementierte, war der Fehler weg.

Sicher, werdne jetzt einige sage. Ist doch klar, was man erst öffnet, muss man anschließend auch schließen. Aber die Tabellen werden im Verlauf des Programms mehrfach geöffnet und wieder geschlossen, so dass man nicht 100% sicher sien kann, welchen Zustand jede Tabelle dieser Database hat. Man wird eben immer ein wenig schlauer.

Ds wollte ich nur mal kund tun.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Sa 16.02.13 21:05 
Wenns der gleicher Fehler wie bei mir ist dann liegt es daran das der Screen.Curser beim schließen der DB-Verbindung (in den Untiefen der BDE-Source) gesetzt wird obwohl die globale Screen-Instanz schon freigegeben wurde.
Tranx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 17.02.13 01:03 
Ich denke auch, dass es irgendwie etwas mit einem zu frühen Entfernen einer Komponenten zu tun hat, welche dann bei Aufruf einer davon abhängigen Komponente ins Leere läuft. Ich habe festgestellt, dass der Fehler nicht auftritt, wenn man eben keine After Connect-Prozedur definiert. Oder eben - wie ich gemacht - eine BeforeDisconnect-Prozedur mit der gleichen Reihenfolge der Datentabellen-Schließung, wie vorher bei der AfterConnect-Prozedur als Datentabellen-Öffnungsreihenfolge.

Was hat das gedauert, bis ich diesen Fehler gefunden habe. Mann, da wanderete der Debugger vielleicht in diversen Systemrountinen herum.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.