Penyedia Microsoft OLE DB untuk Driver ODBC Kesalahan '80040e21' Operasi OLE DB multi-langkah menghasilkan kesalahan. Jika memungkinkan, periksa setiap nilai status OLE DB. Tidak ada pekerjaan yang selesai. Sebuah program situs web, terjadi kesalahan saat menambahkan berita
Berikut pesan kesalahannya:
Penyedia Microsoft OLE DB untuk kesalahan Driver ODBC '80040e21'
Operasi OLE DB multi-langkah menghasilkan kesalahan. Jika memungkinkan, periksa setiap nilai status OLE DB. Tidak ada pekerjaan yang selesai.
Alasan kesalahan ini adalah saya mengubah string koneksi akses menjadi Driver={Micorsoft Access Driver ()};dbq= & Server.Mappath(DbPath), sedangkan string koneksi asli adalah Provier=Microsoft.Jet.OLEDB .4.0; Sumber data= & Server.Mappath(DbPath), kesalahan ini tidak akan terjadi. Tampaknya ada beberapa perbedaan antara kedua cara menyambung ke database akses. Setidaknya metode koneksi terakhir lebih baik dalam hal toleransi kesalahan, tetapi jelas kurang formal dalam hal spesifikasi.
Demi kesederhanaan, saya akan menyebut kedua metode koneksi penyedia dan koneksi driver di bawah ini.
Kesalahan di atas tidak muncul saat memodifikasi berita. Saya melihat kodenya dan menemukan bahwa ketika menambahkan, kumpulan catatan yang diperoleh dengan Excute tidak ditutup. Saya mematikannya dan tidak dapat berfungsi dengan benar.
Jadi saya menulis sepotong kode dan merancang tabel sederhana. Saya menemukan bahwa dua metode koneksi dapat ditambahkan saat ini, jadi saya mengubah tabel dalam kode ini kembali ke yang asli, tetapi masih tidak dapat dijalankan. Apakah ini ada hubungannya dengan jam tangan?
Jadi saya mulai mempelajari formulir tersebut dengan cermat dan menemukan bahwa formulir aslinya memiliki kolom nomor otomatis yang diberi nilai dalam program. Saya ingat bahwa nomor otomatis tidak dapat diberi nilai. Jadi saya menghilangkan penomoran otomatis pada tabel itu, dan hasilnya bisa dijalankan dengan normal.
Tampaknya dimungkinkan untuk menetapkan nilai ke bidang penomoran otomatis dengan menghubungkan dalam mode Penyedia.
Mari kita bahas perbedaannya di tempat lain.
Ketika saya menggunakan driver untuk terhubung, nilai Null muncul selama pengaturan saluran, tetapi sebenarnya ada nilai di database. Saya melihat tipe data bidang ini dan itu adalah komentar. Apakah itu berarti dukungan pengemudi terhadap nada panjang kurang baik? Tidak, konten berita di tabel berita saya harus berupa catatan.
Apa alasannya? Apakah karena dia berada di balik catatan lain? Namun, ada juga dua catatan di tabel berita, dan catatan konten juga terletak di belakang catatan pendahuluan. Kecurigaan ini juga terhapuskan.
Apakah karena bidang ini memiliki kata kunci? Saya mengubah nilai bidang ini menjadi 1, tetapi hasilnya juga salah.
Apa alasannya?
Tulis saja tes halaman lain sendiri. Kode tesnya adalah sebagai berikut
Berikut kode pengujiannya:
Copy kode kodenya sebagai berikut:
koneksi redup
set koneksi=server.buat objek(adodb.recordset)
conn.open driver={Microsoft access driver (*.mdb)};dbq= & server.mappath(data/dd.mdb) 'metode koneksi driver
'conn.open Provider=Microsoft.Jet.OLEDB.4.0;Sumber Data= & server.mappath(data/dd.mdb) 'metode koneksi penyedia
setel rs=conn.execute(pilih * dari s_channel di mana channelID=11)
respon.Tulis rs(UploadSetting)
rs.tutup
setr=tidak ada
Jika ditemukan kedua koneksi dapat mengeluarkan output secara normal.
Jadi saya mengeluarkan (response.write) dalam kode asli tempat kumpulan catatan baru saja dibuka, dan menemukan bahwa nilai bidang dapat dikeluarkan secara normal di lokasi itu. Jadi saya terus memindahkan kode keluaran ke bawah, dan akhirnya memindahkannya ke
Berikut cuplikan kodenya:
Copy kode kodenya sebagai berikut:
jika IsNull(rs(UploadSetting)) atau rs(UploadSetting)= maka
UploadSetting=Split(1,2,3,4@Other@2@0@jpg|gif|bmp|png@100@1@swf@500@1@rm|mp3|wav|mid|avi|mpg|mpeg| asf|wma@2048@1@rar|zip|exe|doc|xls|chm@2048@1,@)
kalau tidak
UploadSetting=Pisahkan(rs(UploadSetting),@)
berakhir jika
Ketika ditempatkan di atas if, konten dapat dikeluarkan secara normal, tetapi mengapa keluaran Null ketika ditempatkan setelah yang lain?
Jadi kode tes terakhirnya adalah sebagai berikut
Berikut kode pengujiannya:
Copy kode kodenya sebagai berikut:
koneksi redup
set koneksi=server.buat objek(adodb.recordset)
conn.open driver={Microsoft access driver (*.mdb)};dbq= & server.mappath(data/dd.mdb) 'metode koneksi driver
'conn.open Provider=Microsoft.Jet.OLEDB.4.0;Sumber Data= & server.mappath(data/dd.mdb) 'metode koneksi penyedia
setel rs=conn.execute(pilih * dari s_channel di mana channelID=11)
respon.Tulis rs(UploadSetting)
jika IsNull(Rs(UploadSetting)) atau rs(UploadSetting)= maka
respon. Tulis dd
kalau tidak
respon.Tulis rs(UploadSetting)
berakhir jika
rs.tutup
setr=tidak ada
Kode di atas dapat menampilkan nilai dalam rs(uploadSetting) dengan benar saat terhubung dalam mode penyedia, tetapi tidak menghasilkan apa pun dalam mode Driver.
Bisakah kita memahami ini: dalam mode Driver, konten komentar hanya dapat direferensikan satu kali, dan akan menjadi nilai NULL ketika direferensikan lagi. Ini tidak akan terjadi pada Penyedia.
Untuk beradaptasi dengan situasi ini, kita hanya dapat melewatkan satu variabel. Biarkan isi kolom memo diberikan ke variabel terlebih dahulu, bukan dikutip secara langsung.