Każdy zdrowy człowiek jest leniwy! Programiści i użytkownicy ich programów również. Kiedy udostępniłem w sieci program, który każdy miał obowiązek przekopiować sobie na dysk lokalny - rzadko kto to wykonał i wiele osób odpalało program z lokalizacji sieciowej. Pomijam problem, że w tym układzie nie mogłem uaktualnić wersji, bo plik był w użyciu, to ciągnięcie programu z serwera jest rozwiązaniem bardzo nieefektywnym, zawodnym i wręcz nie do użytku w przypadku, gdy np. wykorzystujemy jakieś tymczasowe obiekty.
Poniższy kod wykrywa, czy program został wywołany z dysku sieciowego. Należy to sprawdzić przy starcie naszej aplikacji. W przypadku wykrycia lokalizacji sieciowej należy wyświetlić odpowiedni komunikat z prośbą o przekopiowanie pliku na komputer lokalny i zamknąć program.
A oto procedura, która wykrywa lokalizację sieciową bieżącej bazy:Declare Function GetDriveType Lib "kernel32" Alias _ "GetDriveTypeA" (ByVal sDrive As String) As Long Public Function DriveType(sDrive As String) As String Dim sDriveName As String On Error Resume Next Const DRIVE_TYPE_UNDTERMINED = 0 Const DRIVE_ROOT_NOT_EXIST = 1 Const DRIVE_REMOVABLE = 2 Const DRIVE_FIXED = 3 Const DRIVE_REMOTE = 4 Const DRIVE_CDROM = 5 Const DRIVE_RAMDISK = 6 If sDrive = "\" Then DriveType = "is a remote I.E Network drive." Else sDriveName = GetDriveType(sDrive & ":\") Select Case sDriveName Case DRIVE_TYPE_UNDTERMINED DriveType = "has not been recognized" Case DRIVE_ROOT_NOT_EXIST DriveType = "specified doesn't exist" Case DRIVE_CDROM DriveType = "is a CD-ROM drive." Case DRIVE_FIXED DriveType = "cannot be removed I.E. Hard Disk" Case DRIVE_RAMDISK DriveType = "is a RAM disk." Case DRIVE_REMOTE DriveType = "is a remote I.E Network drive." Case DRIVE_REMOVABLE DriveType = "can be removed I.E. Floppy Disk." End Select End If End Function Public Function CzyNET() As Boolean On Error Resume Next CzyNET = False If DriveType(Left(CurrentDb.Name, 1)) Like "*Network drive*" Then CzyNET = True End If End FunctionW celu sprawdzenia, czy uruchomiono program z sieci, można posłużyć się następującym kodem:
If CzyNET = True Then MsgBox "Program wywołano z lokalizacji sieciowej. Przekopiuj plik na dysk lokalny.",48 DoCmd.Quit acQuitSaveNone ElseTo jest dość rozbudowane rozpisanie funkcji'OKEnd If
GetDriveType
, które miało na celu przedstawić
pozostałe typy dysków zwracane przez tę funkcję. W rzeczywistych zastosowaniach można całe sprawdzenie uprościć do kilku linijek,
zachęcam do prób.
K. P.