![]() |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Hallo Frank,
zunächst mal vielen Dank für Deine Mühe. Ich habe die Anwendung jetzt mal so umgebaut. Leider hängt sich das Programm jetzt im Login auf.
Delphi-Quellcode:
Der Aufruf des Login Formular geschieht im Modul wie folgt:
procedure TLoginFrm.FormCreate(Sender: TObject);
begin Design; MandantenCbx.KeyValue := dmMain.MandantenQry.FieldByName('MandantenNr').AsInteger; <-------- An dieser Stelle hängt sich das Programm auf, nichts ist mehr möglich. PasswortQry.open; PasswortQry.FetchAll; LeseLetzterBenutzer; PasswortEdit.Text := ''; if dmMain.ibqryOptionen.State = dsinactive then dmMain.ibqryOptionen.Open; end;
Delphi-Quellcode:
dmMain.MandantenQry.FieldByName('MandantenNr').AsI nteger kann irgendwie nicht initialisiert werden.
With TLoginFrm.Create(Self) do
begin ShowModal; Release; end; Noch ne Idee hierzu? |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Existiert das Datenmodul zu diesem Zeitpunkt schon?
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Habe noch ein weiteres Problem. Alle Aufrufe die mit dmMain. beginnen (im gesamten Code) bekomme ich eine Schutzverletzung. Ich denke irgendwie ist das Datenmodul noch nicht da, obwohl alle Befehle im Datenmodul abgearbeitet werden.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Erzeuge dieses als erstes.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Oder greife einfach nicht im OnCreate auf andere Forms/Module zu.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
So habe jetzt einiges Umgebaut, die Anwendung läuft wieder aber beim verlassen auf den Windows 8 Rechnern kommt diese Meldung:
Exception EAccessViolation in Modul NatuPrax.exe bei 0000399D. Zugriffverletzung bei Adresse 0040399D im Modul NatuPrax.exe. Schreiben von Adresse 00000000: Leider kann man nicht Debuggern, denn nach dem letzten Befehl in der Procdedure
Delphi-Quellcode:
kommt ja nichts mehr. Die Meldung kommt nach ca.4 sec. und NatuPrax bleibt im Task.
procedure TdmMain.BeforeDestruction;
begin // hier das DisConnect ibqryOptionen.Close; MandantQry.Close; if ibconNatuprax_Next.connected = True then begin ibconNatuprax_Next.CloseTransactions; ibconNatuprax_Next.DeallocateStatements; ibconNatuprax_Next.Disconnect; end; if ibconMedikament.connected = True then begin ibconMedikament.CloseTransactions; ibconMedikament.DeallocateStatements; ibconMedikament.Disconnect; end; if ibconMain.Connected then begin ibconMain.CloseTransactions; ibconMain.DeallocateStatements; ibconMain.Disconnect; end; if ibconData.connected = True then begin ibconData.CloseTransactions; ibconData.DeallocateStatements; ibconData.Disconnect; end; inherited; end; Nun bin ich mit meinem Latein am Ende und schier verzweifelt. |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Dann greifts Du auf etwas zu, was schon nicht mehr existiert.
Btw. Prüfe einen Boolean nie auf True es reicht:
Delphi-Quellcode:
if ibconMedikament.connected then
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Vielleicht solltest Du derart Prüfen, wenn Du dir nicht sicher bist, ob die verwendeten Objekte noch existieren:
Delphi-Quellcode:
if Assigned(ibconNatuprax_Next) and ibconNatuprax_Next.connected then begin
// ... mache irgend etwas mit [B]ibconNatuprax_Next[/B] end; |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Hallo,
wenn ich das richtig sehe, führst Du das Disconnect im Datenmodul (dmMain) durch. Hast Du mal versucht, das Disconnect im OnClose-Ereignis Deines Hauptformulars zu machen? Gruß Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Liste der Anhänge anzeigen (Anzahl: 1)
Ja habe ich auch schon versucht. Bringt aber nichts.
Ich habe es soweit das keine Schutzverletzung mehr kommt sondern Windows 8.1 Rechner melden beim Schließen des Programms. NatuPrax.exe funktioniert nicht mehr. Das Programm wird aufgrund eines Problems nicht richtig ausgeführt. Das Programm wird geschlossen und Sie werden benachrichtigt, wenn eine Lösung verfügbar ist. Im Anhang nochmals mein veränderter Code. |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Wie soll das ohne erzeugtes Datenmodul funktionieren?
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Auf die Schnelle waren die Quellen nicht so gut zu verstehen. Vielleicht solltest Du ein TDataModule dafür benutzen, wofür es geschaffen wurde: zum Anlegen der Connections, der Tables/Queries, der Transactions und ein paar grundsätzlicher (Datenbank-) Funktionen.
In der DPR vermisse ich das Erzeugen des Datenmoduls (ist auskommentiert) und in jenem gibt es eine Funktion zum Erzeugen der MainForm ? Wie schon einige Andere geschrieben hatten würde ich das Datenmodul vor der Mainform erzeugen, dort die Verbindung zur DB herstellen und auch beim Schließen der Applikation wieder kappen. Damit solltest Du die Kontrolle behalten. Das Login-Formular bindest Du in die Mainform ein, da ich davon ausgehe, dass Du dort einen Button (oder was auch immer) zum Connecten hast. So lange "leben" auch alle deine Module und Du hast weniger Probleme mit AV´s .... |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Zitat:
Delphi-Quellcode:
Walter,
function dmMain: TdmMain;
begin if FdmMain = nil then begin FdmMain := TdmMain.Create(Application); FdmMain.AfterConstruction; end; Result := FdmMain; end; AfterConstruction musst du nicht aufrufen, du vererbst diese Methode und diese wird nach dem Erzeugen automatisch aufgerufen. Also nimm das raus. Macht zwar nichts (glaub ich), aber ist Quatsch. Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Und wird das irgendwo aufgerufen? Und wenn ja vor dem OnCreate der Hauptform? Denn da wird die LoginForm errzeugt, welche darauf zugreifen will.
Der Code ist die Vollendung von Obfuscation. |
AW: Windows 8.1 Pro mit Firbird 2.5.3
OK Frank, habe ich rausgenommen. Jetzt kommen keine Meldungen mehr, aber NatuPrax ist nachdem beenden im Task Manager immer noch zu sehen. NatuPrax verschwindet also nicht aus dem Speicher. Das ist blöd, weil ich ein Mehrfach Start verhindere. Sonst funktioniert alles perfekt man kann damit arbeiten aber wie gesagt beim Beenden.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Walter,
möglicherweise ist das Problem ja gar nicht das Datenmodul. Ich würde mal zum Test folgendes machen: Im MainForm im OnClose und OnCloseQuery ein Exit; in die erste Zeile, damit der Code nicht ausgeführt wird. (Du schreibst ja noch in die Registrierung etc.) Ein Button auf das MainForm und dort dmMain.Free; in den Code. Vor Beenden des Programmes auf den Button und dmMain bewusst zerstören, dann beenden. Was passiert dann? Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Zitat:
Somit wird das Datenmodul bei der ersten Verwendung von dmMain.WasAuchImmer erzeugt... Zitat:
Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Hallo Frank, habe ich gemacht, aber das Ergebnis ist gleich. Beim beenden steht es weiterhin im Speicher. Ich muss noch dazu sagen das auch der Compiler das Programm nicht richtig beendet.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Zitat:
Den Timer tmMedikament würde ich testhalber auch deaktivieren im FormClose. Hast du noch Code im Finalization irgendeiner Unit? Die meisten Komponentenbibliotheken machen regen Gebrauch davon. Am Ende liegt es an TMS oder dem Reportgenerator... Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Ok ich mache morgen weiter, bin jetzt fix und fertig.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
So ich möchte jetzt mal ein Feedback geben zu meinem Problem.
Windows 8.1 beendet die Programme nicht komplett sondern lässt diese im Taskmanager unter Hintergrundprogramme weiterlaufen. Der Task kommt nach etwa 5 Sekunden und genau zu diesem Zeitpunkt kommt auch auf dem Desktop die Schutzverletzung. Nun ist die Frage wie beendet man unter Windows 8.1 das Programm vollständig, so das es nicht als Hintergrundtask weiterlauft. Hat jemand hierzu eine Idee? Meine Anwendung liegt auf dem Server und wird mit einer Verknüpfung auf dem Client aufgerufen. Vielleicht gibt es ja auch in der Registry eine Einstellung um Programme sofort zu beenden. Habe im WEB hierzu leider nicht gefunden. Es gibt natürlich den Befehl "Taskkill /F /IM Programmexename", nur der nützt nichts, weil meine Anwendung ja noch läuft. Hat jemand noch eine Idee dazu? Danke im voraus. |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Das wäre mir neu. Wie beendest Du den momentan?
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Ganz Normal mit Close. Funktioniert auch bei allen Rechnern, nur eben nicht im Netzwerk mit Windows 8.1 Clients.
|
AW: Windows 8.1 Pro mit Firbird 2.5.3
Hallo,
das kann ich nicht glauben. Was passiert, wenn du statt Close testweise mal Halt benutzt? Erzeuge mal ein leeres VCL-Projekt und starte es aus deinem Netzlaufwerk. Das Programm beendet sich sofort, hoffe ich :) Ich habe eher die Vermutung, dass noch ein Thread läuft. Heiko |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Ich erinnere mich an ein ähnliches Problem, wo fehlende Rechte dies verursacht haben.
Passiert das auch mit anderen EXE' n, wenn du diese vom Server per Verknüpfung startest? Passiert es auch als Administrator (also auch Admin - Rechte auf dem Server)? Frank |
AW: Windows 8.1 Pro mit Firbird 2.5.3
Nein andere Anwendungen laufen problemlos. Aber welcher Thread soll hier noch laufen? Ich wollte das ganze mal umsetzen nach DXE7, aber Embarcadero kann oder will diese Version nicht mehr liefern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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