25 June 2015


Export ke tipe file .csv (comma delimited) sebenernya ga usah terlalu pusing, karena modal nya adalah pengetahuan mengelola Text File.
Namanya comma delimited berarti dibatasi oleh koma hehe...
Cuman yang perlu diperhatikan adalah regional setting yang ada pada PC yang digunakan. Karena Ms. Excel membaca pembatas dengan koma (,) atau titik koma (;) bergantung pada regional setting.

Sebagai contoh pada gambar di bawah ini, untuk setting regional English (United States) dan Indonesian (Indonesia)

Karena Rani menggunakan setting English (United States), saat membuka file di excel dengan delimiter koma (,) bentuknya sebagai berikut:
 Sementara jika membuka file di excel dengan delimiter titik koma (;), tidak otomatis terpisah menjadi kolom.
Disesuaikan sama kebutuhan aja sih sebenernya, klo kita cuma pakai untuk import dan export dengan metoda yang kita buat sendiri koma atau titik koma ga begitu masalah. Dengan asumsi ga perlu buka pake excel. Bahkan kita bisa tentukan karakter delimiter sendiri misal nya tab (vbTab), bintang (*), atau garis vertikal ( | ) buat jaga2 klo nilai data kita mengandung karakter koma.

Lebih jelas nya kita lihat ke contoh yang akan kita buat, tapi sebelumnya perlu dipahami dulu bagaimana menampilkan list table yang ada pada database access. Dan sample ini juga Rani buat berkelanjutan, so baca dulu artikel ini yap!

Kemudian tambahkan UI sebagai berikut:
Pertama kita atur tampilan untuk command button, label dan combobox yang baru kita tambahkan:
(perubahan dengan highlight pink)
Private Sub Form_Load()

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & App.Path & "\latihan.mdb;" & _
          "Persist Security Info=False"
ListTables

Command1.Caption = "Export CSV"
Label1.Caption = "Delimiter"
With Combo1
    .AddItem ","
    .AddItem ";"
    .ListIndex = 0

End With

End Sub


Sub untuk menyimpan file .csv
Sub SaveToFile(FileName As String)
Dim str As String


Dim i As Integer
Dim r As Integer

Open FileName For Output As #1

'tulis header dulu
'skip bagian ini klo ga pengen header

str = ""
For i = 0 To rsData.Fields.Count - 1
   str = str & rsData.Fields(i).Name
   If i < rsData.Fields.Count - 1 Then
        str = str & Combo1.Text
   End If
Next

Print #1, str

'tulis isi data
rsData.MoveFirst
 

For r = 0 To rsData.RecordCount - 1
 str = ""
 
For i = 0 To rsData.Fields.Count - 1
     str = str & rsData.Fields(i).Value
    
If i < rsData.Fields.Count - 1 Then
        str = str & Combo1.Text
     End If
 Next

 Print #1, str
 rsData.MoveNext
Next

Close
#1

End Sub


Dan proses export dilakukan di event Command1 Click. Oiya khusus di event ini rani tambahin error handling karena emang riskan error, klo procedure laen mo ditambahin error handling juga bisa koq.
Private Sub Command1_Click()
On Error GoTo errHandler

Dim strFileName As String

'cek dulu apakah data kosong
If rsData.RecordCount = 0 Then
   MsgBox "Data Kosong": Exit Sub
End If

CommonDialog1.FileName = "Export.csv"
CommonDialog1.DefaultExt = "csv"
CommonDialog1.Filter = "Comma delimited (*.csv)"
CommonDialog1.ShowSave

If CommonDialog1.FileTitle = "" Then Exit Sub
strFileName = CommonDialog1.FileName

If Dir(strFileName) <> "" Then
 If MsgBox("File exists, Overwrite?", vbYesNo, _
           "Confirmation") = vbNo Then Exit Sub
End If

SaveToFile strFileName


Exit Sub
errHandler:
MsgBox "Error: " & Err.Description
End Sub


Bagaimana program berjalan dan kode selengkapnya ada di Part 2 yah...


Click here if you like this article.


4 comments:

hijram mahjura said...

saya coba kok compile error disini?knp ya? rsData.MoveFirstFor r = 0 To rsData.RecordCount - 1

rani irsan said...

pesan error nya apa?

hijram mahjura said...

compile error : syntax error bu, font warna merah, tolong tambahin artikel agar tidak dobel data ketika di save ato di edit.trims

Nano New said...

Syntax error:
Dim str As StringDim i As IntegerDim r As Integer
COBAH UBAH KE
Dim str As String
Dim i As Integer
Dim r As Integer
'------------------
UNTUK ERORR DI Syntax INI
rsData.MoveFirstFor r = 0 To rsData.RecordCount - 1
UBAH KE:
rsData.MoveFirst
For r = 0 To rsData.RecordCount - 1