Newsgroup: it.comp.software.database
Titolo: [Firebird] Stringa connessione via rete

Ciao a tutti,
ho un piccolo problema e vorrei capire se ho alternative.
Poniamo di avere un server che ha i DataBase nel seguente percorso
C:\Programmi\MioDB\001.GDB / FDB
E ho condivisa la cartella MioDB solamente, magari con nome diverso
"Pippo".
Da Windows ci accedo regolarmente
2) \\server\Pippo\001.gdb / FDB
Mentre con Firebird devo per forza fare una connessione con il path
completo del tipo
1) server:C:\Programmi\MioDB\001.GDB /FDB
2) 192.168.1.1:C:\Programmi\MioDB\001.GDB /FDB
Questo implica che non posso fare una routine universale per conversione
path da Windows a Firebird.
Apparte gli Alias, c'è qualche metodo che mi sfugge?
E in caso di lettera unità di rete mappata? G:\001.GDB / FDB
Grazie a tutti

 Grazie a tutti
Saluti Goblin
-- 
Ibis et redibis non morietur in bellum.

 connessione.
Si pure io, il problema c'è solo se si vuol permettere che il cliente possa
aggiungere un DB in un path che vuole lui. Finchè è in locale no-problem,
ma quando è in rete non c'è modo (per me) di scrivere una routine che
trasformi il path di Win in quello per firebird:
\\Server\MioDB\001.GDB
In quanto potrebbe essere:
Server:C:\Miodb\001.GDB
Server:C:\Programmi\Miodb\001.GDB
Server:C:\Programmi\Pippo\Pluto\001.GDB (ipotesi peggiore)
Quindi quando si verificherà, il cliente chiama, e gli impostiamo noi la
stringa di FB per quell'archivio. 

 stringa di FB per quell'archivio. 
Se ho capito:--->
Io uso Delphi se ti puo' servire la funzione che uso dopo aver testato 
se la lettera utilizzata è una lettera mappata è
function GetUniversalName( RootPath : String ) : String;
type
  PNetResArr = ^TNetResArr;
  TNetResArr = array[Word] of TNetResource;
var
  hEnum : THandle;
  dwResult : DWORD;
  Entries : DWORD;
  PNetRes : PNetResArr;
  ResourceSize : Cardinal;
  I : Word;
  Allocated : Integer;
begin
  Result := '';
  ResourceSize := 0;
  Allocated := 0;
  PNetRes := NIL;
  dwResult := WNetOpenEnum( RESOURCE_CONNECTED, RESOURCETYPE_DISK,
   0, NIL, hEnum );
  while ( TRUE ) do begin
   Entries := $FFFFFFFF;
   dwResult := WNetEnumResource( hEnum, Entries, PNetRes, ResourceSize
);
   if dwResult = ERROR_MORE_DATA then begin
    if Assigned( PNetRes ) then FreeMem( PNetRes, Allocated );
    GetMem( PNetRes, ResourceSize );
    Allocated := ResourceSize;
    Continue;
   end;
   if dwResult <> NO_ERROR then Break;
   for I := 0 to Entries - 1 do begin
    if StrPas( PNetRes^[I].lpLocalName ) = Copy( RootPath, 1, 2 ) then
begin
     Result := StrPas( PNetRes^[I].lpRemoteName );
     Break;
    end;
   end;
   if Result <> '' then Break;
  end;
  FreeMem( PNetRes, ResourceSize );
  WNetCloseEnum( hEnum );
end;
Questa Fn passato una lettera mappata in rete mi ritorna il percorso del 
server
ES: F lettera mappata sul server nella cartella c:\programmi\
a:=GetUniversalName('F:'); ---> a := \\server\programmi" poi ci faccio 
tutti i vari aggiustamenti del caso.
Se non è quello che ti serve ... sorry :)


 tutti i vari aggiustamenti del caso.
Non ricordo molto la sintassi del Pascal :)
In ogni caso il fatto che l'unità di rete sia mappata sarebbe il caso più
unico che raro :\, vabbè vorrà dire che aggiusteremo i path in
teleassistenza, non credo sia una cosa che debbano fare tutti i giorni :P
Grazie comunque

 teoricamente in path differenti.
Fammi capire, nella tua applicazione apri piu` file di basi di dati
contemporaneamente? Se e` cosi`, questa cosa non ha senso, in quanto
Firebird e` un database di tipo client/server (l'unico motivo per cui
potrebbe avere senso e` se - e sottolineo se - Firebird viene utilizzato
in modalita` embedded). Anzi, una gestione del genere porta con se
diversi svantaggi:
- se devi mettere in relazione i dati di due anni devi spostare tutta la
  gestione lato applicativo;
- l'apertura di piu` archivi ti costa molta piu` memoria di aprirne uno
  solo;
- devi gestire molti piu` backup di quanti ne siano necessari realmente.
Personalmente una situazione come la tua la gestirei o con tabelle
archivio generate automaticamente il primo gennaio, o con delle viste
Enrico