Data budget disimpan di dalam tabel tblBudget. Tabel ini bisa diisikan melalui single form sebagai default view-nya. Mengenai pembuatan form ini, kita bisa menggunakan cara seperti telah dibahas pada posting yang berkaitan dengan cara membuat form, baik itu melalui wizard atau manual dengan menggunakan blank form. Setelah selesai dibuat, kita dapat menyimpan form budget dengan nama frmBudget seperti pada Gambar 1.
|
Gambar 1 |
Dalam prakteknya, memasukkan data budget ke dalam database adalah pekerjaan yang lumayan berat, karena data itu harus dimasukkan satu per satu untuk setiap kode rekening dalam satu bulan selama satu tahun. Di satu sisi, pengisian data budget ke dalam database biasanya selalu dikejar target, harus selesai dalam hitungan tak lebih dari satu minggu
Untuk memudahkan pengisian data budget, kita dapat membuat program untuk mengimpor data budget ke dalam database. Umumnya, data budget biasanya disusun dengan menggunakan aplikasi spreadsheet Excel, sehingga kita akan menggunakan file Excel untuk kemudian ditransfer ke Access. Berikut ini adalah langkah pembuatan form beserta kode VBA untuk mengimpor file Excel ke Access.
- Buatlah form dengan menggunakan Blank Form. Simpanlah form itu dengan nama frmImporBudget.
- Pada bagian form detail, sisipkan text box untuk mengisikan lokasi folder beserta nama filenya. Properti yang perlu diubah untuk text box itu meliputi
- Name=nmFile
- Default Value==PreferensSistem("FolderPenyimpanan")
- Control Source dibiarkan kosong (unbound).
- Sisipkan tombol perintah dengan properti
- Name=TampilkanData
- Caption= Tampilkan Data Impor.
- Di sebelah kanan tombol perintah TampilkanData, sisipkan tombol perintah dengan properti
- Name=ImporData
- Caption=Impor Data Budget
- Enabled=No.
Enabled akan sama dengan Yes bila eksekusi melalui tombol TampilkanData telah berjalan sempurna.
- Sisipkan text box tanpa label di bagian kanan atas dari form detail dengan properti
- Name=ErrorMsg
- Control Source= ="Ada kesalahan impor data budget. Klik di sini untuk melihatnya"
- Visible=No
- Is Hyperlink=Yes
- Font Weight=Bold
- Fore Color= #ED1C24 (atau merah).
Fungsi text box ini adalah untuk memberi dan menampilkan informasi pesan kesalahan pada saat data ditampilkan dan sebelum dilakukan transfer data ke tabel budget. Jadi bila ada kesalahan dalam proses impor data, pesan ini akan muncul dan memberitahu kesalahan macam apa yang terjadi yaitu dengan mengklik atau membuka link yang ada didalamnya. Untuk membuka link itu, aturlah properti event On Click= =PreviewUnRefresh("rptBudgetImpor Error",1), yaitu membuka report kesalahan macam apa yang terjadi selama proses impor data budget.
- Di bagian paling bawah dari form detail, sisipkan subform dengan nama frmImporBudgetSubform dan Source Object kosong (unbound subform). Subform ini hanya akan muncul setelah tombol TampilkanData ditekan.
|
Gambar 2 |
- Tampilan design form dapat kita lihat pada Gambar 2. Untuk prosedur dan event procedure yang menyertai form frmImporBudget, kita dapat menggunakan kode VBA di bawah ini.
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
Me.Caption = "Impor Data Budget " & Nz(IdPerusahaan("Nama"), "")
If Not IsNull(Me.LoginPgn) Then Me.logout.Visible = True
End Sub
Private Sub ImporData_Click()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field2
Dim strSqla, strSqlb As String
Dim n, i As Integer '1440 twips = 1 inch
DoCmd.SetWarnings False
Set dbs = CurrentDb()
Set qdf = dbs.QueryDefs("qryBudgetImpor")
n = qdf.Fields.Count
i = 0
strSqla = "INSERT INTO tblBudget (KodeRek, Deriv1, Deriv2, Tahun,Bulan, JumlahBudget) SELECT "
For Each fld In qdf.Fields
i = i + 1
strSqla = strSqla & fld.Name & ", "
If i = 3 Then Exit For
Next fld
i = 0
For Each fld In qdf.Fields
i = i + 1
If i >= 4 Then
strSqlb = strSqla & Val(Left(fld.Name, 4)) & " as Tahun, " & Val(Right(fld.Name, 2)) & " as Bulan, [" _
& fld.Name & "] from " & qdf.Name & ";"
DoCmd.RunSQL strSqlb
End If
Next fld
DoCmd.SetWarnings True
End Sub
Private Sub Proses_Click()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field2
Dim strSqla, strSqlb As String
Dim n, i As Integer '1440 twips = 1 inch
DoCmd.SetWarnings False
Set dbs = CurrentDb()
Set qdf = dbs.QueryDefs("qryBudgetImpor")
n = qdf.Fields.Count
i = 0
DoCmd.SetWarnings False
strSqla = "SELECT qryBudgetImpor.KodeRekUtama AS Kode, 'tidak ada dalam daftar rekening utama' AS Deskripsi " _
& "INTO tblBudgetImporError FROM tblRekUtama RIGHT JOIN qryBudgetImpor " _
& "ON tblRekUtama.KodeRek = qryBudgetImpor.KodeRekUtama WHERE (((tblRekUtama.KodeRek) Is Null));"
DoCmd.RunSQL strSqla
strSqla = "INSERT INTO tblBudgetImporError (Kode, Deskripsi) SELECT qryBudgetImpor.Deriv1 AS Kode, " _
& "'tidak ada dalam daftar rekening derivatif 1' AS Deskripsi FROM qryBudgetImpor " _
& "LEFT JOIN tblRekDerivatif1 ON qryBudgetImpor.Deriv1 = tblRekDerivatif1.KodeDeriv1 " _
& "WHERE (((tblRekDerivatif1.KodeDeriv1) Is Null));"
DoCmd.RunSQL strSqla
strSqla = "INSERT INTO tblBudgetImporError (Kode, Deskripsi) SELECT qryBudgetImpor.Deriv2 AS Kode, " _
& "'tidak ada dalam daftar rekening derivatif 2' AS Deskripsi FROM qryBudgetImpor " _
& "LEFT JOIN tblRekDerivatif2 ON qryBudgetImpor.Deriv2 = tblRekDerivatif2.KodeDeriv2 " _
& "WHERE (((tblRekDerivatif2.KodeDeriv2) Is Null));"
DoCmd.RunSQL strSqla
i = 0
For Each fld In qdf.Fields
i = i + 1
If i < 4 Then
If fld.Type <> 10 Then
strSqla = "INSERT INTO tblBudgetImporError (Kode, Deskripsi) SELECT '" & fld.Name & "' AS Kode, " _
& "'tipe data pada kolom " & fld.Name & " bukan text/alfabet/string' AS Deskripsi;"
DoCmd.RunSQL strSqla
End If
Else
If fld.Type < 2 Or fld.Type > 7 Then
strSqla = "INSERT INTO tblBudgetImporError (Kode, Deskripsi) SELECT '" & fld.Name & "' AS Kode, " _
& "'tipe data pada kolom " & fld.Name & " bukan angka' AS Deskripsi;"
DoCmd.RunSQL strSqla
End If
End If
Next fld
DoCmd.SetWarnings True
End Sub
Private Sub TampilkanData_Click()
If Not AdaFile(Me.nmFile) Then
MsgBox "File atau folder tidak ada"
Exit Sub
End If
Me.ErrorMsg.Visible = False
Me.ImporData.Enabled = False
Me.frmImporBudgetSubform.SourceObject = ""
DoCmd.SetWarnings False
Set dbsObject = Application.CurrentData
For Each obj In dbsObject.AllTables
If obj.Name = "tblBudgetImpor" Then
DoCmd.DeleteObject acTable, obj.Name
End If
Next obj
DoCmd.TransferSpreadsheet acImport, 9, "tblBudgetImpor", Me.nmFile, True
DoCmd.SetWarnings True
ImporBudgetDariExcel
Me.frmImporBudgetSubform.SourceObject = "frmImporBudgetSubform"
Me.frmImporBudgetSubform.Requery
Proses_Click
If DCount("*", "tblBudgetImporError") > 0 Then
Me.ErrorMsg.Visible = True
Me.ImporData.Enabled = False
Else
Me.ErrorMsg.Visible = False
Me.ImporData.Enabled = True
End If
End Sub
Sumber data budget yang akan diimpor disimpan dalam format Excel 1997-2000. Jadi ekstensinya menggunakan .xls, misalnya importbudget.xls, impor.xls, dan sebagainya. Sel awal pada Excel berada di A1 yang merupakan sel untuk judul kolom Kode Rekening Utama, kemudian diikuti Deriv1, Deriv2, yyyym1, yyyym2, dan seterusnya, di mana yyyy adalah nama tahun, m1 adalah bulan pertama, m2 adalah bulan kedua, sampai dengan bulan ke-12. Format selengkapnya tampak seperti Gambar 3
|
Gambar 3 |
Di Gambar 3, tiga kolom utama bisa diberi judul dengan nama apapun, yang penting unik. Sedangkan kolom ke-4, ke-5, dan seterusnya harus mengikuti pola yyyymm di mana yyyy adalah tahun dan mm adalah bulan. Pada gambar itu, tahun yang digunakan adalah 2014, sedangkan bulan dimulai dari bulan 01 dan diakhiri bulan 12. Jadi kolom itu diberi judul 201401, 201402, ..., 201412.
Untuk kolom dengan tahun yang berbeda, pola yang digunakan tetap sama, misalnya 201304, 201305,...,201403, yang berarti kolom itu dimulai bulan April 2013 dan berakhir bulan Maret 2014. Sebelum dipindahkan ke tabel tblBudget, data impor itu ditampung dahulu di sebuah tabel temporer yang kemudian ditampilkan di form frmImporBudget untuk proses pengecekan manual, seperti tampak pada Gambar 4. Bila tidak ada kesalahan, maka data impor dapat disimpan di tabel tblBudget dengan menekan tombol Impor Data Budget.
|
Gambar 4 |
Data yang telah tersimpan di tblBudget hanya bisa diperbaiki melalui form frnImporBudget secara satu per satu. Jadi, agar tidak membuang waktu percuma, kita harus memastikan bahwa tabel budget yang diimpor dari Excel telah sesuai dengan apa yang diinginkan.
|
Gambar 5 |
Laporan Kesalahan Impor Data Budget
Untuk menampilkan kesalahan selama proses impor data budget, kita harus membuat report kesalahan impor budget. Bentuk report kesalahan itu sederhana, seperti tampak pada Gambar 5. Record source report ini diambil dari tblBudgetImpor Error yang dihasilkan saat kita menekan tombol impor Tampilkan Data Impor (TampilkanData).
Comments
Post a Comment