Parameter String Koneksi untuk Sumber File Teks
Pada artikel sebelumnya saya membahas parameter string koneksi untuk sumber data Excel. Sekarang kita akan fokus pada file teks. Ada berbagai metode untuk menjelaskan skema file teks dan menggunakan informasi selama membuka atau menautkan di Access. Sementara spreadsheet Excel memiliki beberapa kemiripan struktur, ini tidak berlaku untuk file teks. Kami harus menjawab beberapa pertanyaan tentang struktur file teks termasuk:
- Apakah lebarnya dibatasi atau tetap?
- Bagaimana cara mengetahui kapan satu kolom berakhir dan kolom lainnya dimulai?
- Apakah teks dikutip atau tidak?
- Bagaimana seharusnya kita mengurai tanggal dan waktu?
- Bagaimana dengan jumlah mata uangnya? Bagaimana formatnya?
dan mungkin lebih. Meskipun CSV mungkin tampak terdefinisi dengan baik secara sekilas tetapi ketika Anda menggalinya, itu sebenarnya sangat longgar. Tidak ada kesepakatan universal tentang apakah teks harus dikutip, bagaimana tanggal harus diformat. Untuk semua alasan tersebut, menggunakan file teks biasanya memerlukan penggunaan beberapa jenis informasi skema untuk menggambarkan struktur file teks. Ada tiga cara untuk menyimpan informasi skema:
- Sebuah
schema.ini
file disimpan dalam direktori - Akses'
MSysIMEX
danMSysIMEXColumns
tabel - Akses'
ImportExportSpecification.XML
properti.
Untuk memperumit masalah, ada beberapa metode berbeda yang dapat kita gunakan untuk bekerja dengan file teks tetapi tidak semua metode dapat menggunakan semua 3 cara berbeda untuk mendapatkan informasi skema. Misalnya, DoCmd.TransferText
bekerja dengan tabel sistem tetapi tidak menyimpan impor/ekspor. Di sisi lain, DoCmd.RunSavedImportExport
bekerja dengan ImportExportSpecification
obyek. Namun, ImportExportSpecification
tidak digunakan sebagai bagian dari penautan. Jadi untuk diskusi kami, kami sebenarnya hanya memiliki 2 metode yang tersedia dalam konteks membuka atau menautkan ke file teks. Penting untuk dicatat perbedaan antara menyimpan spesifikasi ke MSysIMEXSpecs
&MSysIMEXColumns
tabel vs. menyimpan impor/ekspor yang menjadi ImportExportSpecification
obyek. Kami akan mengeksplorasi 2 metode tersebut di artikel berikutnya.
String koneksi untuk file teks
Kita harus mempertimbangkan bagaimana Access akan melihat file teks. Pada artikel sebelumnya, kita melihat bahwa setiap lembar atau rentang bernama direpresentasikan sebagai "tabel" dalam "database" spreadsheet Excel. Tetapi file teks tidak memiliki konstruksi seperti itu. Apa yang membuat "database" itu? Jawabannya adalah bahwa folder tersebut mewakili "database" dan oleh karena itu file teks apa pun di dalam folder adalah "tabel". Untuk alasan itu, dimungkinkan untuk memiliki beberapa informasi skema untuk folder yang sama jika folder tersebut berisi lebih dari satu format yang memungkinkan untuk file teks apa pun yang disimpan di dalam folder tersebut. Anda akan melihat nanti bahwa ketika kami membuat string koneksi, kami menautkan ke folder, lalu mengakses file individual sebagai tabel.
Oleh karena itu, gunakan pengaturan ini seperti yang ditunjukkan:
Kami kemudian dapat membuka file teks menggunakan kode VBA ini:
Dim db As DAO.Database Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links") Dim tdf As DAO.TableDef For Each tdf In db.TableDefs Debug.Print tdf.Name Dim fld As DAO.Field For Each fld In tdf.Fields Debug.Print fld.Name, Next Debug.Print Dim rs As DAO.Recordset Set rs = tdf.OpenRecordset Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next Debug.Print rs.MoveNext Loop Debug.Print Next
Ini akan menghasilkan output:
Products#csv Products Count PackDate Amount ShipDate Apples 3 12/4/2020 $ 1.02 4/12/2020 Bananas 5 4/12/2020 $ 1,234.56 12/4/2020 Figs 8 5/7/2020 $ 0.01 7/5/2020 Grapes 11 10/10/2020 $12.30 10/10/2020
Perhatikan hal-hal berikut:
- Kami tidak menentukan file teks dalam string koneksi kami. Kami menggunakan folder sebagai gantinya.
- Nama-nama “tabel” diubah karena sebuah titik pada nama bukanlah karakter yang valid. Ergo,
products.csv
menjadiproducts#csv
. - Dibandingkan dengan Excel, tidak ada parameter wajib selain menentukan driver file teks dan jalur ke folder.
Pada artikel berikutnya, Anda akan mempelajari lebih lanjut tentang mendeskripsikan skema file teks. Namun, untuk string koneksi itu sendiri, kata kunci berikut dikenali.
FMT
parameter:Menunjukkan format file teks.
Delimited
:File dibatasi oleh karakter. Karakter yang digunakan ditentukan oleh informasi skema.
Fixed
:File memiliki lebar tetap untuk kolom. Sekali lagi, lebar kolom tertentu ditentukan oleh informasi skema.
HDR
parameter:Baris header
YES
:Baris pertama adalah header dan harus menjadi nama kolom untuk “tabel”/”recordset”
NO
:Baris pertama tidak diperlakukan berbeda dan hanya data. Semua nama kolom akan diberi nama “FN” di mana “N” adalah angka yang dimulai dengan 1
IMEX
parameter:Perilaku Impor/Ekspor
Ini mengatur bagaimana tipe data kolom harus didefinisikan, berdasarkan konten:
1
:Jika kolom berisi tipe data yang berbeda, perlakukan sebagai string. Jika tidak, cocokkan kolom dengan tipe data terbaik.
2
:Selalu cocokkan kolom dengan tipe data tertentu berdasarkan sampel. Hal tersebut dapat menyebabkan kesalahan pembacaan saat kita membaca baris yang berisi data yang tidak sesuai dengan tipe data yang diharapkan.
ACCDB
parameter:Menunjukkan bahwa Access menggunakan format file ACCDB?
Secara default, ini selalu disetel ACCDB=YES dalam format file accdb. Namun, menghilangkannya atau menyetelnya ke NO tampaknya tidak menghasilkan apa-apa. Ini sedikit misteri. Jika ada yang bisa membagikan apa efek parameter ini, posting di komentar dan saya akan memperbarui blog.
DATABASE
parameter:Path ke folder yang berisi file teks
Parameter harus berisi jalur yang sepenuhnya memenuhi syarat. Seharusnya tidak menyertakan nama file teks.
CharacterSet
Parameter:Mengidentifikasi pengkodean karakter yang akan digunakan untuk membaca file teks.
Ini akan dibahas lebih detail di artikel berikutnya. Ini juga dapat dijelaskan dalam informasi skema.
DSN
Parameter:Mengidentifikasi informasi skema yang akan digunakan dengan file teks.
Nama harus sesuai dengan MSysIMEXSpec
, yang akan dianalisis pada artikel selanjutnya. Ini hanya berfungsi dengan MSysIMEX***
tabel. Jika Anda ingin menggunakan schema.ini
, Anda hanya tidak menyertakan DSN
di string koneksi Anda.
Penting untuk dicatat bahwa driver file teks hanya akan mempertimbangkan parameter yang tercantum di atas. Tidak mungkin memasukkan kata kunci lain dan menguraikannya oleh driver file teks. Karena alasan itu, Anda tidak akan dapat menentukan semua detail tentang file teks dari string koneksi saja.
Skema default untuk file teks
Secara teori, Anda dapat membuka atau menautkan file teks tanpa informasi skema apa pun, tetapi ini jarang berhasil. Dalam situasi ini, Access hanya akan menganggap default untuk berbagai opsi. Jika file teks sesuai dengan semua default saat ini, Access akan berhasil membaca file. Lebih penting lagi, tidak adanya kesalahan dalam membuka atau menautkan ke file teks tidak berarti data direpresentasikan secara bermakna. Misalnya, jumlah mata uang yang diformat khusus dapat ditafsirkan sebagai teks daripada mata uang, dan teks tanpa batas dengan koma di dalam teks mungkin salah diuraikan, menambahkan kolom yang tidak diinginkan. Defaultnya ditentukan di dua tempat yang memungkinkan:
- Akses akan melihat pengaturan registri. Untuk instalasi Office 365, registri dapat ditemukan di:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text
. Kami akan merujuk ke lokasi ini sebagai “Kunci registri teks” di artikel berikutnya. - Setelan yang akan Anda lihat di
Region
applet di panel kontrol Windows. Kami akan merujuk ke lokasi ini sebagai "Pengaturan Windows".
Catatan tentang penyandian untuk file teks
Adalah wajib untuk memiliki penyandian yang benar terlepas dari metode mana yang mungkin Anda gunakan untuk mengakses file teks Anda. Ketika konten file teks Anda dibatasi hanya untuk karakter dalam setengah bagian bawah dari poin ASCII (misalnya 0-127), tidak masalah pengkodean apa yang Anda pilih untuk file teks Anda. Defaultnya biasanya cukup baik. Namun, jika file teks Anda dapat berisi Unicode atau karakter apa pun yang lebih besar dari 127, maka Anda, pengembang, untuk mengetahui penyandiannya. Jika pengkodean yang salah ditentukan, teks mungkin tidak diimpor seperti yang diharapkan dan tidak akan menimbulkan kesalahan apa pun. Untuk detail yang berantakan, saya akan merujuk Anda ke Joel Spolsky tentang masalah ini.
Memilih antara schema.ini
dan MSysIMEX***
tabel
Seperti yang akan Anda lihat di artikel berikutnya, kedua metode memiliki tumpang tindih yang cukup besar dalam kemampuan. Oleh karena itu, Anda mungkin menemukan diri Anda memiliki pilihan untuk menggunakan keduanya. Perbedaan utama bermuara pada apakah Anda ingin skema disimpan di dalam aplikasi Anda atau di dalam folder tempat file teks diharapkan berada. Saat Anda menggunakan schema.ini
file, Anda mengasumsikan bahwa file teks akan ada di folder tertentu dan akan memiliki nama tertentu.
Dengan MSysIMEX***
, Anda dapat memproses file teks apa pun dari mana saja hanya dengan merujuk pada spesifikasi yang ditentukan. Namun, tidak mudah untuk mengedit spesifikasi di luar Access. Bahkan di dalam Access, tidak mudah untuk mengubah spesifikasi menggunakan UI. schema.ini
memiliki beberapa fitur tambahan yang tidak langsung tersedia dengan MSysIMEX***
tabel.
Meskipun demikian, pertanyaan tentang tempat menyimpan spesifikasi kemungkinan besar akan menjadi faktor terpenting Anda dalam memutuskan mana yang akan digunakan.
Kesimpulan
Anda sangat dianjurkan untuk memiliki informasi skema yang ditentukan untuk file teks apa pun yang berisi tanggal atau jumlah mata uang. Tanggal dan jumlah mata uang sensitif terhadap pengaturan regional yang dapat mengganggu penguraian data yang benar. Karena kami memiliki dua sistem yang berbeda dengan serangkaian opsi yang tersedia, kami harus mempertimbangkan masing-masing di artikel berikutnya. Anda memiliki pilihan untuk menggunakan salah satu (atau bahkan keduanya di antara file teks yang berbeda). Sekarang kita akan beralih ke schema.ini
di artikel berikutnya. Nanti kita akan melihat MSysIMEX***
tabel di artikel berikut.