de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Knox
Knox
Question

Operasi harus menggunakan kueri yang dapat diperbarui. (Kesalahan 3073) Microsoft Access

Pada beberapa query Microsoft Access, saya mendapatkan pesan berikut: Operasi harus menggunakan kueri yang dapat diperbarui. (Kesalahan 3073). Saya menyiasatinya dengan menggunakan tabel sementara, tetapi saya bertanya-tanya apakah ada cara yang lebih baik. Semua tabel yang terlibat memiliki kunci utama. Ini kodenya:

UPDATE CLOG SET CLOG.NEXTDUE = (
    SELECT H1.paidthru 
    FROM CTRHIST as H1
    WHERE H1.ACCT = clog.ACCT AND
    H1.SEQNO = (
        SELECT MAX(SEQNO) 
        FROM CTRHIST 
        WHERE CTRHIST.ACCT = Clog.ACCT AND 
        CTRHIST.AMTPAID > 0 AND
        CTRHIST.DATEPAID < CLOG.UPDATED_ON
    )
)
WHERE CLOG.NEXTDUE IS NULL;
21 2008-10-04T16:08:05+00:00 3
 Sklivvz
Sklivvz
Pertanyaan edit 4 Oktober 2008 в 9:46
Pemrograman
ms-access
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Solution / Answer
 David-W-Fenton
David-W-Fenton
4 Oktober 2008 в 9:12
2008-10-04T21:12:12+00:00
Lebih
Sumber
Sunting
#8538527

Sejak Jet 4, semua kueri yang memiliki gabungan ke pernyataan SQL yang merangkum data tidak akan dapat di-update. Anda tidak menggunakan JOIN, tetapi klausa WHERE persis sama dengan join, dan dengan demikian, pengoptimal kueri Jet memperlakukannya dengan cara yang sama seperti memperlakukan join.

Saya khawatir Anda tidak beruntung tanpa tabel temp, meskipun mungkin seseorang dengan pengetahuan Jet SQL yang lebih baik daripada saya dapat menemukan solusi.

BTW, mungkin saja tabel tersebut dapat diupdate di Jet 3.5 (Access 97), karena banyak sekali query yang dapat diupdate yang kemudian menjadi tidak dapat diupdate ketika diupgrade ke Jet 4.

--

Anirudh Ramanathan
Anirudh Ramanathan
Jawaban edit 24 Oktober 2012 в 1:53
23
0
Glenn M
Glenn M
7 Oktober 2008 в 9:02
2008-10-07T21:02:25+00:00
Lebih
Sumber
Sunting
#8538529

Masalahnya jelas berhubungan dengan penggunaan (dalam hal ini) fungsi max(). Fungsi agregasi apa pun yang digunakan selama penggabungan (misalnya untuk mengambil nilai max atau min atau avg dari tabel yang digabungkan) akan menyebabkan kesalahan. Dan hal yang sama berlaku untuk menggunakan subkueri sebagai pengganti gabungan (seperti dalam kode asli).

Ini sangat menjengkelkan (dan tidak dapat dibenarkan!) karena ini adalah hal yang cukup umum untuk dilakukan. Saya juga harus menggunakan tabel temp untuk mengatasinya (tarik nilai agregat ke dalam tabel temp dengan pernyataan sisipan, lalu gabung ke tabel ini dengan pembaruan Anda, lalu hapus tabel temp).

Glenn

4
0
 onedaywhen
onedaywhen
6 Oktober 2008 в 7:49
2008-10-06T07:49:42+00:00
Lebih
Sumber
Sunting
#8538528

Intinya, meskipun SQL Anda terlihat sangat masuk akal, Jet tidak pernah mendukung sintaks standar SQL untuk UPDATE. Sebaliknya, Jet menggunakan sintaksis miliknya sendiri (berbeda lagi dari sintaksis UPDATE milik SQL Server) yang sangat terbatas. Seringkali, satu-satunya solusi " Operasi harus menggunakan kueri yang dapat diperbarui &" sangat menyakitkan. Pertimbangkan dengan serius untuk beralih ke produk SQL yang lebih mumpuni.

Untuk beberapa detail lebih lanjut tentang masalah spesifik Anda dan beberapa kemungkinan solusi, lihat Update Query Based on Totals Query Fails.

 onedaywhen
onedaywhen
Jawaban edit 7 September 2011 в 1:12
0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi