AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Datenbank-Komponente verursacht Schutzverletzung ??? !!!
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Datenbank-Komponente verursacht Schutzverletzung ??? !!!

Ein Thema von Uwe.F. · begonnen am 31. Jul 2007 · letzter Beitrag vom 1. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Uwe.F.

Registriert seit: 19. Apr 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#1

ADO Datenbank-Komponente verursacht Schutzverletzung ??? !!!

  Alt 31. Jul 2007, 17:10
Datenbank: MS Access • Zugriff über: Gar nicht in diesem Beispiel, Fehler tritt trotzdem auf
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
Miniaturansicht angehängter Grafiken
ado_190.jpg  
Uwe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 17:41
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
  Mit Zitat antworten Zitat
Uwe.F.

Registriert seit: 19. Apr 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 17:50
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
Angehängte Dateien
Dateityp: zip testprojekt_schutzverletzung_182.zip (11,7 KB, 4x aufgerufen)
Uwe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 18:24
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 20:10
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).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Uwe.F.

Registriert seit: 19. Apr 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 20:41
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
Uwe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 21:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 21:39
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 21:58
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Uwe.F.

Registriert seit: 19. Apr 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: ADO Datenbank-Komponente verursacht Schutzverletzung ???

  Alt 31. Jul 2007, 22:26
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
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:34 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