Toon posts:

[Delphi] Lokaal path van database op andere pc opvragen

Pagina: 1
Acties:

Verwijderd

Topicstarter
In mijn programma kan de gebruiker aangeven welke database hij wil gebruiken. Daar bedoel ik mee dat hij een database bestand kan selecteren op een bepaalde (netwerk) drive.

De gebruiker kan op een knop drukken waarna hij een selectie scherm te zien krijgt om de juiste db te selecteren.
Afbeeldingslocatie: http://www.famstuij.dyndns.org/images/dbselectie.jpg

Nu kan dit dus een db zijn die op een andere pc staat.

Wat ik nodig heb is uiteindelijk de locatie van de db maar dan gezien vanaf de pc waarop die db staat. Ik krijg nu een UNCFileName terug, maar die kan ik niet gebruiken om mijn programma verbinding te laten maken met die database.

De applicatie is ontwikkeld in Delphi en ik maak gebruik van een Interbase database.

Om verbinding te maken met de database heb ik het volgende nodig:

\\server_name\filename


Bijv: ik krijg nu terug

\\dell5000\share_name\bestelboek.gdb

maar ik zou moeten hebben (voor de db verbinding):

het is op server: dell5000 en de locatie is: c:\bestelboek.gdb op die dell5000


Met google heb ik ook die vraag gevonden van iemanders anders en die kreeg als antwoord dat het niet mogelijk zou zijn.

Is dat echt zo en zo ja is het dan op een andere manier mogelijk of ontkom je er niet aan om dan de gebruiker het handmatig te laten invoeren?

Verwijderd

Dit is uiteraard niet mogelijk.
De machine waarop de database staat geeft nooit info weg over interne organisatie (waar het op die machine staat). Echt alleen een UNC-pad.

Waarom wil je die info trouwens hebben?

Verwijderd

Topicstarter
Stel ik zit op computer A. Vervolgens selecteer ik via het selectie scherm een db file die op computer B staat.

Om vervolgens met de multiclient applicatie op computer A verbinding te maken met de database op computer B, moet ik de connectie als volgt opgeven:

\\computer_B_name\het_lokale_adres_van_de_database_op_computer_B

  • BoomSmurf
  • Registratie: Maart 2003
  • Laatst online: 23:42

BoomSmurf

Am-Ende!

Zover ik weet niet mogelijk. Misschien is er een API functie die UNC naar physical omzet maar god weet of die dan ook nog remote werkt (als dat zo is waarschijnlijk alleen als je netadmin priv's hebt)

Maar je mag toch hopen dat diegene die zich met de config van een db app bezig houdt weet waar de database zich bevindt...

[ Voor 26% gewijzigd door BoomSmurf op 06-02-2004 18:54 ]


Verwijderd

Topicstarter
Uiteraard weet diegene dat. Maar ik wilde het gewoon gebruikersvriendelijker maken door zo'n selecteer scherm.

Maar goed het blijkt dus echt niet mogelijk te zijn, dus moet men bij een remote db server, zelf handmatig de gegevens gaan invoeren.

Verwijderd

BoomSmurf schreef op 06 februari 2004 @ 18:54:
Zover ik weet niet mogelijk. Misschien is er een API functie die UNC naar physical omzet maar god weet of die dan ook nog remote werkt (als dat zo is waarschijnlijk alleen als je netadmin priv's hebt)
Waarom zou er zo'n API-functie zijn? Normaliter is dit niet nuttig _en_ het heeft met security te maken: je wil niet dat je computer iets van zijn interne structuur blootlegt (sharing is eigenlijk al een security-probleem ;))
Maar ik zie het nut nog steeds niet: je kunt vanaf een computer ook via UNC-paden bestanden op diezelfde computer benaderen 8)

Stel: je zit op compu A (naam: janscomputer) en die heeft directory C:\testdb geshared (sharenaam: database).
Vanaf diezelfde computer kun je die directory dan benaderen ofwel d.m.v.
C:\testdb ofwel via \\janscomputer\database

Misschien zie ik iets over het hoofd (of begrijp ik niet wat je exact wil)......

Verwijderd

Topicstarter
Je begrijpt inderdaad het niet precies.

Het gaat erom dat ik het lokale path van een db bestand op pc B op pc A nodig heb voor de verbinding.

Maar ik hou het gewoon op handmatig. Er zit niks anders op.

  • Padje
  • Registratie: Januari 2001
  • Laatst online: 19-05-2025
Misschien anders gewoon een soort andere menu interface schrijven. Dat je gewoon snelkoppeling maakt naar de betreffende database.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Lijkt me echt sterk dat je nodig hebt.

heb geen idee wat een GDB database is, maar bij alle DB vormen die ik gebruikt heb is het niet nodig om deze info te hebben, kan me ook geen reden bedenken waarom je dit nodig zou hebben.

De PC waar het programma staat heeft echt niks te maken met waar het lokaal staat. De DB is te benaderen via netwerk en hij kan toch niet de DB Pc beínvloeden verder.

Kijk eens goed in je documentatie of je dit wel nodig hebt.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function UNCFilenameToMappedFilename(aFilename : string) : string;
var
  driveChar : char;
  drive, UNC : string;
begin
  // preset the default result
  result := aFilename;
  // if input is already a drive name, we have nothing to do, so exit
  if (length(aFilename) > 1) and (aFilename[2] = ':') then exit;
  // otherwise scan all the drive letters in turn
  for driveChar := 'A' to 'Z' do
  begin
    drive := driveChar + ':\';
    // check if it is a mapped drive
    if GetDriveType(PChar(drive)) = DRIVE_REMOTE then
    begin
      // get the UNC path equivalent
      UNC := ExpandUNCFilename(drive);
      // if the UNC path is a prefix to aFilename then we are on the same server
      if AnsiStartsText(UNC, aFilename) then
      begin
        // replace the UNC with the drive name and exit
        result := AnsiReplaceText(aFilename, UNC, drive);
        break;
      end;
    end;
  end;
end;

We adore chaos because we like to restore order - M.C. Escher


  • Padje
  • Registratie: Januari 2001
  • Laatst online: 19-05-2025
LiquidSilver schreef op 06 februari 2004 @ 19:13:
Lijkt me echt sterk dat je nodig hebt.

heb geen idee wat een GDB database is, maar bij alle DB vormen die ik gebruikt heb is het niet nodig om deze info te hebben, kan me ook geen reden bedenken waarom je dit nodig zou hebben.

De PC waar het programma staat heeft echt niks te maken met waar het lokaal staat. De DB is te benaderen via netwerk en hij kan toch niet de DB Pc beínvloeden verder.

Kijk eens goed in je documentatie of je dit wel nodig hebt.
Leuk he Interbase ;) Zulke beheerders krijg ik nu dagelijks aan de lijn, vind je het gek dat het niet werkt.


Zie het zo je clientsoftware verteld tegen de server waar hij moet kijken voor de database.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Padje schreef op 06 februari 2004 @ 19:57:
[...]


Leuk he Interbase ;) Zulke beheerders krijg ik nu dagelijks aan de lijn, vind je het gek dat het niet werkt.


Zie het zo je clientsoftware verteld tegen de server waar hij moet kijken voor de database.
Mwah niet alleen Interbase hoor :P
Had het nog nooit gehoord gewoon en vind 't ook niet echt logisch gewoon :)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Topicstarter
LordLarry,

helaas die functie lost het probleem niet op.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

want? (misschien dat er een klein bugje in zit)

/edit
ah, nogmaals gelezen. Je wilt het lokale pad op de server hebben? Tja, das weer lastiger :) Je kan remote vast achterhalen welke shares er zijn en waar ze heen wijzen. Ik kan het wel via Computer Management iig.

[ Voor 71% gewijzigd door LordLarry op 06-02-2004 22:34 ]

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1