Gejala Ketika Anda menggunakan Objek Data ActiveX (ADO) dengan Active Server Pages (ASP), Anda mungkin mengalami kesalahan umum berikut ini:
Penyedia Microsoft OLE DB untuk kesalahan Driver ODBC '80004005'
[Microsoft] [ODBC Microsoft Access 97 Driver] Pengoperasian harus menggunakan kueri yang dapat diperbarui.
Penyebab Artikel ini menjelaskan empat penyebab utama kesalahan ini dan solusi terkait. Meskipun artikel ini membahas database Microsoft Access, informasi yang diberikan di sini juga berlaku untuk jenis database lainnya.
Solusi Anda biasanya mengalami kesalahan ini ketika skrip Anda mencoba melakukan pembaruan atau melakukan tindakan lain yang mengubah informasi dalam database. Kesalahan ini terjadi karena ADO tidak dapat menulis ke database karena salah satu alasan berikut:
1. Alasan paling umum adalah akun tamu Internet (IUSR_MACHINE, yang secara default termasuk dalam grup "Semua Orang") tidak memiliki akses ke file database (.mdb) Izin menulis. Untuk mengatasi masalah ini, gunakan tab Keamanan di Explorer untuk menyesuaikan properti file ini sehingga akun Tamu Internet memiliki izin yang benar.
Catatan: Saat menggunakan database Microsoft Access dengan ADO, Anda juga harus memberikan izin menulis akun Tamu Internet ke direktori yang berisi file .mdb. Hal ini karena Jet membuat file .ldb yang menangani penguncian database. Karena Jet mungkin membuat file sementara di direktori "Temp", Anda mungkin juga perlu memberikan izin baca/tulis ke folder tersebut.
2. Alasan kedua untuk kesalahan ini adalah database tidak dibuka dalam mode yang benar dengan izin menulis. Jika Anda melakukan operasi Buka pada objek Koneksi, Anda harus menggunakan properti Mode untuk menunjukkan izin yang Anda miliki pada koneksi, sebagai berikut:
SQL = "UPDATE Produk Set Harga Satuan = 2;"
Setel Koneksi = Server.CreateObject("ADODB.Connection")
Mode Sambungan = 3 '3 = adModeReadWrite
Sambung.Buka "myDSN"
Sambungan.Eksekusi(SQL)
Sambungan Tutup
Catatan: Secara default, MODE diatur ke 0 (adModeUnknown), yang biasanya mengizinkan pembaruan.
3. Alasan lain untuk kesalahan ini adalah di Administrator ODBC, pengaturan "Hanya Baca" di halaman "Opsi" DSN mungkin dipilih.
4. Masalah terakhir dan solusinya berlaku untuk semua sumber data SQL. Pernyataan SQL yang melanggar integritas referensial database dapat menyebabkan terjadinya kesalahan ini. Berikut ini beberapa kueri gagal yang paling umum:
• Kumpulan kueri paling sederhana adalah kueri yang tidak dapat Anda ubah: kueri tab silang, kueri pass-through SQL, kueri gabungan, atau kueri operasi pembaruan (yaitu, buat tabel) yang memiliki properti UniqueValue yang disetel ke Ya.
• Alasan lain yang sangat umum adalah bahwa gabungan tersebut berisi indeks pada tabel ODBC tertaut yang tidak unik. Dalam hal ini, SQL tidak dapat menjamin bahwa catatan dalam tabel adalah unik dan nilai bidang dalam tabel akan berubah seiring dengan kueri.
• Ada alasannya mengapa memang ada alternatif yang dapat diandalkan. Jika Anda mencoba memperbarui bidang gabungan di sisi "satu" dari kueri "satu-ke-banyak", operasi akan gagal kecuali Anda mengaktifkan pembaruan berjenjang. Karena dengan begitu Anda dapat mendelegasikan integritas referensial ke mesin JET.