AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BDE hängt!

Ein Thema von smaug · begonnen am 6. Dez 2006 · letzter Beitrag vom 12. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#1

BDE hängt!

  Alt 6. Dez 2006, 16:41
Datenbank: Paradox • Version: 5.11 • Zugriff über: BDE
Hallo,

ich verwende 3 Programme, die über BDE auf Datenbanken zugreifen.
Ein Server, der als Dienst läuft, eine Client-Oberfläche und ein C-Programm mit einer in Delphi geschriebenen DLL.
Das C-Programm wird vom Server mit CreateProcess gestartet.

Wenn alle drei zusammen laufen, hängt die BDE.
Die DLL kommt dabei als letztes, öffnet eine Tabelle, schreibt einige Sätze und schließt sie wieder. Alles ohne Fehler.
Das seltsame ist, dass das C-Programm bis zum Ende durchläuft, GetExitCodeProcess mir aber 128 zurückliefert. Beim nächsten Zugriff auf Tabellen frieren sowohl Server als auch Client ein. Genauer gesagt: TTable.open auf dem Server kehrt nicht zurück; das mit einer TQuery verbundene DBGrid wird nicht mehr gezeichnet.

In allen drei Programmen verwende ich dasselbe NetDir und jeweils ein eigenes PrivateDir. Der Client erzeugt allerdings auch LCK-Dateien im DB-Verzeichnis!?
Das ganze läuft auf Win200 Workstation. BDE Version 5.11. Der Benutzer hat Amdinrechte, der Dienst läuft unter System.

LOCAL SHARE steht auf true, damit ich die LCK-Dateien besser verfolgen kann. Das macht aber keinen Unterschied.

Ich hab' keine Ahnung mehr wo ich den Fehler noch suchen soll.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: BDE hängt!

  Alt 6. Dez 2006, 17:56
Was<macht ie Dll genau? Vielleicht erzeugt diese Locs die nicht mehr entfernt werden?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: BDE hängt!

  Alt 6. Dez 2006, 20:29
1, Um zu checken ob du nicht einfach Speicherlücken im Bereich DB-Komponenten hast häng mal FastMM4 rein

2, Von deinem geschilderten System von einem Client und Server zu reden ist etwas zu viel des guten. Wenn es wirklich Client/Server wäre, hättest Du den DB-Zugriff und die Kompos eh nur auf dem Server und eine passende Schnittstelle wie die anderen Komponenten mit dem Server kommunizieren.

3, Nur der obligatorische Satz: Schmeiß die BDE weg. Wie du merkst bekommt man (trotz der Betrachtung aller möglichen bekannten) Fehlerquellen immer wieder Probleme. Aber ich will nicht weiter ausholen. Probier erstmal Punkt 1 um zu sehen obs evtl. nur "triviale" Speicherlücken sind.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#4

Re: BDE hängt!

  Alt 7. Dez 2006, 11:11
Die DLL wird mehrfach aufgerufen.
Beim ersten Mal wird PrivateDir und NetDir von Session gesetzt und eine Tabelle geöffnet, die von den anderen beiden Programmen nicht verwendet wird, aber im gleichen Verzeichnis liegt.
Bei jedem Aufruf wird ein Datensatz hinzugefügt oder geändert, die Tabelle bleibt dabei offen.
Beim letzten Aufruf wird die Tabelle geschlossen und freigegebn.
Ausser schreiben in eine Logdatei, die auch sauber geschlossen wird, macht die DLL nichts.

Ich werde die Programm von nun an Dienst und Oberfläche nennen, ok? Eine Schnittstelle für schreibenden Zugriff auf die Datenbanken ist übrigens vorhanden. Die Oberfläche öffnet nur TQuerys und TTable im Browse-Modus.

FastMM hab ich in uses eingebunden. Im C-Programm allerdings nicht, das ist nicht mit Borland kompiliert. Und nu?
  Mit Zitat antworten Zitat
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#5

Re: BDE hängt!

  Alt 7. Dez 2006, 11:18
Wenn die Oberfläche zu ist und die DLL somit sauber durchläuft, bleiben auch kein LCK-Dateien liegen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: BDE hängt!

  Alt 7. Dez 2006, 12:41
Zitat von smaug:
FastMM hab ich in uses eingebunden. Im C-Programm allerdings nicht, das ist nicht mit Borland kompiliert. Und nu?
Muss noch mit Debug-Infos im FullDebugMode arbeiten damit auch FastMM meckert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#7

Re: BDE hängt!

  Alt 7. Dez 2006, 14:45
Das ist interessant, mit FastMM bleibt jetzt schon das C-Programm hängen, die BDE bleibt aber verschont, sofern die Oberfläche keine Query offen hat.
Hat die Oberfläche eine Query offen, kommt das C-Programm weiterhin mit 128 zurück und es wird keine Logdatei erstellt.

Im MemoryManager_Event.log findet sich
Zitat:
5 - 12 bytes: TIniFile x 1
13 - 20 bytes: TObjectList x 3, Unknown x 3
21 - 28 bytes: TCriticalSection x 1
29 - 36 bytes: TWinHelpViewer x 1
37 - 44 bytes: String x 1
45 - 60 bytes: THelpManager x 1
Das IniFile habe ich definitiv freigegeben, der Rest ist mir vollkommen unbekannt ...?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: BDE hängt!

  Alt 7. Dez 2006, 15:06
Hast Du TWinHelpViewer und THelpManager kannst Du vergessen. Evtl. auch noch die Units von Helpware im Einsatz. Fehler ist dort zu suchen bzw. in WinHelpViewer.pas und HelpIntfs.pas

Pack noch Debug-DCU's dazu und schau dir mal die Log-Dateien an. Dort ist der Aufrufstack für deine Speicherlücken drin.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#9

Re: BDE hängt!

  Alt 7. Dez 2006, 15:59
Mit den Helpdingern hab ich nix zu schaffen:

Zitat:
[HelpIntfs.pas][HelpIntfs][THelpManager.Create][293]
[FastMM4.pas][FastMM4][DebugGetMem][6000]
[HelpIntfs.pas][HelpIntfs][GetHelpSystem][274]
[system.pas][System][@NewAnsiString][11530]
[Forms.pas][Forms][TApplication.ValidateHelpSystem][7109]

[WinHelpViewer.pas][WinHelpViewer][initialization][655]
[system.pas][System][InitUnits][10548]
[system.pas][System][@StartLib][10710]
Dafür hab ich die Critical Section gefunden und elimiert. Ausserdem hatte sich doch noch ein IniFile-Object in einer anderen Unit versteckt. Hat leider nichts gebracht.

Die eingebundenen Units
uses Sysutils, IniFiles, Classes, DBTables, FileCtrl;
  Mit Zitat antworten Zitat
smaug

Registriert seit: 6. Dez 2006
10 Beiträge
 
Delphi 6 Professional
 
#10

idap32.dbiExt

  Alt 8. Dez 2006, 14:16
Ich hab das Ganze mal ausführlich debugt. Beim Beenden der DLL gibt's eine Access Violation.

Das letzte, was ich im Quellcode zu sehen kriege, ist DLLDetachCallback in DBTables. Im Assembler komm ich dann noch bis call idapi32.dbiEXT. Irgendwo da drinnen kracht's dann.
  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 04:48 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