AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme bei Intraweb und Datenmodul?

Probleme bei Intraweb und Datenmodul?

Ein Thema von alcaeus · begonnen am 22. Feb 2005 · letzter Beitrag vom 22. Feb 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Probleme bei Intraweb und Datenmodul?

  Alt 22. Feb 2005, 08:00
Datenbank: ORACLE/MSSQL • Version: 8.0/2000 • Zugriff über: TClientDataSet
Hallo allerseits,

wir stellen zur Zeit ein paar Module auf IW-Applikationen um, damit sie von Pocket-PCs zugänglich werden. Im "originalen" Modul haben wir sämtliche Komponenten für den DB-Zugriff auf ein DM ausgelagert. Dies hat alles funktioniert. Wenn ich nun aber mit der IW-Applikation ein Form anzeige, welches auf irgendeine Kompo auf dem DM zugreift, so bleibt die Anwendung hängen, d.h. das neue Form wird nicht im IE angezeigt, der Button auf den geklickt wurde verschwindet einfach, und es gibt keine Debugmeldungen oder sonstige Fehlerausgaben. Das DM wird ohne Probleme initialisiert, aber beim Zugriff knallt es eben. Kennt jemand das Problem bzw. weiß, wie dieses zu beheben ist?

Und nun die obligatorischen Codes:

Aufruf des Forms
TfrmGlassCommission.Create(WebApplication).Show; Erstellen des DMs beim Erstellen einer neuen UserSession:
Delphi-Quellcode:
constructor TUserSession.Create(AOwner: TComponent);
begin
  inherited;
  if not Assigned(FDM) then
    FDM := TDM.Create(Self);
end;
Zugriff auf das DM im Form:
Delphi-Quellcode:
  with dm do begin
    rdWork.Sql.Text:='SELECT FIELDID FROM CUSTOMIZEFIELDS'+
                      ' WHERE @UPPER(TABLENAME)='+hk+'ORDERPOSITION_3'+hk+
                      ' AND @UPPER(FIELDNAME)='+hk+'CUSTOMID5'+hk;
//...
Beim Zuweisen des SQL-Textes fliegt mir das Programm eben um die Ohren

Funktion innerhalb des DMs welches einen Pointer auf sich selbst liefert (inkl. Kommentar wie es zu machen sei)
Delphi-Quellcode:
// Since we are threaded we cannot use global variables to store form / datamodule references
// so we store them in WebApplication.Data and we could reference that each time, but by creating
// a function like this our other code looks "normal" almost as if its referencing a global.
// This function is not necessary but it makes the code in the main form which references this
// datamodule a lot neater.
// Without this function every time we would reference this datamodule we would use:
// TDataModule1(WebApplication.Data).Datamodule.<method / component>
// By creating this procedure it becomes:
// TDataModule1.<method / component>
// Which is just like normal Delphi code.
function dm: Tdm;
begin
  Result := FDM//TUserSession(WebApplication.Data).dm;
end;
Teile des Codes (insbesondere der letzte Teil) stammen aus den IW-Demos, also sagt mir nicht ich sollte dort nachsehen

@Mods: ich wusste nicht so recht wohin damit, also schiebt es einfach woanders hin, falls es hier falsch liegt.

Greetz
alcaeus

[add]
Ich habe soeben festgestellt, dass sich noch das CPU-Fenster öffnet, sobald ich auf einen Button klicke. Der Befehl bei dem er hängenbleibt ist "C3" (ret). Sieht also nach einem "ungeschickten" Sprung aus, aber wo?
[/add]

[nochmal add]
Ich habe mich soeben weiter "durchgeklickt", und wenn ich das Hauptfenster anzeige, dann wird der vorhin angeklickte Button nicht angezeigt, obwohl Visible auf true ist (durch Ausgabe im Log rausgefunden). So langsam wird mir das zu misteriös und ich progge einfach die PHP-Schnittstelle
[/nochmal add]

[schon wieder add ]
Jetzt wird der Button plötzlich angezeigt, aber beim Zugriff aufs DM knallts immer noch ganz still und leise. Ich glaube ich schmeiß das Teil wirklich wieder raus.
[/schon wieder add ]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Probleme bei Intraweb und Datenmodul?

  Alt 22. Feb 2005, 08:14
Mal eine Frage: Jede Usersession bekommt aber auch sicher ein eigenes Datenmodul? Das ist bei Dir hier leider nicht zu erkennen.
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Probleme bei Intraweb und Datenmodul?

  Alt 22. Feb 2005, 08:18
Hmm...das ist wohl das Problem. FDM ist in der Unit des ServerControllers als "freistehende Variable" deklariert. Das ist allerdings wohl eine kleine Zwickmühle, denn AFAIR wird ein Datenmodul sowieso nur einmal geladen, oder?
Ich kanns aber mal umschreiben, dass das Datenmodul eine public-Variable der UserSession wird, vielleicht bringt das was (ich hab den Code ja nicht erstellt, sondern sollte ja eigentlich nur die HTML-Templates machen, aber das hat man nun davon )

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Probleme bei Intraweb und Datenmodul?

  Alt 22. Feb 2005, 08:56
Globale Variablen sind schlecht

Ja, genau das gleiche Problem hatte ich auch am Anfang. Von IntraWeb läuft nur eine Instanz, folglich gibt es diese Variable auch nur einmal. Du greifst dann von jeder Session auf die gleiche Instanz vom Datenmodul zu und das wird nur mit der ersten und einzigen Instanz ohne Probleme Funktionieren.

Baue die Variable in die UserSession ein, dann wird es funktionieren. Der Aufruf ist dann nur immer mit

UserSession.FDM Natürlich bekommt dann jede Session eine eigene Instanz, also sparsam wirtschaften
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Probleme bei Intraweb und Datenmodul?

  Alt 22. Feb 2005, 09:28
Zitat von Mario:
Globale Variablen sind schlecht
Ich weiß, aber manchmal muss man damit leben, vor allem wenn der Chef das reingebaut hat

Das Problem hing übrigens nicht unbedingt mit dem Datenmodul zusammen, sondern vielmehr mit einem globalen App-Objekt, das alle Einstellungen usw. beinhaltet. Dieses muss für jede Session erstellt werden, und nicht pro Instanz. Dies geschah zwar, allerdings lief aufgrund des gleichen Namens der Variable in der Session alles auf das globale Objekt, welches nur einmal pro Instanz läuft, und eben nicht erstellt wurde weil es bei jeder Session neu erstellt werden würde (oder so )
Die AV kam nicht raus, das DM griff auf das Objekt zu, und es knallte. Jetzt überschreiben wir einfach die globale Objektvariable mit der Sessioneigenen, was bei einer zweiten Session evtl. knallt, aber das soll nicht mein Problem sein. Ich muss ja nur das HTML schreiben und testen

Danke für deine Hilfe

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:43 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