Skip to main content

Manajemen Disk Drive dengan Menggunakan FileSystemObject

Di MS Access, kita bisa melakukan manajemen disk drive dengan menggunakan FileSystemObject. Disk drive adalah perangkat yang memungkinkan sebuah komputer untuk membaca atau menyimpan data ke dalam sebuah media penyimpan yang ada di dalam perangkat itu. Sebuah komputer paling tidak memiliki satu buah Hard Disk Drive (HDD) yang digunakan untuk menempatkan Operating System dalam mengelola perangkat keras dan lunak dari komputer itu. Selain HDD, sebuah komputer juga dilengkapi dengan sebuah CD/DVD drive yang digunakan untuk membaca atau menyimpan data dalam sebuah CD/DVD. Bila belum cukup, maka kita juga bisa menambahkan disk drive yang sifatnya portable/mobile, seperti portable HDD, CD/DVD drive, SD card, dan flash disk.

Menampilkan disk drive yang ada dalam sebuah komputer

Untuk mengelola disk drive yang ada dalam sebuah komputer, kita harus mengetahui terlebih dahulu disk drive yang manakah yang tersedia di komputer itu. FileSystemObject memungkinkan kita untuk menampilkan disk drive yang ada di sebuah komputer, termasuk removable drive dan mapped network drive.

Untuk menampilkan disk drive di Access VBA, kita bisa menggunakan FSO dengan mencantumkan referensi yang berisi properti DriveLetter dari masing-masing drive. Kita dapat menggunakan statement For Each... Next untuk menampilkannya, seperti kode VBA berikut ini.
  1. Function cekDrive()  
  2. '------------------------------------------  
  3. ' Fungsi untuk mengecek disk drive  
  4. '------------------------------------------  
  5.   Dim objFSO As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   Set colDrives = objFSO.Drives  
  8.   For Each objDrive In colDrives  
  9.     Debug.Print "Drive: " & objDrive.DriveLetter  
  10.   Next  
  11.   Set colDrives = Nothing  
  12.   Set objFSO = Nothing  
  13. End Function  
Pada Gambar 1 di bawah, fungsi cekDrive digunakan untuk mengetahui drive apa saja yang ada di sebuah komputer. Di bagian bawah dari gambar itu, ada jendela Immediate yang digunakan untuk menjalankan fungsi cekDrive, hasilnya adalah Drive: C sampai dengan Drive: H.
Gambar 1 Cek Drive di VBA Editor dan Immediate Window

Mengakses disk drive tertentu

Bila mengetahui drive yang ingin diakses, maka kita dapat menggunakan metode GetDrive. GetDrive memungkinkan kita untuk menampilkan informasi drive tertentu dalam sebuah komputer. Caranya adalah dengan memasukan sebuah parameter tunggal yang merupakan drive letter atau UNC path dari folder yang dishared (bila berada dalam sebuah jaringan).  Adapun format penulisannya adalah seperti contoh berikut:
  • C
  • C:
  • C:\
Kode VBA di Access yang digunakan adalah sebagai berikut:
  1. Function koneksiDrive(strDriveLetter As StringAs Boolean  
  2. '------------------------------------------  
  3. ' Fungsi untuk koneksi ke disk drive  
  4. '------------------------------------------  
  5.   Dim objFSO As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   If Not (objFSO.DriveExists(strDriveLetter)) Then  
  8.     MsgBox "Drive " & strDriveLetter  & " tidak ada"  
  9.     Cancel = True  
  10.     Exit Function  
  11.    End If  
  12.   Set objDrive = objFSO.GetDrive(strDriveLetter)  
  13.   If Not (objDrive.isReady) Then  
  14.     MsgBox "Drive " & strDriveLetter & " belum siap"  
  15.   End If  
  16.   koneksiDrive = objDrive.isReady  
  17.   Set objDrives = Nothing  
  18.   Set objFSO = Nothing  
  19. End Function  
Sebelum metode GetDrive dieksekusi, drive yang diinginkan harus dicek terlebih dahulu, apakah drive itu ada atau tidak. Bila tidak ada (dinyatakan melalui metode DriveExists di atas), maka pesan bahwa drive tidak ada ditampilkan dan kita dapat menggantinya dengan drive yang sudah ada. Bila drive yang dimaksud itu ada, maka proses akan dilanjutkan ke tahap berikutnya.

Kita dapat mengisikan strDriveLetter dengan ketiga format penulisan di atas, seperti koneksiDrive("C"), koneksiDrive("C:"), dan koneksiDrive("C\"). Ketiganya akan memberikan hasil yang sama. Output fungsi di atas bernilai Boolean: True bila drive terkoneksi dan False bila drive belum siap terkoneksi.

Menampilkan rincian properti disk drive

Sebagai seorang administrator sistem, selain mengetahui drive apa saja yang tersedia di sebuah komputer, kita juga mesti tahu rincian properti dari drive itu. Rincian properti sebuah drive dapat berupa nomor seri, jumlah kapasitas yang masih tersedia, dan sebagainya. Berikut ini adalah rincian properti yang bisa diperoleh dengan menggunakan FileSystemObject.
Property Description
AvailableSpace Menampilkan jumlah kapasitas drive yang masih tersedia (tidak terpakai), dalam satuan byte. Untuk menampilkan jumlah dalam kilobyte, maka nilainya harus dibagi 210=1.024. Bila ingin menampilkan dalam megsbyte, maka nilainya harus dibagi 220=1.048.576. Properti AvailableSpace menunjukkan jumlah byte yang tersedia bagi pengguna untuk bekerja (saat mengetik, browse, dsb). Jika dilakukan pengaturan kuota disk, nilai properti ini mungkin lebih kecil dari jumlah byte yang tersedia di drive.
DriveLetter Menampilkan huruf yang menunjukkan letak drive itu berada seperti drive A, B, dan C. Penulisan huruf itu tidak diikuti tanda titik dua (":"), jadi kita harus menambahkannya sendiri.
DriveType Berupa bilangan bulat yang menunjukkan tipe drive dengan rinciannya sebagai berikut: 1 - Removable drive 2 - Fixed drive (hard disk) 3 - Mapped network drive 4 - CD-ROM drive 5 - RAM disk
FreeSpace Menampilkan jumlah byte yang benar-benar bebas dan tidak terpakai. Tidak seperti AvailableSpace, properti FreeSpace menampilkan jumlah byte yang benar-benar tersedia pada sebuah drive, tak peduli apakah pembatasan kuota dilakukan atau tidak.
FileSystem Tipe sistem file yang dipergunakan pada drive, apakah FAT, FAT32, atau NTFS)
IsReady Menunjukkan apakah sebuah drive bisa diakses, nilainya berupa boolean - True (1) atau False (0). Untuk floppy disk atau CD-ROM, bila tidak ada disk yang disisipkan ke dalamnya, nilai IsReady adalah False.
Path Nama path dari drive. Bila fisik drive berada di dalam tempat OS berada, path ditunjukkan dengan drive letter beserta tanda titik dua (":"), contohnya: C:, D:, dsb. Sedangkan bila berada di mapped network drive, path ditunjukkan dengan Universal Naming Convention (UNC) , contohnya: \\Server1\NamaFolder.
RootFolder Path dari root folder tempat drive berada.
SerialNumber Nomor seri drive yang diberikan oleh produsen. Untuk floppy disk dan mapped network drive, nomor seri drive tidak ada (0).
ShareName Name folder yang digunakan saat di-share di mapped network drive.
TotalSize Menampilkan ukuran total sebuah drive, dalam satuan byte.
VolumeName Nama volume (jika ada) yang digunakan pada drive.

Untuk merinci properti drive yang terpasang dalam sebuah komputer, kita bisa menggunakan FSO dengan mencantumkan referensi yang berisi properti dari masing-masing drive. Kita dapat menggunakan statement For Each... Next untuk menampilkannya, seperti kode VBA berikut ini.
  1. Function rincikanPropertiDrive(strDrive As StringAs String  
  2.   Dim strRincianProperti As String  
  3.   Dim objFSO As Object  
  4.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  5.   Set objDrive = objFSO.GetDrive(strDrive)  
  6.     strRincianProperti = "Drive letter: " & objDrive.DriveLetter _  
  7.     & vbCrLf & "Drive type: " & objDrive.DriveType _  
  8.     & vbCrLf & "Share name: " & objDrive.ShareName _  
  9.     & vbCrLf & "Is ready: " & IIf(koneksiDrive(strDrive), "Drive siap""Drive belum siap")  
  10.   If objDrive.isReady = True Then  
  11.     strRincianProperti = strRincianProperti & vbCrLf & _  
  12.       "Available space: " & Format(objDrive.AvailableSpace, "0,00") _  
  13.     & vbCrLf & "Free Space: " & Format(objDrive.FreeSpace, "0,00") _  
  14.     & vbCrLf & "File system: " & objDrive.FileSystem _  
  15.     & vbCrLf & "Path: " & objDrive.Path _  
  16.     & vbCrLf & "Root folder: " & objDrive.RootFolder _  
  17.     & vbCrLf & "Serial number: " & objDrive.SerialNumber _  
  18.     & vbCrLf & "Total size: " & Format(objDrive.TotalSize, "0,00") _  
  19.     & vbCrLf & "Volume name: " & objDrive.VolumeName  
  20.   End If  
  21.   rincikanPropertiDrive = strRincianProperti  
  22. End Function  

Memastikan kesiapan sebuah drive

Sebuah drive yang belum siap untuk digunakan dapat menimbulkan masalah yang mengganggu bagi kita. Saat kita merinci properti drive apa saja yang ada di sebuah komputer, bisa jadi akan muncul pesan kesalahan yang tertulis "Drive not ready". Pada dasarnya, FSO mendeteksi ada drive yang dikatakan "not ready" itu. Hanya saja, untuk properti AvailableSpace or FreeSpace, FSO menganggap bahwa drive belum siap untuk digunakan. Dalam pikiran kita sebagai pengguna komputer, "drive not ready" berarti drive-nya belum terpasang sehingga kita berpikir bahwa drive itu belum siap untuk digunakan. Dalam pemahaman FSO, sebuah drive "is ready" bila ada sebuah disk yang sudah disisipkan dengan benar ke dalam drive. Dengan demikian, semua properti drive bisa ditampilkan. Bila drive (is) "not ready", maka kita hanya bisa menampilkan empat properti berikut ini:
  • DriveLetter
  • DriveType
  • IsReady
  • ShareName
Bila pesan kesalahan "Drive not ready" muncul, maka kita tidak bisa menampilkan properti drive yang lain dengan benar. Untuk itu kita harus memastikan sebuah drive dalam posisi "ready" atau tidak. Caranya dengan mengecek properti IsReady di atas terhadap sebuah drive yang nilainya adalah True atau False. Bila nilai IsReady adalah True, kita bisa menampilkan semua properti dari drive yang bersangkutan. Sebaliknya, bila nilai IsReady adalah False, kita hanya bisa menampilkan keempat properti di atas.

Contoh kode VBA di bawah ini digunakan untuk mengecek kesiapan drive yang ada di sebuah komputer. Untuk setiap drive yang dicek, kode VBA menggunakan properti IsReady untuk memastikan bahwa drive dalam posisi siap. Jika IsReady bernilai True, maka kode VBA akan menampilkan drive letter dan jumlah byte dari FreeSpace. Jika IsReady bernilai False, maka kode VBA akan menampilkan drive letter saja.
  1. Function cekKesiapanDrive()  
  2. '------------------------------------------  
  3. ' Fungsi untuk mengecek kesiapan disk drive  
  4. '------------------------------------------  
  5.   Dim objFSO As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   Set colDrives = objFSO.Drives  
  8.   For Each objDrive in colDrives  
  9.    If objDrive.IsReady = True Then  
  10.      Debug.Print "Drive letter: " & objDrive.DriveLetter  
  11.      Debug.Print"Free space: " & objDrive.FreeSpace  
  12.    Else  
  13.      Debug.Print"Drive letter: " & objDrive.DriveLetter  
  14.    End If  
  15.   Next  
  16.   Set colDrives = Nothing  
  17.   Set objFSO = Nothing  
  18. End Function  
Bila fungsi di atas dijalankan melalui Immediate Window, hasilnya seperti tersaji di Gambar 1 berikut ini:
Gambar 2. Cek kesiapan drive
Pada Gambar 2 di bagian Immediate, drive C, D, dan H siap untuk dikoneksikan, sedangkan drive E belum siap. Sebagai informasi, drive E adalah sebuah disk drive yang tidak ada disknya, sedangkan drive H adalah sebuah portable drive yang di dalamnya terdapat DVD, dengan sisa byte sama dengan 0.

Contoh Administrasi Drive dengan Menggunakan Access VBA

Pada bagian ini, kita akan membuat administrasi drive seperti penjelasan di atas dengan menggunakan form dan VBA di Access. Berikut ini adalah langkah-langkah pembuatannya.
  1. Buatlah form dengan menggunakan Blank Form, yaitu dengan mengklik Create >> Forms >> Blank Form.
  2. Pada properti form On Open, sisipkan [Event Procedure] beserta fungsi di bawah ini:
    1. Private Sub Form_Open(Cancel As Integer)  
    2.   rincikanDriveYangAda "cmbDrive"  
    3. End Sub  
    4. Function rincikanDriveYangAda(strNamaControl As String)  
    5.   Dim objFSO As Object  
    6.   Dim itemDrive() As Variant, n As Integer  
    7.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
    8.   Set colDrives = objFSO.Drives  
    9.   n = 0  
    10.   ReDim Preserve itemDrive(colDrives.Count)  
    11.   For Each objDrive In colDrives  
    12.    itemDrive(n) = objDrive.DriveLetter & ":"  
    13.    n = n + 1  
    14.   Next  
    15.   Controls(strNamaControl).RowSource = Join(itemDrive, ";")  
    16.   Set colDrives = Nothing  
    17.   Set objFSO = Nothing  
    18. End Function  
  3. Pada form yang masih kosong, sisipkan dua buah control sebagai berikut:
    1. Satu buah combo box, dengan properti sebagai berikut:
      1. Name= cmbDrive
      2. Control Source= Unbound
      3. Row Source= Unbound
      4. Source Type= Value List
      5. List Width=.5"
      6. Limit to List= Yes
      7. Before Update= [Event Procedure]:
        1. Private Sub cmbDrive_BeforeUpdate(Cancel As Integer)  
        2.   Dim objFSO As Object  
        3.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
        4.   If Not (objFSO.DriveExists(Me!cmbDrive)) Then  
        5.     MsgBox "drive tidak ada"  
        6.     Cancel = True  
        7.     Exit Sub  
        8.   End If  
        9.   Set objFSO = Nothing  
        10. End Sub  
      8. After Update= [Event Procedure] dan fungsi di bawah:
        1. Private Sub cmbDrive_AfterUpdate()  
        2.   Me!txtItemDriveProp = rincikanPropertiDrive(Me!cmbDrive)  
        3. End Sub  
        4.   
        5. Function rincikanPropertiDrive(strDrive As String) As String  
        6.   Dim strRincianProperti As String  
        7.   Dim objFSO As Object  
        8.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
        9.   Set objDrive = objFSO.GetDrive(strDrive)  
        10.     strRincianProperti = "Drive letter: " & objDrive.DriveLetter _  
        11.     & vbCrLf & "Tipe drive (Drive type): " & konversiTipeDrive(objDrive.DriveType) _  
        12.     & vbCrLf & "Share name: " & objDrive.ShareName _  
        13.     & vbCrLf & "Status (Is ready): " & IIf(koneksiDrive(strDrive), "Drive siap""Drive belum siap")  
        14.   If objDrive.isReady = True Then  
        15.     strRincianProperti = strRincianProperti & vbCrLf & _  
        16.      "Total size: " & konversiByte(objDrive.TotalSize) _  
        17.     & vbCrLf & "Byte yang masih bebas (Free Space): " & konversiByte(objDrive.FreeSpace) _  
        18.     & vbCrLf & "Byte yang bisa dipergunakan (Available space): " & konversiByte(objDrive.AvailableSpace) _  
        19.     & vbCrLf & "Sistem file (File system): " & objDrive.FileSystem _  
        20.     & vbCrLf & "Path: " & objDrive.Path _  
        21.     & vbCrLf & "Root folder: " & objDrive.RootFolder _  
        22.     & vbCrLf & "Nomor Seri (Serial number): " & objDrive.SerialNumber _  
        23.     & vbCrLf & "Nama volume (Volume name): " & objDrive.VolumeName  
        24.   End If  
        25.   rincikanPropertiDrive = strRincianProperti  
        26. End Function  
        27. Function konversiByte(sinSize As Single) As String  
        28.   Dim strSize As String  
        29.   If sinSize < 1024 Then  
        30.     strSize = Format(sinSize, "##,##0.00 Bytes")  
        31.   ElseIf sinSize < 1024 ^ 2 Then  
        32.     strSize = Format(sinSize / 1024, "##,##0.00 KB")  
        33.   ElseIf sinSize < 1024 ^ 3 Then  
        34.     strSize = Format(sinSize / 1024 ^ 2, "##,##0.00 MB")  
        35.   Else  
        36.     strSize = Format(sinSize / 1024 ^ 3, "##,##0.00 GB")  
        37.   End If  
        38.   konversiByte = strSize  
        39. End Function  
        40. Function konversiTipeDrive(intTipe As IntegerAs String  
        41.   Dim strTipe As String  
        42.   Select Case intTipe  
        43.     Case 1: strTipe = "1 - Removable drive"  
        44.     Case 2: strTipe = "2 - Fixed drive (hard disk)"  
        45.     Case 3: strTipe = "3 - Mapped network drive"  
        46.     Case 4: strTipe = "4 - CD-ROM drive"  
        47.     Case 5: strTipe = "5 - RAM disk"  
        48.     Case Else: strTipe = CStr(intTipe) & " - Tidak teridentifikasi"  
        49.   End Select  
        50.   konversiTipeDrive = strTipe  
        51. End Function  
        52.   
        53. 'Sisipkan fungsi "Function koneksiDrive(strDriveLetter As String) As Boolean" di sini  
        Sisipkan fungsi Function koneksiDrive(strDriveLetter As String) As Boolean yang sudah di bahas di depan sesuai dengan petunjuk di atas.
    2. Satu buah text box, dengan properti sebagai berikut:
      1. Name= txtItemDriveProp
      2. Control Source= Unbound
      3. Enabled= No
      4. Locked= Yes
Design View dari form di atas akan tampak seperti Gambar 3, sedangkan Form View akan tampak seperti Gambar 4.
Gambar 3. Contoh Administrasi Drive Access VBA Design View
Gambar 4. Contoh Administrasi Drive dengan Menggunakan Access VBA Form View

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Cara Sederhana Membuat Fungsi Terbilang di MS Acess VBA

Fungsi Untuk Membuka Database di Access VBA