AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Datei im Netzwerk finden ohne unc Pfad
Thema durchsuchen
Ansicht
Themen-Optionen

Datei im Netzwerk finden ohne unc Pfad

Ein Thema von SarDGer · begonnen am 18. Apr 2007 · letzter Beitrag vom 27. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#1

Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 08:23
Moin Moin,

ich hab da ein kleines Problem...
und zwar läd eine meiner DLLs eine firebird gdb, wenn ich connected auf True
setzte kann es zu einer exception kommen, in diesem Fall soll auf eine andere
Datenbank ausgewichen werden (mit Try except abgefangen). Das funktioniert
alles auch ganz Toll.
Es kommt zwar immer 'ne nervige Exception wenn ich im Delphi das Programm starte,
aber die ist ja abgefangen.
ungefähr so: (Delphi7)

Delphi-Quellcode:
try
  TestDB.Databasename := '\\TestComputer:c:\test\Test1.gdb'
  TestDB.Connected := true;
except
  TestDB.Databasename := '\\TestComputer:c:\test\Test2.gdb'
  TestDB.Connected := true;
end;
Jetzt das Problem:
Da die DLL dynamisch geladen wird muss sie ja auch wieder entladen werden.
Und genau da hängt sich die DLL aufrufenden (bzw. entladenede) Applikation auf.
Danach bewegt sich nix mehr...

Ich hatte die waage Hoffnung über TIBDatabase mit einem Fileexist, oder Ähnliches,
die Try Except Geschichte zu umgehen und somit ohne Exeption auszukommen.
Wenn der gar nicht erst in den Except-Part springt habe ich das Problem nicht.
Natürlich befindet sich die gdb nicht lokal und ausser dem Databasepath ist nichts
bekannt also auch keinen Unc-Pfad.(wäre ja auch zu einfach dann...)
Also hab ich nur Rechnername und Lokalerpfad auf diesem Rechner.
Hab aber nichts gefunden.

Vielen dank im voraus.

Sar D'Ger
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 08:30
Hallo,

umgehen kannst du das try except nicht.
Ich würde mal den Code ohne Dll prüfen
(also alles in eine externe Unti auslagern),
was heisst denn "hängt" ?
Wo genau hängt er.

Du kannst unter Delphi ja auch Dlls debuggen.


Heiko
Heiko
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#3

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 08:55
Ich kann den Post von Hoika nur lesen wenn ich den zitiere, merkwürdig...
Für den Fall das andere dasgleiche Problem haben hier nochmal:
Zitat von hoika:
Hallo,

umgehen kannst du das try except nicht.
Ich würde mal den Code ohne Dll prüfen (also alles in eine externe Unti auslagern),
was heisst denn "hängt" ?
Wo genau hängt er.

Du kannst unter Delphi ja auch Dlls debuggen.


Heiko
in einem normalen Programm ist das natürlich kein Problem, leider auch
keine Lösung, da sich die DLL nunmal zwingend mit der Datenbank verbinden muss.
"Er hängt" heisst das er nachdem das Programm beim entladen der DLL
FreeLibrary(hDLLTest); nichts mehr tut. Ich komm dann nur noch mit Strg+F2 raus.
Das debugen der DLL bringt nichts. Das Problem tritt ja erst im Programm auf,
aber eben nur wenn die Exception ausgelöst wurde.

Grüsse,
Sar D'Ger
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 09:01
Hallo,

1. Benutzt du Threads ?

2. Ist die IBDataBase in der Dll erzeugt oder "irgendwie" übergeben ?

3. Hängt er genau in dem FreeLibrary ?

4. Was passiert, wenn du selber eine Exeption in der Dll erzeugst
(raise Exception.Create('hoika weiss (fast) alles'))
nur um zu testen, dass dort nicht irgendwas rumlungert.


5. nimm mal memcheck oder madexcept,
vielleicht überschreibt deine Dll Speicher.


Heiko
Heiko
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#5

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 09:26
huhu,

zu 1. Nein.

zu 2. Die Dll einthält ein TDataModule auf dem die TIBDatabase liegt.
Vor dem TDatabase.destroy setzte ich Conneted := False;

zu 3. Ja - genau da.

zu 4. raise Exception.Create('hoika weiss (fast) alles') hat keine weiteren Auswirkungen. Programm läuft weiter.

zu 5. hab FastMM am laufen - da steht aber nix was daruf schliessen liesse.


Es sieht so aus als ob die TIBDatabase, obwohl das TDatamodule und somit auch die TIBDatabase, bereits "gefreed"
wurde noch irgentwo "den Finger" drauf hätte und deswegen nicht entladen werden kann.
Mal sehen ob ich auf der Schiene weiter komme...

Sar D'Ger
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 09:48
Hallo,

zu 2.
das ist nicht notwendig.

Ausserdem: was heisst hier "vor dem DataBase.Destroy" ?

Wenn die IBDataBase über das DataModul automatisch erzeugt wird,
wird es vom diesem DataModul auch selber freigeben.
Beim Freigeben des IBDataBase wird automatisch disconnected.

Wo genau gibst du denn das DataModul frei ?

Heiko
Heiko
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#7

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 10:03
So war das ja nicht gemeint.
Ich hab das ganz so aufgebaut.

Programm part:
Dll laden
Funktions aufruf Test

DLL part:
TDatamodul (DM) erzeugen inkl. TDatabase
Database vebinden <- hier ist die try except Geschichte
Daten aus der Datenbank laden
verändern
Daten in Datenbank schreiben
Databaseverbindung trennen
TDatamodul freigeben Freeandnil(DM)

Programm Part:
DLL entladen FreeLibrary(hDLLInterface); <- ab hier bewegt sich das Programm nicht mehr wenn er durch den Except-Part musste, sonst auch hier kein Problem

Wie gesagt, wenn der die erste Datei findet, läuft alles wie es soll.
Springt er in den except-Part, dann ist beim entladen Schicht im Schacht...

Sar D'Ger
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 14:26
Hallo,

probier mal folgendes

Delphi-Quellcode:
bConnected:= False;
try
  bConnected:= ConnectDB1...
  bConnected:= IBDB.Connected;
except
end;

if not bConnected then
begin
  try
    bConnected:= ConnectDB22222...
    bConnected:= IBDB.Connected;
  except
  end;
end;
Heiko
Heiko
  Mit Zitat antworten Zitat
SarDGer

Registriert seit: 19. Mai 2005
55 Beiträge
 
Delphi 7 Professional
 
#9

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 16:32
Hab die Nuss geknackt !!!

in der DLL prüfen:

Delphi-Quellcode:
  function CheckDBisAvailable(DB: TIBDatabase): Boolean;
  Var
    GDSL : IGDSLibrary;
    DPB : String;
    DPBLength : short;
    I : Integer;
  Begin
    GDSL := GetGDSLibrary;
    GenerateDPB(DB.Params, DPB, DPBLength);

    I := DB.Call(GDSL.isc_attach_database(StatusVector, Length(DB.DatabaseName),
                                          PChar(DB.DatabaseName), @DB.Handle,
                                          DPBLength, PChar(DPB)), False);
    if I = 0 then
      Result := true
    else
      Result := False;
  end;


.
.
.
    DM.TestDB.DatabaseName := 'C:\Test1.gdb';
    DM.TestDB.LoginPrompt := False;
    DM.TestDB.Params.Add('USER_NAME=Test');
    DM.TestDB.Params.Add('password=Test');

    if CheckDBisAvailable(DM.TestDB) then
      DM.TestDB.Connected := true
    else
    Begin
      DM.TestDB.DatabaseName := 'C:\Test2.gdb';
      DM.TestDB.Connected := True;
    end;
.
.
.
So bekomme ich keine Exception und somit auch keine Problem beim entladen der DLL.

So ich geh jetzt 'ne Kuh töten... man man man, was für ein gefummel. Aber jetzt läufts.

Vielen lieben Dank für die viele Mühe, hoika.
Deine Lösung werd ich aber auch noch testen.

Ich hoffe dieser Threat hilft anderen auch.

Cya,
Sar D'Ger

P.S.
Zitat von hoika:
(raise Exception.Create('hoika weiss (fast) alles'))
jetzt: (raise Exception.Create('hoika weiss (fast) alles, und jetzt ein kleines bischen mehr'))
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Datei im Netzwerk finden ohne unc Pfad

  Alt 18. Apr 2007, 16:42
Hm,

das wäre also ein schnellere Variante,
wie das was ich immer gemacht hatte (dummy query schicken)

*kopier*


Heiko
Heiko
  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 00:14 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