Akhirnya, setelah beberapa kali gagal untuk membuat SQL Server "berbicara dengan" database Access – baik sebagai "Server Tertaut" di SSMS atau melalui OPENROWSET()
di T-SQL – Saya menemukan posting blog ini yang menawarkan tiga (3) saran berikut.
Tweak #1:Pengaturan Penyedia OLE DB
Penyedia OLE DB untuk ACE (atau Jet) harus mengaktifkan opsi "Parameter dinamis" dan "Izinkan dalam proses". Di SSMS, buka
Objek Server> Server Tertaut>Penyedia
cabang, klik kanan "Microsoft.ACE.OLEDB.12.0" (atau "Microsoft.Jet.OLEDB.4.0"), pilih "Properties", dan pastikan opsi tersebut dipilih:
Tweak #2:Izin folder sementara
Ini adalah salah satu yang membuatku bingung.
Rupanya SQL Server perlu menulis informasi ke dalam file sementara saat menjalankan kueri OLE DB terhadap database Access. Karena SQL Server berjalan sebagai layanan, ia menggunakan folder %TEMP% dari akun tempat layanan berjalan.
Jika layanan SQL Server berjalan di bawah akun "Layanan Jaringan" bawaan, maka folder temp adalah
%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp
dan jika dijalankan di bawah akun "Layanan Lokal" bawaan, maka folder temp adalah
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp
Masalah saya adalah SSMS berjalan di bawah saya akun (bukan LAYANAN JARINGAN) jadi saya hanya memiliki akses Baca ke folder Temp
Setelah saya memberi diri saya izin Ubah pada folder itu
dan mengaktifkan kueri OPENROWSET seperti yang didokumentasikan dalam pertanyaan lain di sini, yaitu ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... kueri saya berfungsi dengan baik:
Tweak #3:memory_to_reserve
Meskipun saya tidak perlu menggunakannya dalam kasus saya, blog yang disebutkan di atas juga mengklaim bahwa menyesuaikan parameter startup "-g memory_to_reserve" untuk layanan SQL Server juga dapat membantu menghindari kesalahan serupa. Untuk melakukannya:
- luncurkan Manajer Konfigurasi Server SQL
- klik kanan layanan SQL Server (tab "Layanan SQL Server") dan pilih "Properti"
- pada tab "Lanjutan", tambahkan
-g512;
ke pengaturan "Parameter Startup" - mulai ulang layanan SQL Server
Untuk detail lebih lanjut tentang pengaturan "memory_to_reserve" lihat artikel MSDN di sini.