Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi korrekte Verwendung der UserSession bei Intraweb-Projekten? (https://www.delphipraxis.net/148831-korrekte-verwendung-der-usersession-bei-intraweb-projekten.html)

Siggi 9. Mär 2010 07:43


korrekte Verwendung der UserSession bei Intraweb-Projekten?
 
Hallo zusammen,

ich habe glaube ich ein Verständnisproblem.

Ich habe ein Intraweb-Projekt erstellt und es wird dabei ja automatisch eine UserSession erzeugt. So wie ich die Doku verstehe, stellt diese das Datenmodell bereit und trennt bei mehreren aktiven Benutzern die Sessions voneinander, so dass sich die Anwender nicht in die Quere kommen.
Daher habe ich - wie ich es sonst auch bei "normalen" Anwendungen mache - meine Datenbankobjekte (TQuery) in der Usersession platziert. Im Hauptfenster liegen datensensitive Controls (z.B. DBGrid) und eine Datasource in der usersession stellt die Verbindung her.

So weit so gut, das funktioniert auch alles noch.

Wenn ich aber z.B. die Anzahl der Datensätze im Hauptfenster anzeigen will und dazu in der Usersession eine Methode showRecCount() schreibe (im Public-Zweig der Klasse), die dann aus dem Hauptfenster aufgerufen wird, dann bekomme ich beim Zugriff auf die recordCount-Methode der TQuery eine Zugriffsverletzung.

Lege ich die TQuery in das Hauptfenster und greife dort auf Recordcount zu, geht das.

mal mit einem Quelltextbeispiel:
Im Hauptfenster aufgerufen mit qryBuch im Hauptfenster geht es:
Delphi-Quellcode:
procedure TIWForm1.IWDBGrid1Columns1Click(ASender: TObject;
  const AValue: string);
begin
  WebApplication.ShowMessage(IntToStr(qryBuch.RecordCount));
end;
In der usersession aufgerufen mit qryBuch in der Usersession gibt es eine Schutzverletzung beim Zugriff auf qryBuch:
Delphi-Quellcode:
Procedure TIWUserSession.showRecCount;
begin
  WebApplication.ShowMessage(IntToStr(qryBuch.RecordCount));
end;

Wo liegt da mein Denkfehler??

NickelM 9. Mär 2010 08:00

Re: korrekte Verwendung der UserSession bei Intraweb-Projekt
 
Es kann sein, das in der usersession die Variable WebApplication = nil ist? also nicht zugewissen?
oder die Variable qryBuch (also das TQuery) = nil ist?

Am Besten du setzt mal als test
Delphi-Quellcode:
If Assigned(WebApplication) then
//und/oder
If Assigned(qryBuch) then
Das wäre meine erste Überlegung. Wenn net versuch mal das
Delphi-Quellcode:
procedure TIWForm1.IWDBGrid1Columns1Click(ASender: TObject;
  const AValue: string);
begin
  WebApplication.ShowMessage(IntToStr(IWUserSession.qryBuch.RecordCount)); //Fals das usersession- Modul so heist
end;

Siggi 9. Mär 2010 19:30

Re: korrekte Verwendung der UserSession bei Intraweb-Projekt
 
Hallo NickelM,

schon If Assigned(WebApplication) führt zur Schutzverletzung.

Aber vielleicht habe ich das Ganze ja auch falsch verstanden und das TWIUserSession-Objekt ist gar nicht dazu geeignet, die Datenbank-Komponenten aufzunehmen???

Der Zugriff auf RecordCount ist ja nur ein Beispiel, eigentlich soll die gesamte Steuerung (Blättern durch die Datenmenge, Sortierung, Filter setzen (neues SQL) etc.) als Methoden des TIWUserSession-Objektes erstellt werden.
In der IntraWeb - Beispiel-Anwendung FishFactDM wird das mit einem ClientDataSet gemacht und funktioniert auch, darum wundert es mich schon, warum es mit einer TQuery nicht auch gehen soll.

Wenn's aber schon bei so einfachen Dingen wie dem Zugriff auf die Query scheitert :-(.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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