![]() |
Datenbank: MS Access • Zugriff über: Gar nicht in diesem Beispiel, Fehler tritt trotzdem auf
ADO Datenbank-Komponente verursacht Schutzverletzung ??? !!!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Kollegen,
ich bekommen in meinem Programm nach Application.Terminate Fehlermeldungen (Schutzverletzung), und habe nach einigen Tests die ADO-Unterstützung von D7 als Ursache gefunden. Folgendes minimalistisches Programm erzeugt diese Schutzverletzungen:
Delphi-Quellcode:
program Project1;
uses Forms, Unit1 in 'Unit1.pas'; begin Application.Initialize; Application.CreateForm(TForm1, Form1); If not Fehler then Application.Run; // der Notausstieg im Fehlerfall end.
Delphi-Quellcode:
Die Fehlermeldung ist im Anhang.
unit Unit1;
interface uses Windows, Forms, DB, ADODB, Classes; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOTable1: TADOTable; private public end; var Form1: TForm1; implementation end. Hat jemand eine Idee, was ich tun kann, um die Schutzverletzung zu vermeiden? Beste Grüße, Uwe |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Hallo Uwe,
in dem von dir gezeigten Code ist gar kein Terminate mehr enthalten. Bist du sicher, dass der Fehler nicht am ConnectionString liegt? Kannst du dein Mini-Projekt mal komplett anhängen, damit man die Einstellungen der Komponenten begutachten kann? Freundliche Grüße |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Hier ist es ... Ich habe einfach ein neues Projekt angelegt, die ADO's drauf gezogen, und getestet... Keine Datenbank ausgewählt, keine Konfig - nix. In meinem eigentlichen Programm tritt der gleiche Fehler auf, unabhängig, ob die Access-Datenbank über ADO angesprochen wird oder nicht. Beste Grüße, Uwe |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Hallo,
als erstes ist mir aufgefallen, dass dein Exe-Modul bei mir abschmiert. Dann wollte ich das Projekt selbst übersetzen und bemerkte, dass du die Übersetzung mit Laufzeit-Packages eingeschaltet hast und mir das Package FormHelpD7 fehlt. Als ich die Option ausgeschaltet habe wurden auch bei mir Exceptions (Fehler 216) geworfen. Nicht weiter verwunderlich, da die Methode Run von dir zuverlässig ausgeklammert wurde. Damit unterbleibt die Verkettung einer Exit-Prozedur und die Nachrichtenschleife wird nicht in Gang gesetzt. Die Methode Run ist viel zu wichtig, als dass du sie einfach eliminieren kannst. Wenn du deine Anforderungen beschreiben kannst, dann gibt es vielleicht einen anderen und besseren Weg zur Ereichung deines Ziels. Freundliche Grüße |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Hi marabu, hi Uwe,
ich kenne das Problem, allerdings in älteren Versionen. Ist die ADOTable schon im Designer geöffnet? Wenn ja, dann setze die Eigenschafft 'Active' im Designer auf False und öffne die Tabelle auf der form z.B. im OnActive-Event. Ich musste bei mir um den ersten Zugriff auf Daten einer ADO-Komponente einen Try-Except-Block packen, damit die Anwendung funktioniert. Ich kann mich aber seit längerem nicht mehr an so einen Fehler erinnern. Zur Sicherheit solltest Du dir die neueste ADO-Version besorgen (gibts bei Microsoft). |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Hallo Zusammen,
also - meine App beginnt nach Application.CreateForm(etwa 20 Forms) mit einer aufwändigen Initialisierung. Da wird das Vorhandensein von Hardware abgefragt. Und wenn vorhanden, wird eine Konfiguration aus der Hardware gelesen. Und wenn hier ein Fehler auftritt (Hardware nicht da oder funktioniert nicht richtig), darf die Applikation nicht starten. Daher wird vor Application.Run entschieden, ob die Applikation starten darf. Wenn nicht, kriegt der Anwender eine Fehlermeldung und die App wird mit Halt(0) gestoppt. Das funktionierte seit Jahren völlig problemlos. Bis zu dem Zeitpunkt, an dem ich die ADO Datenbank hinzu fügte. Aufgefallen ist das Problem erst jetzt (durch Zufall), weil erstmalig ein Hardwarefehler auftrat. Die Version ohne ADO geht dagegen einwandfrei, und wenn ich ADO auskommentiere und die Komponenten von Form und uses-Zeile entferne, geht's auch wieder. Die ADOTable ist im Designer wie folgt eingestellt: -Active: false -Connectionstring: '' // leer ADOConnection: - connected: false Zitat:
Beste Grüße, Uwe |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Hallo Uwe,
der ganze VCL-Code ist in der Regel symmetrisch ausgelegt - zu jedem Initialize gehört ein Finalize etc. Wäre es nicht eine gute Idee die Ressourcenbeschaffung außerhalb des VCL-Codes zu erledigen?
Delphi-Quellcode:
Freundliche Grüße
function Hardware: Boolean;
begin // ... end; procedure Check(succeeded: Boolean); begin if not succeeded then Halt; end; begin Check(Hardware); Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; |
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Zitat:
|
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Zitat:
|
Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
Zitat:
@marabu: die Initilaisierung ist bereits ausgelagert wie in dem Beispiel gezeigt. Du hast mich aber auf eine Idee gebracht: ich lege die Initialisierung vor Application.Initialize oder Application.CreateForm(TForm1, Form1). Der erste Versuch scheint sogar zu funktionieren (in meiner Minimalapplikation):
Delphi-Quellcode:
Morgen werde ich es mal in der eigentlichen Applikation testen.
Application.Initialize;
halt(0); Application.CreateForm(TForm1, Form1); Application.Run; Beste Grüße, Uwe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz