Autor Beitrag
tschinkes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mi 02.02.05 10:37 
Moin,
hab momentan folgendes Prob:
Ich habe auf einem Datenmodul einige ADO Komponenten, nun versuche ich aus einer ADOQuery aus dem datenmodul zuzugreifen um eine ListView im Hauptformular zu füllen, aber sobald ich das Programm starte, hängt es sich an der Stelle auf, indem ich zum ersten mal überhaupt auf das datenmodul zugreifen will! Es lässt sich nicht ansprechen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
Daten.leihe_query.Close;
 Daten.leihe_query.SQL.Add('SELECT * FROM Video as V, Kontakt as K, Leihe as L WHERE V.id = L.Video_id AND K.id = L.Kontakt_id');
 Daten.leihe_query.Open;
...

Es brauch nur mit meinem Datenmodul (Daten) anfangen dann kommt schon eine Fehlermeldung 'EAccessViolation, Zugriffsfehler...'

Ich weiß echt nimmer weiter!

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 02.02.05 10:42 
tschinkes hat folgendes geschrieben:
Es brauch nur mit meinem Datenmodul (Daten) anfangen dann kommt schon eine Fehlermeldung 'EAccessViolation, Zugriffsfehler...'
Wie und wo wird das Datenmodul Daten erzeugt?
tschinkes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mi 02.02.05 10:44 
Statisch vorab, also habe es nicht während der Laufzeit generiert. Habe es auch schön in mein Hauptformular eingebunden per Uses, aber bringt nix!
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 02.02.05 10:51 
tschinkes hat folgendes geschrieben:
Statisch vorab, also habe es nicht während der Laufzeit generiert.
Mhh, und Du bist gaaanz sicher, dass es zum Zeitpunkt des Zugriffs auch schon erzeugt ist?
tschinkes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mi 02.02.05 10:54 
ich denke schon! Denn als ich es mal mit einem DBGrid verbunden habe, hatte ich ja per dataSource ja auch zugriff auf die Daten aus meiner Query aus dem datenmodul! Nur jetzt wenn ich versuche per Code das Datenmodul anzusprechen dann hängt er sich auf!
Aber selbst wenn nicht, wie mache ich es dann?
tschinkes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mi 02.02.05 11:03 
Ok, doch mein Fehler, entschuldige, musste erst das datenmodul erzeugen, sorry!

DAAAANNNNKKKKKKKKEEEEEEEEEEEE!!!!!!!!!!!!!!!!!!!!
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 02.02.05 11:03 
tschinkes hat folgendes geschrieben:
ich denke schon!
Famous last words... :?
Zitat:
Denn als ich es mal mit einem DBGrid verbunden habe, hatte ich ja per dataSource ja auch zugriff auf die Daten aus meiner Query aus dem datenmodul!
Das hat nichts zu sagen.
Zitat:
Nur jetzt wenn ich versuche per Code das Datenmodul anzusprechen dann hängt er sich auf!
Aber selbst wenn nicht, wie mache ich es dann?
Erzeuge es eben dynamisch oder sorge dafür, dass es sicher erzeugt ist, bevor Du es aufrufst. Ich empfehle in so einem Fall den Einsatz von Assertions:
ausblenden Delphi-Quelltext
1:
Assert(Assigned(Daten), 'Datamodule DATEN noch nicht erzeugt');					
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 02.02.05 11:06 
Wenn die Form, von der du das DatenModul ansprichst, das Hauptformular ist, ist das DatenModul beim Start (im FormCreate) noch nicht erzeugt. Somit also auch nicht verfügbar.
Versuch es im FormActivate. Dort solltest du aber prüfen, ob die Query schon Aktiv ist, da das FormActivate auch durch andere Ereignisse ausgelöst wird.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 02.02.05 11:18 
jasocul hat folgendes geschrieben:
Versuch es im FormActivate. Dort solltest du aber prüfen, ob die Query schon Aktiv ist, da das FormActivate auch durch andere Ereignisse ausgelöst wird.
...und genau deshalb würde ich es auf keinen Fall im FormActivate machen. IMHO bietet sich in vielen Fällen eine Singleton-Implementierung für Datenmodule an, wobei die benötigte Instanz im Bedarfsfall automatisch erzeugt wird.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
type
  TmyDataModule = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

function myDataModule: TmyDataModule;

implementation

var
  _myDataModule: TmyDataModule = nil;

function myDataModule: TmyDataModule;
begin
  if not Assigned(_myDataModule) then
  begin
    try
      _myDataModule := TmyDataModule.Create(Application);
    except
      _myDataModule := nil;
    end;
  end;
  Result := _myDataModule;
  Assert(Assigned(Result), 'DataModule myDataModule nicht erzeugt!');
end;
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 02.02.05 11:25 
Du hast schon Recht. Deine Lösung ist der bessere Weg. Du hattest dein Posting aber abgesetzt, als ich meins gerade geschrieben hatte. Sonst hätte ich meine große Klappe gehalten. :wink:
Ich persönlich generiere sowieso die Fenster und Datenmodule zur Laufzeit.