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.
Function cekDrive()
'------------------------------------------
' Fungsi untuk mengecek disk drive
'------------------------------------------
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set colDrives = objFSO.Drives
  For Each objDrive In colDrives
    Debug.Print "Drive: " & objDrive.DriveLetter
  Next
  Set colDrives = Nothing
  Set objFSO = Nothing
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:
Function koneksiDrive(strDriveLetter As String) As Boolean
'------------------------------------------
' Fungsi untuk koneksi ke disk drive
'------------------------------------------
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not (objFSO.DriveExists(strDriveLetter)) Then
    MsgBox "Drive " & strDriveLetter  & " tidak ada"
    Cancel = True
    Exit Function
   End If
  Set objDrive = objFSO.GetDrive(strDriveLetter)
  If Not (objDrive.isReady) Then
    MsgBox "Drive " & strDriveLetter & " belum siap"
  End If
  koneksiDrive = objDrive.isReady
  Set objDrives = Nothing
  Set objFSO = Nothing
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.
Function rincikanPropertiDrive(strDrive As String) As String
  Dim strRincianProperti As String
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objDrive = objFSO.GetDrive(strDrive)
    strRincianProperti = "Drive letter: " & objDrive.DriveLetter _
    & vbCrLf & "Drive type: " & objDrive.DriveType _
    & vbCrLf & "Share name: " & objDrive.ShareName _
    & vbCrLf & "Is ready: " & IIf(koneksiDrive(strDrive), "Drive siap", "Drive belum siap")
  If objDrive.isReady = True Then
    strRincianProperti = strRincianProperti & vbCrLf & _
      "Available space: " & Format(objDrive.AvailableSpace, "0,00") _
    & vbCrLf & "Free Space: " & Format(objDrive.FreeSpace, "0,00") _
    & vbCrLf & "File system: " & objDrive.FileSystem _
    & vbCrLf & "Path: " & objDrive.Path _
    & vbCrLf & "Root folder: " & objDrive.RootFolder _
    & vbCrLf & "Serial number: " & objDrive.SerialNumber _
    & vbCrLf & "Total size: " & Format(objDrive.TotalSize, "0,00") _
    & vbCrLf & "Volume name: " & objDrive.VolumeName
  End If
  rincikanPropertiDrive = strRincianProperti
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.
Function cekKesiapanDrive()
'------------------------------------------
' Fungsi untuk mengecek kesiapan disk drive
'------------------------------------------
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set colDrives = objFSO.Drives
  For Each objDrive in colDrives
   If objDrive.IsReady = True Then
     Debug.Print "Drive letter: " & objDrive.DriveLetter
     Debug.Print"Free space: " & objDrive.FreeSpace
   Else
     Debug.Print"Drive letter: " & objDrive.DriveLetter
   End If
  Next
  Set colDrives = Nothing
  Set objFSO = Nothing
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:
    Private Sub Form_Open(Cancel As Integer)
      rincikanDriveYangAda "cmbDrive"
    End Sub
    Function rincikanDriveYangAda(strNamaControl As String)
      Dim objFSO As Object
      Dim itemDrive() As Variant, n As Integer
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set colDrives = objFSO.Drives
      n = 0
      ReDim Preserve itemDrive(colDrives.Count)
      For Each objDrive In colDrives
       itemDrive(n) = objDrive.DriveLetter & ":"
       n = n + 1
      Next
      Controls(strNamaControl).RowSource = Join(itemDrive, ";")
      Set colDrives = Nothing
      Set objFSO = Nothing
    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]:
        Private Sub cmbDrive_BeforeUpdate(Cancel As Integer)
          Dim objFSO As Object
          Set objFSO = CreateObject("Scripting.FileSystemObject")
          If Not (objFSO.DriveExists(Me!cmbDrive)) Then
            MsgBox "drive tidak ada"
            Cancel = True
            Exit Sub
          End If
          Set objFSO = Nothing
        End Sub
      8. After Update= [Event Procedure] dan fungsi di bawah:
        Private Sub cmbDrive_AfterUpdate()
          Me!txtItemDriveProp = rincikanPropertiDrive(Me!cmbDrive)
        End Sub
        
        Function rincikanPropertiDrive(strDrive As String) As String
          Dim strRincianProperti As String
          Dim objFSO As Object
          Set objFSO = CreateObject("Scripting.FileSystemObject")
          Set objDrive = objFSO.GetDrive(strDrive)
            strRincianProperti = "Drive letter: " & objDrive.DriveLetter _
            & vbCrLf & "Tipe drive (Drive type): " & konversiTipeDrive(objDrive.DriveType) _
            & vbCrLf & "Share name: " & objDrive.ShareName _
            & vbCrLf & "Status (Is ready): " & IIf(koneksiDrive(strDrive), "Drive siap", "Drive belum siap")
          If objDrive.isReady = True Then
            strRincianProperti = strRincianProperti & vbCrLf & _
             "Total size: " & konversiByte(objDrive.TotalSize) _
            & vbCrLf & "Byte yang masih bebas (Free Space): " & konversiByte(objDrive.FreeSpace) _
            & vbCrLf & "Byte yang bisa dipergunakan (Available space): " & konversiByte(objDrive.AvailableSpace) _
            & vbCrLf & "Sistem file (File system): " & objDrive.FileSystem _
            & vbCrLf & "Path: " & objDrive.Path _
            & vbCrLf & "Root folder: " & objDrive.RootFolder _
            & vbCrLf & "Nomor Seri (Serial number): " & objDrive.SerialNumber _
            & vbCrLf & "Nama volume (Volume name): " & objDrive.VolumeName
          End If
          rincikanPropertiDrive = strRincianProperti
        End Function
        Function konversiByte(sinSize As Single) As String
          Dim strSize As String
          If sinSize < 1024 Then
            strSize = Format(sinSize, "##,##0.00 Bytes")
          ElseIf sinSize < 1024 ^ 2 Then
            strSize = Format(sinSize / 1024, "##,##0.00 KB")
          ElseIf sinSize < 1024 ^ 3 Then
            strSize = Format(sinSize / 1024 ^ 2, "##,##0.00 MB")
          Else
            strSize = Format(sinSize / 1024 ^ 3, "##,##0.00 GB")
          End If
          konversiByte = strSize
        End Function
        Function konversiTipeDrive(intTipe As Integer) As String
          Dim strTipe As String
          Select Case intTipe
            Case 1: strTipe = "1 - Removable drive"
            Case 2: strTipe = "2 - Fixed drive (hard disk)"
            Case 3: strTipe = "3 - Mapped network drive"
            Case 4: strTipe = "4 - CD-ROM drive"
            Case 5: strTipe = "5 - RAM disk"
            Case Else: strTipe = CStr(intTipe) & " - Tidak teridentifikasi"
          End Select
          konversiTipeDrive = strTipe
        End Function
        
        '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

Normalisasi, Denormalisasi, dan Anomali Database

Mengenal Jenis dan Kegunaan Layout Pada Form di Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access