Skip to main content

Memasukkan Data ke Tabel Menggunakan Class Module di Form Periode

Form periode digunakan untuk memasukkan data yang berhubungan dengan periode akuntansi ke dalam tabel tblPeriode. Tidak seperti form Identitas Perusahaan yang hanya terdiri dari satu record dan dapat diedit sewaktu-waktu, form Periode dapat terdiri dari banyak record dan untuk melakukan pengeditan tidak boleh dilakukan sembarangan. Form Periode dilengkapi dengan pengecekan apakah data yang kita masukkan sudah valid atau belum. Bila data yang dimasukkan belum valid, maka data itu tidak akan tersimpan.

Cara pembuatan form pada contoh ini sama dengan pada contoh postingan sebelumnya yang berjudul Memasukkan Data ke Tabel Menggunakan Class Module di Form Identitas Perusahaan, langkah 1 sampai dengan langkah 6, tetapi menggunakan field dan properti yang berkaitan dengan tblPeriode. Tampilan Design view dari form untuk yang bersumber dari tblPeriode adalah seperti gambar berikut ini.


Setelah itu, isikan kode berikut ini pada VBA editor untuk Form_frmPeriode:
  1. '------------------------------------------  
  2. ' VERSION 1.0 CLASS  
  3. ' Attribute VB_Name = "Form_frmPeriode"  
  4.   
  5. ' Author: Bambang Subroto,   
  6. ' email: bambang.subro@gmail.com  
  7.   
  8. '------------------------------------------  
  9. Option Compare Database  
  10. Dim strPgnId As String  
  11. Dim dtTglAwalThn, dtTglAkhirThn, dtTglAwalBulan, dtTglAkhirBulan, dtTglAwalBulanBerikut, dtTglAkhirBulanBerikut As Date  
  12. Dim dtTglAwalBulanSebelum, dtTglAkhirBulanSebelum, dtWaktu As Date  
  13. Dim dtTglAwalThnSebelum, dtTglAkhirThnSebelum, dtTglAwalBulanThnSebelum, dtTglAkhirBulanThnSebelum As Date  
  14. Dim dtTglAwalThnBerikut, dtTglAkhirThnBerikut, dtTglAwalBulanThnBerikut, dtTglAkhirBulanThnBerikut As Date  
  15. Dim intStatusThnBerjalan, intStatusThnSebelum As Integer  
  16. Function BandingkanData()  
  17. 'Memberikan nilai pembanding pada field setiap kali terjadi perubahan data yang tersimpan  
  18.   dtTglAwalThn = Nz(Me.TglAwalThn, "")  
  19.   dtTglAkhirThn = Nz(Me.TglAkhirThn, "")  
  20.   dtTglAwalBulan = Nz(Me.TglAwalBulan, "")  
  21.   dtTglAkhirBulan = Nz(Me.TglAkhirBulan, "")  
  22.   dtTglAwalBulanSebelum = Nz(Me.TglAwalBulanSebelum, "")  
  23.   dtTglAkhirBulanSebelum = Nz(Me.TglAkhirBulanSebelum, "")  
  24.   dtTglAwalBulanBerikut = Nz(Me.TglAwalBulanBerikut, "")  
  25.   dtTglAkhirBulanBerikut = Nz(Me.TglAkhirBulanBerikut, "")  
  26.   dtTglAwalThnSebelum = Nz(Me.TglAwalThnSebelum, "")  
  27.   dtTglAkhirThnSebelum = Nz(Me.TglAkhirThnSebelum, "")  
  28.   dtTglAwalBulanThnSebelum = Nz(Me.TglAwalBulanThnSebelum, "")  
  29.   dtTglAkhirBulanThnSebelum = Nz(Me.TglAkhirBulanThnSebelum, "")  
  30.   dtTglAwalThnBerikut = Nz(Me.TglAwalThnBerikut, "")  
  31.   dtTglAkhirThnBerikut = Nz(Me.TglAkhirThnBerikut, "")  
  32.   dtTglAwalBulanThnBerikut = Nz(Me.TglAwalBulanThnBerikut, "")  
  33.   dtTglAkhirBulanThnBerikut = Nz(Me.TglAkhirBulanThnBerikut, "")  
  34.   intStatusThnBerjalan = Me.StatusThnBerjalan  
  35.   intStatusThnSebelum = Me.StatusThnSebelum  
  36. End Function  
  37. Private Sub Form_Current()  
  38.   If Me.StatusThnBerjalan = 2 Then Me.AllowEdits = False  
  39. End Sub  
  40.   
  41. Private Sub Simpan_Click()  
  42. 'Menyimpan data dengan menggunakan Database Recordset. Jumlah record yang tersimpan  
  43. 'hanya satu untuk kemudian akan diedit bila ada perubahan record.  
  44. Dim dbs As Database  
  45. Dim rs As Recordset  
  46. Dim strMsg As String  
  47.   strMsg = ""  
  48.   If Me.TglAkhirThn < Me.TglAwalThn Then  
  49.     strMsg = "Tanggal akhir tahun tidak boleh di bawah tanggal " & _  
  50.     Format(Me.TglAwalThn, "dd mmm yyyy")  
  51.     Me.TglAkhirThn.SetFocus  
  52.   ElseIf Me.TglAwalThnBerikut < Me.TglAwalThn Then  
  53.     strMsg = "Tanggal awal tahun untuk periode akuntasi berikutnya tidak boleh di bawah tanggal" & _  
  54.     Format(Me.TglAwalThn, "dd mmm yyyy")  
  55.     Me.TglAwalThnBerikut.SetFocus  
  56.   ElseIf Me.TglAkhirBulanThnSebelum <> Me.TglAkhirThnSebelum Then  
  57.     strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus sama dengan tanggal akhir tahun sebelumnya " & _  
  58.     Format(Me.TglAkhirThnSebelum, "dd mmm yyyy")  
  59.     Me.TglAkhirBulanThnSebelum.SetFocus  
  60.   ElseIf Me.TglAkhirBulanThnSebelum < Me.TglAwalBulanThnSebelum Then  
  61.     strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus di atas tanggal awal bulan " & _  
  62.     Format(Me.TglAwalBulanThnSebelum, "dd mmm yyyy")  
  63.     Me.TglAkhirBulanThnSebelum.SetFocus  
  64.   ElseIf Me.TglAkhirBulanThnSebelum + 1 <> Me.TglAwalThn Then  
  65.     strMsg = "Tanggal akhir bulan untuk periode akuntasi sebelumnya harus berlanjut ke tanggal awal tahun berjalan " & _  
  66.     Format(Me.TglAwalThn, "dd mmm yyyy")  
  67.     Me.TglAkhirBulanThnSebelum.SetFocus  
  68.   ElseIf Me.TglAwalBulanThnBerikut > Me.TglAkhirBulanThnBerikut Then  
  69.     strMsg = "Tanggal akhir bulan untuk periode akuntasi berikutnya harus di atas tanggal awal bulan " & _  
  70.     Format(Me.TglAwalBulanThnBerikut, "dd mmm yyyy")  
  71.     Me.TglAkhirBulanThnBerikut.SetFocus  
  72.   ElseIf Me.TglAwalBulanThnBerikut <> Me.TglAwalThnBerikut Then  
  73.     strMsg = "Tanggal awal bulan untuk periode akuntasi berikutnya harus sama dengan tanggal awal tahun berikut " & _  
  74.     Format(Me.TglAwalThnBerikut, "dd mmm yyyy")  
  75.     Me.TglAwalBulanThnBerikut.SetFocus  
  76.   ElseIf Me.TglAwalThnSebelum > Me.TglAwalThn Then  
  77.     strMsg = "Tanggal awal tahun untuk periode akuntasi sebelumnya tidak boleh di atas " & _  
  78.     Format(Me.TglAwalThn, "dd mmm yyyy")  
  79.     Me.TglAwalThnSebelum.SetFocus  
  80.   ElseIf (Me.TglAwalBulan < Me.TglAwalThn Or Me.TglAwalBulan > Me.TglAkhirThn) Then _  
  81.     strMsg = "Tanggal awal bulan harus berada di antara tanggal " _  
  82.     & Format(Me.TglAwalThn, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")  
  83.     Me.TglAwalBulan.SetFocus  
  84.   ElseIf Me.TglAkhirBulan > Me.TglAkhirThn Or Me.TglAkhirBulan < Me.TglAwalBulan Then _  
  85.     strMsg = "Tanggal akhir bulan harus berada di antara tanggal " _  
  86.     & Format(Me.TglAwalBulan, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")  
  87.     Me.TglAkhirBulan.SetFocus  
  88.   ElseIf Me.TglAwalBulanBerikut <> Me.TglAkhirBulan + 1 Or Me.TglAwalBulanBerikut > Me.TglAkhirThn Then _  
  89.      strMsg = "Tanggal awal bulan berikut harus berada di antara tanggal " _  
  90.     & Format(Me.TglAkhirBulan + 1, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")  
  91.     Me.TglAwalBulanBerikut.SetFocus  
  92.   ElseIf Me.TglAkhirBulanBerikut < Me.TglAwalBulanBerikut Or Me.TglAkhirBulanBerikut > Me.TglAkhirThn Then _  
  93.      strMsg = "Tanggal akhir bulan berikut harus berada di antara tanggal " _  
  94.     & Format(Me.TglAwalBulanBerikut, "dd mmm yyyy") & " dan " & Format(Me.TglAkhirThn, "dd mmm yyyy")  
  95.     Me.TglAkhirBulanBerikut.SetFocus  
  96.   End If  
  97.   If strMsg <> "" Then  
  98.     MsgBox strMsg  
  99.     Exit Sub  
  100.   End If  
  101.     
  102.   Set dbs = Application.CurrentDb  
  103.   Set rs = CurrentDb.OpenRecordset("tblPeriode")  
  104.   'Jika tabel belum berisi record, maka tambahkan record baru (AddNew) untuk disimpan.  
  105.   'Jika sudah ada satu record tersimpan, maka tampilkan record untuk diedit.  
  106.   If DCount("*""tblPeriode") = 0 Then  
  107.     rs.AddNew  
  108.   Else  
  109.     Do While Not rs.EOF  
  110.       If rs!StatusThnBerjalan = 0 Then Exit Do  
  111.       rs.MoveNext  
  112.     Loop  
  113.     rs.Edit  
  114.   End If  
  115.   If rs!StatusThnBerjalan = 0 Then  
  116.     rs!TglAwalThn = Me.TglAwalThn  
  117.     rs!TglAkhirThn = Me.TglAkhirThn  
  118.     rs!TglAwalBulan = Me.TglAwalBulan  
  119.     rs!TglAkhirBulan = Me.TglAkhirBulan  
  120.     rs!TglAwalBulanSebelum = Me.TglAwalBulanSebelum  
  121.     rs!TglAkhirBulanSebelum = Me.TglAkhirBulanSebelum  
  122.     rs!TglAwalBulanBerikut = Me.TglAwalBulanBerikut  
  123.     rs!TglAkhirBulanBerikut = Me.TglAkhirBulanBerikut  
  124.     rs!StatusThnBerjalan = Me.StatusThnBerjalan  
  125.     rs!TglAwalThnSebelum = Me.TglAwalThnSebelum  
  126.     rs!TglAkhirThnSebelum = Me.TglAkhirThnSebelum  
  127.     rs!TglAwalBulanThnSebelum = Me.TglAwalBulanThnSebelum  
  128.     rs!TglAkhirBulanThnSebelum = Me.TglAkhirBulanThnSebelum  
  129.     rs!StatusThnSebelum = Me.StatusThnSebelum  
  130.     rs!TglAwalThnBerikut = Me.TglAwalThnBerikut  
  131.     rs!TglAkhirThnBerikut = Me.TglAkhirThnBerikut  
  132.     rs!TglAwalBulanThnBerikut = Me.TglAwalBulanThnBerikut  
  133.     rs!TglAkhirBulanThnBerikut = Me.TglAkhirBulanThnBerikut  
  134.     rs!PgnId = [TempVars]![IdPengguna]  
  135.     rs!Waktu = Now()  
  136.     Me.Waktu = rs!Waktu  
  137.     rs.Update  
  138.   End If  
  139.   'Membandingkan record yang sudah ada dan menyimpannya dalam memori sementara  
  140.   BandingkanData  
  141.     
  142.   rs.Close  
  143.   Set rs = Nothing  
  144.   Me.PgnId = [TempVars]![IdPengguna]  
  145.   Me.PgnId.Requery  
  146.   Me.Waktu.Requery  
  147.     
  148.   MsgBox "Data telah tersimpan.", vbOKOnly  
  149. End Sub  
  150. Private Sub Form_Open(Cancel As Integer)  
  151. 'Mengisikan field yang akan ditampilkan di layar dengan field yang tersimpan  
  152. Dim dbs As Database  
  153. Dim rst As Recordset  
  154.   If IjinDitolak(Me.Name) Then  
  155.     MsgBox TampilkanLogin & " tidak bisa mengakses menu/form ini"  
  156.     Cancel = True  
  157.     Exit Sub  
  158.   End If  
  159.   Set dbs = Application.CurrentDb  
  160.   Set rst = CurrentDb.OpenRecordset("tblPeriode")  
  161.   Me.Caption = "Periode Akuntansi " & Nz(IdPerusahaan("Nama"), "")  
  162.   If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True  
  163.   
  164. 'Lakukan proses pengisian  
  165.   Do While Not rst.EOF  
  166.     If rst!StatusThnBerjalan = 0 Then  
  167.       Me.TglAwalThn = rst!TglAwalThn  
  168.       Me.TglAkhirThn = rst!TglAkhirThn  
  169.       Me.TglAwalBulan = rst!TglAwalBulan  
  170.       Me.TglAkhirBulan = rst!TglAkhirBulan  
  171.       Me.TglAwalBulanSebelum = rst!TglAwalBulanSebelum  
  172.       Me.TglAkhirBulanSebelum = rst!TglAkhirBulanSebelum  
  173.       Me.TglAwalBulanBerikut = rst!TglAwalBulanBerikut  
  174.       Me.TglAkhirBulanBerikut = rst!TglAkhirBulanBerikut  
  175.       Me.StatusThnBerjalan = rst!StatusThnBerjalan  
  176.       Me.TglAwalThnSebelum = rst!TglAwalThnSebelum  
  177.       Me.TglAkhirThnSebelum = rst!TglAkhirThnSebelum  
  178.       Me.TglAwalBulanThnSebelum = rst!TglAwalBulanThnSebelum  
  179.       Me.TglAkhirBulanThnSebelum = rst!TglAkhirBulanThnSebelum  
  180.       Me.StatusThnSebelum = rst!StatusThnSebelum  
  181.       Me.TglAwalThnBerikut = rst!TglAwalThnBerikut  
  182.       Me.TglAkhirThnBerikut = rst!TglAkhirThnBerikut  
  183.       Me.TglAwalBulanThnBerikut = rst!TglAwalBulanThnBerikut  
  184.       Me.TglAkhirBulanThnBerikut = rst!TglAkhirBulanThnBerikut  
  185.       Me.PgnId = rst!PgnId  
  186.       Me.Waktu = rst!Waktu  
  187.         
  188.       BandingkanData  
  189.       Exit Sub  
  190.     End If  
  191.         
  192.     rst.MoveNext  
  193.   Loop  
  194. 'penyelesaian  
  195.   rst.Close  
  196.   Set rst = Nothing  
  197. End Sub  
  198. Private Sub Form_Unload(Cancel As Integer)  
  199. 'Pada saat form akan ditutup, jika ada nilai field yang berbeda dengan nilai field yang tersimpan  
  200. 'di memori sementara (atau ada perubahan data),tampilkan pesan peringatan apakah data yang tersimpan  
  201. 'di memori sementara tidak perlu disimpan di database dan form langsung ditutup.  
  202.   If Me.TglAwalThn <> dtTglAwalThn Or Me.TglAkhirThn <> dtTglAkhirThn Or _  
  203.      Me.TglAwalBulan <> dtTglAwalBulan Or Me.TglAkhirBulan <> dtTglAkhirBulan Or _  
  204.      Me.TglAwalBulanBerikut <> dtTglAwalBulanBerikut Or Me.TglAkhirBulanBerikut <> dtTglAkhirBulanBerikut Then  
  205.       If MsgBox("Ada data yang berubah. Apakah anda ingin keluar tanpa manyimpan data lebih dahulu?", vbYesNo) = vbYes Then  
  206.           Cancel = False  
  207.       Else  
  208.           Cancel = True  
  209.       End If  
  210.   End If  
  211. End Sub  
  212. Private Sub Form_Close()  
  213.   Form_frmMenus.Visible = True  
  214. End Sub  
  215. Private Sub TglAwalBulan_AfterUpdate()  
  216.   If Me.TglAwalBulan = Me.TglAwalThn Then  
  217.     Me.TglAwalBulanSebelum = Me.TglAwalBulan  
  218.     Me.TglAwalBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 1, Day(Me.TglAwalBulan))  
  219.     Me.TglAkhirBulan = Me.TglAwalBulanBerikut - 1  
  220.     Me.TglAkhirBulanSebelum = Me.TglAkhirBulan  
  221.     Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 2, Day(Me.TglAwalBulan)) - 1  
  222.     Me.TglAwalBulanThnSebelum = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) - 1, Day(Me.TglAwalBulan))  
  223.     Me.TglAkhirBulanThnSebelum = Me.TglAwalBulan - 1  
  224.     Me.TglAwalBulanThnBerikut = DateSerial(Year(Me.TglAwalBulan) + 1, Month(Me.TglAwalBulan), Day(Me.TglAwalBulan))  
  225.     Me.TglAkhirBulanThnBerikut = DateSerial(Year(Me.TglAwalBulanBerikut) + 1, Month(Me.TglAwalBulanBerikut), Day(Me.TglAwalBulanBerikut)) - 1  
  226.   Else  
  227.     Me.TglAwalBulanSebelum = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) - 1, Day(Me.TglAwalBulan))  
  228.     Me.TglAkhirBulanSebelum = Me.TglAwalBulan - 1  
  229.     Me.TglAwalBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 1, Day(Me.TglAwalBulan))  
  230.     Me.TglAkhirBulan = Me.TglAwalBulanBerikut - 1  
  231.     Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAwalBulan), Month(Me.TglAwalBulan) + 2, Day(Me.TglAwalBulan)) - 1  
  232.     If Year(Me.TglAwalBulanBerikut) <> Year(Me.TglAwalThn) Then  
  233.       Me.TglAwalBulanThnBerikut = Me.TglAwalBulanBerikut  
  234.       Me.TglAwalBulanBerikut = Me.TglAwalBulan  
  235.     End If  
  236.     If Year(Me.TglAkhirBulanBerikut) <> Year(Me.TglAwalThn) Then  
  237.       Me.TglAkhirBulanThnBerikut = Me.TglAkhirBulanBerikut  
  238.       Me.TglAkhirBulanBerikut = Me.TglAkhirBulan  
  239.     End If  
  240.   End If  
  241.       
  242. End Sub  
  243. Private Sub TglAkhirBulan_AfterUpdate()  
  244. If Me.TglAkhirBulan = Me.TglAkhirThn Then  
  245.   Me.TglAkhirBulanBerikut = Me.TglAkhirBulan  
  246.   Me.TglAwalBulanBerikut = Me.TglAwalBulan  
  247. Else  
  248.   Me.TglAkhirBulanBerikut = DateSerial(Year(Me.TglAkhirBulan), Month(Me.TglAkhirBulan) + 1, Day(Me.TglAkhirBulan))  
  249. End If  
  250.   Me.TglAkhirBulanSebelum = Me.TglAwalBulan - 1  
  251. End Sub  
  252. Private Sub TglAwalThn_AfterUpdate()  
  253.   Me.TglAwalThnSebelum = DateSerial(Year(Me.TglAwalThn) - 1, Month(Me.TglAwalThn), Day(Me.TglAwalThn))  
  254.   Me.TglAwalThnBerikut = DateSerial(Year(Me.TglAwalThn) + 1, Month(Me.TglAwalThn), Day(Me.TglAwalThn))  
  255. End Sub  
  256. Private Sub TglAkhirThn_AfterUpdate()  
  257.   Me.TglAkhirThnSebelum = DateSerial(Year(Me.TglAkhirThn) - 1, Month(Me.TglAkhirThn), Day(Me.TglAkhirThn))  
  258.   Me.TglAkhirThnBerikut = DateSerial(Year(Me.TglAkhirThn) + 1, Month(Me.TglAkhirThn), Day(Me.TglAkhirThn))  
  259. End Sub  

Tampilan akhir form beserta record yang tersimpan tampak seperti gambar di atas. Kita dapat menambahkan tombol yang diperlukan seperti preview, print, dan sebagainya.

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

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

Memahami Properti Validation Rule dan Validation Text pada Tabel di Access