Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Datenbank-Komponente verursacht Schutzverletzung ??? !!! (https://www.delphipraxis.net/96840-ado-datenbank-komponente-verursacht-schutzverletzung.html)

Uwe.F. 31. Jul 2007 16:10

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:
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.
Die Fehlermeldung ist im Anhang.

Hat jemand eine Idee, was ich tun kann, um die Schutzverletzung zu vermeiden?

Beste Grüße,
Uwe

marabu 31. Jul 2007 16:41

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

Uwe.F. 31. Jul 2007 16:50

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

marabu 31. Jul 2007 17:24

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

alzaimar 31. Jul 2007 19:10

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).

Uwe.F. 31. Jul 2007 19:41

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:

Zur Sicherheit solltest Du dir die neueste ADO-Version besorgen (gibts bei Microsoft).
Gibt's bei Microsoft Delphi-Komponenten ???

Beste Grüße,
Uwe

marabu 31. Jul 2007 20:32

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:
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;
Freundliche Grüße

Bernhard Geyer 31. Jul 2007 20:39

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
 
Zitat:

Zitat von Uwe.F.
Zitat:

Zur Sicherheit solltest Du dir die neueste ADO-Version besorgen (gibts bei Microsoft).
Gibt's bei Microsoft Delphi-Komponenten ???

Nein, aber die letzte Version der ADO/OLE DB-Systemkompos in Form der MDAC-Installation. Die Updates für die Jet-Engine gibt dort in der Gegend ebenfalls. Aber i.d.R. liegen Sicherheitslücken vor so das diese per Windows Update automatisch verteilt werden.

alzaimar 31. Jul 2007 20:58

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
 
Zitat:

Zitat von Bernhard Geyer
Die Updates für die Jet-Engine gibt dort in der Gegend ebenfalls. Aber i.d.R. liegen Sicherheitslücken vor so das diese per Windows Update automatisch verteilt werden.

Ich befürchte das auch, aber vielleicht sind die Rechner veraltet. Als erstes würde ich den ersten Kontakt mit ADO nach dem Application.Run implementieren, um dann zu schauen, woran es wirklich liegt.

Uwe.F. 31. Jul 2007 21:26

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???
 
Zitat:

Zitat von alzaimar
Als erstes würde ich den ersten Kontakt mit ADO nach dem Application.Run implementieren, um dann zu schauen, woran es wirklich liegt.

Ich fasse ADO in der Testapplikation zur Demo des Fehlers (siehe oben) gar nicht an. Beim Start der Applikation geschieht die Initialisierung der ADO-Routinen wohl automatisch.

@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:
  Application.Initialize;
  halt(0);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
Morgen werde ich es mal in der eigentlichen Applikation testen.

Beste Grüße,
Uwe


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.
Seite 1 von 2  1 2      

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