Skip to main content

Mengenal Field Size Decimal pada Tipe Data Number di MS Access

Field size Decimal pada Tipe data Number di MS Access mempunyai keunikan yang membedakannya dengan field size yang lain. Perbedaan itu terletak pada properti Precision dan Scale. Properti Precision merujuk pada jumlah digit maksimum dalam sekumpulan angka. Sementara itu, properti Scale adalah jumlah digit di sebelah kanan tanda desimal yang ada pada sekumpulan angka.


Sebagai contoh, sekumpulan angka 123.45 mempunyai properti Precision sebanyak 5 ("12345") dan properti Scale sebanya 2 ("45"). Dalam contoh ini, tanda titik berfungsi sebagai pemisah desimal. Properti Precision dan Scale mengatur seberapa besar angka yang boleh dimasukkan ke dalam sebuah field. Dengan Precision=5 dan Scale=2 seperti contoh di atas, maka angka terbesar yang bisa dimasukkan adalah 999.99. Sedangkan angka terkecil yang bisa dimasukkan adalah -999.99. 

Sebagai ilustrasi, misal ada tabel dengan sebuah field yang mempunyai Name=HargaSatuan dan Caption=Harga Satuan seperti terlihat di gambar bawah. Properti Precision=5 dan Scale=2.

Saat tabel itu dibuka dengan mode Datasheet View, angka yang bisa dimasukkan di field HargaSatuan terletak di kisaran -999.99 dan +999.99. Bila kita mencoba mengetikkan angka 1000 di field itu, maka akan muncul pesan kesalahan "The decimal field's precision is too small to accept the numeric you attempted to add". Pesan kesalahan yang sama akan muncul saat kita memasukkan angka -1000.

Hal ini terjadi karena kita telah mengatur properti Precision=5 dan Scale=2. Artinya:
  1. Angka di sebelah kanan tanda desimal (pada gambar di atas di belakang titik) sepanjang 2 digit (merupakan nilai properti Scale), dengan angka maksimum  adalah 99.
  2. Angka bulat di sebelah kiri tanda desimal sepanjang Precision-Scale=5-2=3 digit, dengan angka maksimum/minimum adalah +/- 999.
  3. Jadi angka yang bisa dimasukkan ke dalam field HargaSatuan adalah +/- 999.99.
Bila byPrecision=nilai properti Precision dan byScale=nilai properti Scale, maka nilai maksimum field dengan size desimal bila dirumuskan dalam VBA adalah sebagai berikut:

  1. CDec(String(byPrecision, "9")) / 10 ^ byScale  

Fungsi String(byPrecision, "9") akan mengulang karakter 9 sebanyak byPrecision kali. Selanjutnya, karakter ini dikonversi menjadi angka numerik decimal yang kemudian dibagi 10 pangkat byScale.

Untuk memperoleh angka maksimum dan minimum dari sebuah field size desimal, kita dapat menggunakan fungsi berikut ini:

  1. Public Enum enumMinMaks  
  2.   angkaMinimum = 1  
  3.   angkaMaksimum = 2  
  4.   angkaNol = 0  
  5. End Enum  
  6. Function rangeAngkaDecimal(Optional intEnumMinMaks As enumMinMaks, Optional byPrecision As ByteOptional byScale As ByteAs Variant  
  7.   Dim maxDecimal, minDecimal, tempDecimal As Variant  
  8.     
  9.   maxDecimal = CDec("9,999,999,999,999,999,999,999,999,999")  
  10.   minDecimal = CDec("-9,999,999,999,999,999,999,999,999,999")  
  11.     
  12.   If byScale > byPrecision Or byPrecision > 28 Then  
  13.     rangeAngkaDecimal = "Error"  
  14.     Exit Function  
  15.   End If  
  16.     
  17.   If intEnumMinMaks = 0 Then rangeAngkaDecimal = 0  
  18.     
  19.   If intEnumMinMaks = angkaMinimum Then  
  20.     If byPrecision = 0 Then  
  21.       rangeAngkaDecimal = minDecimal  
  22.       Exit Function  
  23.     End If  
  24.     rangeAngkaDecimal = -(CDec(String(byPrecision, "9")) / 10 ^ byScale)  
  25.   End If  
  26.     
  27.   If intEnumMinMaks = angkaMaksimum Then  
  28.     If byPrecision = 0 Then  
  29.       rangeAngkaDecimal = maxDecimal  
  30.       Exit Function  
  31.     End If  
  32.     rangeAngkaDecimal = CDec(String(byPrecision, "9")) / 10 ^ byScale  
  33.   End If      
  34. End Function  
Fungsi rangeAngkaDecimal di atas mempunyai tiga parameter yang semuanya opsional. Berikut ini berbagai macam contoh aplikasi fungsi rangeAngkaDecimal di Immediate Window.
  1. ?rangeAngkaDecimal  
  2.  0   
  3. ?rangeAngkaDecimal(angkaMaksimum,5,2)  
  4.  999.99   
  5. ?rangeAngkaDecimal(angkaMinimum,5,2)  
  6. -999.99   
  7. ?rangeAngkaDecimal(angkaMaksimum,28,0)  
  8.  9999999999999999999999999999   
  9. ?rangeAngkaDecimal(angkaMinimum,28,0)  
  10. -9999999999999999999999999999   
  11. ?rangeAngkaDecimal(angkaMaksimum,28,6)  
  12.  9999999999999999999999.999999   
  13. ?rangeAngkaDecimal(angkaMinimum,28,6)  
  14. -9999999999999999999999.999999   
  15. ?rangeAngkaDecimal(,2,6)  
  16. Error '(byPrecision harus lebih besar dari byScale)  

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

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