AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi 2009 - Programm hängt manchmal beim beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2009 - Programm hängt manchmal beim beenden

Offene Frage von "zeras"
Ein Thema von bwolf · begonnen am 6. Jul 2010 · letzter Beitrag vom 9. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 11:50
Hi Leute,

ich habe das Problem das mein Programm nach dem Beenden manchmal (etwa jedes 2. Mal) hängen bleibt.
Es kommt dann die Fehlermeldung "Programm.exe reagiert nicht mehr".
Im Ereignisprotokoll von Delphi 2009 ist dann die letze Meldung: "Modul entladen: OLEPRO32.DLL"

Wenn ich das Programm direkt ausführe und es beende hat das bisher immer problemlos geklappt.
Hat jemand einen Tip wie man das debuggen kann?
Danke euch!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 11:51
Verwendest du OLE-Automatisierung von Officeprodukten o.ä.?
Markus Kinzler
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 12:03
Hi,
es wird eine Type Library verwendet um in einer anderen Anwendung eine Funktion aufzurufen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 12:08
Entlade diese mal manuell
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 12:45
Gibt es eine Liste von DLLs, die ich manuel entladen muss?! Denn ich habe den "Fehler" (oder wie auch immer man das nennen mag) auch an ein paar Stellen. Die einzigen DLLs mit "OLE" im Namen, die beim Ausführen des problematischen Codes geladen werden, aber laut IDE nicht entladen werden, sind bei mir OLEDB32.dll und MSJETOLEDB40.dll. Daneben gibt es aber auch noch weitere 40-50 Stück.

Was mache ich: ich erzeuge beim OnClick auf einen Button einen neuen TOpenDialog und führe diesen aus. Wählt der Benutzer einen Dateinamen (es handelt sich hierbei um eine Access-Datenbank-Datei) aus, so wird dieser in ein Edit geschrieben. Beim OnChange werden die Tabellen aus der DB geladen und die Verbindung (TADOConnection) wieder abgebaut.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 13:35
Also ich habe es mit manuellen entladen probiert, allerdings ohne Erfolg.

Allerdings scheint das Problem auch wo anders zu liegen...
Und zwar wird er bei mir anscheinend durch folgendes Verursacht:

Ich habe ein TClientDataSet, das ich im onShow der Form öffne.
Wenn dieses TClientDataSet NICHT geöffnet wird, habe ich beim beenden der Applikation auch das Problem nicht.
Wenn ich das TClientDataSet zur Laufzeit öffne und das Programm beende, ist der Hänger wieder da. Auch ein .close und .free auf das TClientDataSet behebt das Problem nicht. Sehr seltsam


@ s.h.a.r.k:
hast du zufällig auch ein TClientDataSet im einsatz?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 13:41
Ich habe nur folgende Klassen im Einsatz: TADOConnection, TADOCommand, TADODataSet. Über diese stelle ich eine Verbindung zu einer dBase und einer Access-Datenbank her.

// edit

TClientDataSet und TADODataSet sind aber beide von der Basisklasse TDataSet abgeleitet.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 14:04
Hast du mal getestet ob der Fehler auch kommt wenn das Dataset nicht geöffnet wird?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 14:19
TADOConnection bietet mit die Methode GetTableNames() an, die intern automatisch ein TADODataSet öffnet und die Tabellennamen aus der DB ausliest. Diese werden dann in eine TWideStringList geschrieben. Wenn ich diesen Aufruf einmal mache, dann klappt das wunderbar, aber kein zweites mal.

Greifst du evtl. über ODBC auf eine Datenbank zu?! Weil ich kurz davor bin, zu glauben, dass es daran liegt.

// edit

Habe mir nur ein Testprojekt geschrieben, welches eine Connection zu einer Access-DB öffnet, ebenso zu einer DBase-DB. Beides läuft über AnyDAC 2.0.17 und ich komme zum gleichen Resultat, wie über die ADO-Komponenten, ergo muss es irgendwie an den Basisklassen liegen. Mal schauen, was sich da noch so zeigen wird...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 6. Jul 2010 um 16:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

AW: Delphi 2009 - Programm hängt manchmal beim beenden

  Alt 6. Jul 2010, 17:23
Hier nochmal eine Aktualisierung des Problems auf einen sehr minimalen Quellcode. Ich habe eine Form und ein Memo darauf, samt einem Button zum Anstoßen dieses Codes. Was machst das Ding? Es stellt eine Verbindung zu einer dBase-Datenbank her, welche ja nur über den Pfadnamen angegeben ist, liest die verfügbaren Tabellen aus und gibts diese aus. Danach wird die Verbindung wieder abgebaut und gut is.

Delphi-Quellcode:
var
  conn : TADOConnection;
  list : TStringList;
begin
  conn := TADOConnection.Create(nil);
  list := TStringList.Create();
  try
    conn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files;Mode=Read';
    conn.DefaultDatabase := DBASE_DIRECTORY; // this constant represents a path on the hdd
    conn.Connected := True;
    conn.GetTableNames(list);
    Memo1.Text := list.Text;
  finally
    conn.Connected := False;
    FreeAndNil(conn);
    FreeAndNil(list);
  end;
end;
Die Anwendung hängt sich bei mir nur dann auf, wenn die Delphi IDE diese im Debug-Mode ausgeführt hat. Starte ich diese ganz normal über den Explorer funktioniert alles wunderbar. Die Zeile conn.Connected := True; macht das Problem, nur was genau kann ich leider nicht sagen.
Ich sollte auch noch dazu sagen, dass innerhalb der GetTableNames() -Methode ein TADODataSet erzeugt, damit gearbeitet und freigegeben wird.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 6. Jul 2010 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:13 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