![]() |
Datenbank: MS SQL Server • Version: 2005 • Zugriff über: ADO
DataModule-Fehler : Zugriffsverletzung durch externe Methode
Hallo,
ich habe meine Datenquellen nachträglich in ein Datamodule ausgelagert. Jetzt bekomme ich immer eine "Zugriffsverletzung" beim Start der Anwendung, sobald eine Methode meines Hauptformulars versucht, auf die Datenquellen des Datenmodule-Forms zuzugreifen. Sind die Objekte im Datamodule-Formular quasi "private" und daher von den Procedures des Hauptformulars nicht nutzbar ? 1000 Danke für Tipps an einen Delphi/OO-Anfänger... Gruß FrankG |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
rufst du die methoden im OnCreate auf? wenn ja dann pack das woanders hin denn das datenmodul wird erst nach der form erstellt
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Im OnShow ... kann ich die Erstellungsreihenfolge irgendwo festlegen ?
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
ok wenns im onShow ist kanns daran eig nicht liegen scheibst du auch immer
Delphi-Quellcode:
davor?
Datamodule1.
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Ich habe auch AfterScroll-Ereignisse auf den Datenquellen besetzt, muss quasi einen Filter über einem Table mitführen, sobald der Datencursor eines anderen Tables weiter"fährt"...außerdem setze ich je nach aktiviertem Tab die Datenquelle für meinen DBNavigator um...
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Das passiert im Hauptformular bei FormShow :
Delphi-Quellcode:
Da wird z.b. der DBNavigator mit einer Datenquelle aus DataModule1 besetzt...an der Stelle gibts die Zugriffsverletzung... die TADOConnection auf DataModule1 lasse ich immer aktiviert...
Arbeitsfenster.ActivePage := Tab_Firma;
Initialisieren(DataModule1.Firma_Dataset, DataModule1.restlicherTable_Firma); |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Hallo,
wann genau passiert der Fehler? Beim Programmstart? Dann liegt das daran, dass vom Formular aus schon Routinen im Datamodul aufgerufen werden, wenn das Datamodul noch nicht existiert. Weise die Ereignisroutinen im Formular erst zu Laufzeit zu, nachdem alles erstellt wurde. Das kannst Du (unelegant) in der DPR-Datei vor Application.Run einfügen. OnCreate, OnShow... sind nicht geeignet. Eventuell ginge es auch im OnCreate des Datamoduls, wenn das Formular definitiv vorher erstellt ist. |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
also ich hatte zumindest nen ähnlichen fehler(weiß nciht mehr genau was das für einer war) in meinem aktuellen projekt. dann hab ich einfach den code vom Form1.OnCreate ins Datamodule1.OnCreate gelegt und es geht einwandfrei.
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Der Fehler kommt nur am Anfang 4 mal , das Auslagern des Codes in DataModule1.OnCreate hat nichts gebracht.
Außerdem greift das AfterScroll-Ereignis nicht mehr so wie vor der Auslagerung ins Datenmodul, erst wenn ich einmal weiterscrolle greift der Filter; vorher griff der Filter-Subqery schon beim Initialisieren (bei gleichem Code und gleicher Ereignis-Struktur)... |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Ok,
bin einen Schritt weiter - keine Zugriffsverletzung mehr. Folgende Konstellation: Initalisierungscode weiterhin im OnCreate des DataModuls. In "Projekt/Formulare" steht DataModule als letztes in der Reihe. Allerdings kommt jetzt 4 mal "No Connection string" , muss ich wohl die DBConnect-Komponente shcon zur Entwurfszeit aktivieren ?!? |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Nein im .onCreate des Datenmoduls (TDataModule1.DataModuleCreate)
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Noe, das Hauptformular mit DB-Feldern drauf wird ja schon davor kreirt, und die lechzen nach Datenquellen, die aber erst später im Datenmodul aufgemacht werden.
Warum wird eigentlich das Datenmodul nach dem Hauptformular kreirt ? Ist übrigens eine SDI-Anwendung... |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Du hast doch bestimmt irgendwelche TADOTables oder TADOQueries im TDatamodule, die zur Designzeit Aktiv sind.
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Zitat:
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Ja hab ich -
sollte ich mal abschalten,stimmt - gibts eine Methode, um komfortabel z.b. 15-20 Datenquellen (ADODataSets) auf einmal aktiv zu schalten, oder muss ich da jedes Objekt einzeln aufführen ? Zitat:
Jetzt steht es wieder am Ende der Liste und die Zugriffsfehler sind weg :) |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Dann greift das datenmodul auf eine andere Form zu, sollte aber nicht so sein.
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Das Tolle an Delphi ist, das man superschnell kleine DB-Applikationen zusammenklicken kann.
Das Schlimme an Delphi sit, das man superschnell kleine DB-Applikationen zusammenklicken kann. Befolge ein paar Regeln und dann sollte das ion Zukunft immer ohne Probleme gehen: 1. Besorg dir die GExperts. Da ist so ein Tool dabei, der VOR dem Kompilieren dafür sorgt, das bestimmte Propertys immer den gleichen Wert haben. Bei Dir wären das also alle TDatasets.Active := False und TADOConnection.Connected := False; 2a. Nun kannst Du das TDatamodule als ERSTES in der Liste der automatisch zu erstellenden Formulare plazieren. Dann erfolgt die Initialisierung z.B. im TDataModule.FormCreate; ODER 2b. Dein Hauptformular instantiiert ein TDatamodule im FormCreate / FormActivate und gibt es im FormDestroy wieder frei. 3. Die Datasets werden erst dann geöffnet, wenn sie gebraucht werden. 4. Detail-Daten werden im BeforeOpen-Ereigns des Master-Datasets geöffnet und im AfterClose wieder geschlossen. Alternativ zu 4 kannst Du auch eine kleine Methode schreiben, die Dir einfach alle TDatasets öffnet. Das ist aber eigentlich bescheuert, denn wieso soll man aus der Datenbank Daten laden, die man gar nicht benötigt? |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Hi,
erstmal danke an alle Antwortschreiber, eure Tipps haben mir schnell weitergeholfen. Ich lade jetzt das DataModule-Formular als erstes, alle Initalisierungen für das Hauptformular wanderten jetzt in ein entspr. Ereignis desselben (war nämlich die Ursache für die Zugriffsverletzung, ich hatte eine Methode des Hauptformulars noch aus dem Datamodule aufgerufen, brauche ich jetzt nicht mehr)... Danke außerdem für die GExperts Toolsammlung, wirklich sehr praktisch ! Nur bin ich wohl zu blind, das von alzaimar beschriebene Tool zum Umschalten z.b. mehrerer DataSet-Instanzen zu finden... hat da jemand den Namen parat ? Zu 4. da der SQL Server ja im Intranet steht, sollten mehrere geöffnete DB-Verbindungen pro User nicht weiter schlimm sein oder ? Gruß aus der Oberpfalz, FraGiLe |
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Zitat:
|
Re: DataModule-Fehler : Zugriffsverletzung durch externe Met
Das wars - vielen Dank die Herren, Problem gelöst :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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