String Koneksi Ad-hoc dan Kueri Heterogen untuk MS Access
Kueri heterogen adalah alasan mengapa string koneksi, terutama string koneksi ad-hoc penting. Dalam artikel seri sebelumnya, Anda melihat bagaimana Anda bisa menyesuaikan parameter koneksi untuk menyambungkan ke Excel dan file teks. Untuk file teks, Anda juga dapat menjelaskan skema struktur file teks menggunakan schema.ini
atau spesifikasi yang disimpan. Di artikel pertama, Anda juga mempelajari perbedaan antara menautkan dan membuka sumber data.
Kueri heterogen alih-alih kode VBA
Anda melihat di artikel sebelumnya contoh kode untuk membuka sumber data tersebut menggunakan OpenDatabase
DAO metode.
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Ini mungkin memberi Anda kesan bahwa satu-satunya cara untuk membuka sumber data adalah melalui kode. Tapi itu tidak perlu terjadi! Anda sebenarnya bisa membuka sumber data arbitrer hanya menggunakan kueri Access. Berikut ini contoh sintaks yang dapat Anda jalankan dalam kueri Access:
SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];
Secara umum, string koneksi yang Anda masukkan ke dalam OpenDatabase
Parameter ke-4 adalah yang Anda awali dengan "tabel". Oleh karena itu sintaks umumnya adalah:
FROM [<complete connection string>].[<name of the table>]
Anda dapat menggunakan OpenDatabase
metode dan ulangi TableDefs
untuk menemukan nama tabel yang valid. Anda kemudian dapat menggunakannya untuk mengisi bagian ke-2 dari nama tersebut.
Mengapa membuka alih-alih tautan?
Salah satu keuntungan membuka dibandingkan menautkan adalah Anda dapat mengubah string koneksi saat runtime. Anda juga tidak harus berurusan dengan pembersihan yang diperlukan seperti menghapus objek tertaut yang tidak lagi diperlukan. Ini murni sementara yang akan sempurna untuk memindahkan data dari satu sumber ke sumber lain tanpa menulis kode VBA apa pun.
Inilah satu skenario yang mungkin. Misalkan kita ingin membuat file teks yang merupakan output dari tampilan pada database SQL Server kita. Anda melihat dari artikel sebelumnya bahwa kami dapat menulis kode VBA untuk mengulang kumpulan rekaman DAO dan menulis konten satu per satu. Namun sebagai alternatif, kita bisa membuat kueri Access dengan SQL ini:
INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count) SELECT Products, Count FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];
Karena tujuan dan sumber bukan sumber Access, inilah yang kami sebut "kueri heterogen". Perhatikan bahwa meskipun vwProducts
adalah tabel tertaut, itu masih akan menjadi kueri "heterogen". Itu karena kami masih menggabungkan sumber data yang berbeda dalam satu kueri.
Lebih penting lagi, dengan menggunakan kueri heterogen, kami menghindari kebutuhan untuk membuat objek sementara dalam aplikasi Access kami. Membuat objek sementara dapat menyebabkan aplikasi Access membengkak. Ini adalah kasus bahkan dengan mengimpor atau dengan menautkan atau dengan menggunakan kumpulan rekaman di VBA. File yang membengkak mungkin memerlukan pemadatan &perbaikan. Namun, saat Anda menggunakan kueri heterogen untuk mentransfer data secara langsung dari satu sumber data ke sumber data lainnya, Anda menghindari semua pembengkakan itu. Akibatnya, ini membuatnya ideal untuk skenario di mana aplikasi Access Anda perlu menghasilkan beberapa file tanpa pemeliharaan pada aplikasi itu sendiri.
Membuat string koneksi ad-hoc
Sekarang, Anda dapat melihat mengapa memahami parameter yang digunakan dalam string koneksi itu penting. Sangat penting untuk mengontrol tujuan (misalnya jalur untuk file teks atau rentang untuk lembar Excel). Dengan sumber data non-relasional tersebut, apa yang merupakan "database" dan "tabel" dalam sumber data tersebut mungkin tidak intuitif. Anda dapat menggunakan 3 artikel terakhir sebagai referensi untuk bantuan dalam membuat string koneksi dan informasi skema untuk memastikan bahwa tata letak keluar dengan benar. Meskipun demikian, ada juga pintasan yang dapat Anda gunakan untuk membantu Anda menemukan string koneksi.
Anda dapat menggunakan Tab Eksternal dan "Impor Teks" atau Impor Excel" dan pilih opsi tautan. Biasanya opsi ketiga pada wizard seperti yang ditunjukkan.
Setelah Anda melalui wizard dan menyimpan tabel tertaut baru, Anda kemudian dapat memeriksa string koneksi melalui jendela langsung VBA dengan kode ini:
?CurrentDb.TableDefs("<name of linked table>").Connect
Ini dapat memberi Anda petunjuk tentang cara membuat string koneksi dan Anda kemudian dapat menyesuaikannya. Sebagian besar waktu Anda akan menemukan diri Anda menyesuaikan jalur atau nama tabel sehingga biasanya cukup berfungsi sebagai teknik selama pengembangan Anda. Anda kemudian dapat membuat kueri heterogen yang sesuai dan menghapus tabel tertaut.
Kesimpulan
Dalam seri ini, Anda mempelajari perbedaan antara menautkan dan membuka. Anda kemudian melihat bagaimana Excel dan file teks dapat digunakan seolah-olah mereka adalah DAO.Database
objek dengan "tabel". Dengan artikel ke-2, Anda mempelajari tentang parameter koneksi untuk buku kerja Excel. Dalam artikel ke-3, Anda melihat perlunya memiliki informasi skema untuk mendeskripsikan file teks. Artikel ke-4 menjelaskan cara menggunakan schema.ini
. Di artikel ke-5, Anda melihat bagaimana MSysIMEXSpecs
dan MSysIMEXColumns
dapat digunakan sebagai pengganti schema.ini
metode.
Akhirnya, kami menggabungkan semuanya dalam membangun kueri heterogen sebagai contoh solusi kode rendah. Kita tidak perlu menulis kode VBA dalam jumlah besar hanya untuk mendorong data dari satu sumber ke sumber lain. Saya pikir Anda akan setuju bahwa jauh lebih mudah untuk mengubah kueri Access dengan menyesuaikan jalur atau nama tabel daripada menulis rutin VBA yang besar dan kompleks untuk membaca dan menulis data. Lebih penting lagi dengan menggunakan kueri heterogen, menjadi lebih mudah untuk menangani perubahan struktur di kedua sisi. Kolom baru ditambahkan? Tidak masalah, cukup tambahkan kolom baru ke kueri dan selesai.
Namun, seperti yang Anda lihat, ini membutuhkan pemahaman yang baik tentang konstruksi string koneksi. Untuk alasan itu, perlu mempelajari seluk-beluk string koneksi secara mendalam seperti yang kami lakukan dari artikel ke-2 hingga ke-5. Meskipun kita dapat menggunakan wizard tabel tertaut untuk memberi kita petunjuk tentang string koneksi. Tapi itu hanya petunjuk. Oleh karena itu, ada baiknya mengetahui cara mengontrol output dengan tepat. Saya harap Anda setuju bahwa menginvestasikan beberapa upaya untuk memahami cara kerja rangkaian koneksi akan membuahkan hasil dalam penghematan tenaga kerja.