10/10/2018, 00:15
Tại sao không thêm record mới được?
Tôi có đoạn code đơn giản sau dùng cập nhật vào csdl MS-Access 2003:
<%
dim sSQL
nickname = Request.Form("nickname")
desc = Request.Form("description")
url = Request.Form("url")
fullname = Request.Form("fullname")
email = Request.Form("email")
'Open Connection with the database...
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db.mdb"))
sSQL = "insert into Webinfo (nickname,description,url,fullname,email) values "
sSQL = sSQL & "('" & nickname & "','" & desc & "','" & url & "','" & fullname & "','" & email & "')"
oConn.Execute(sSQL)
oConn.Close
set oConn = Nothing
%>
Khi chạy script thì báo lỗi:
Microsoft JET Database Engine (0x80004005)
Operation must use an updateable query.
Xin hỏi đây là lỗi gì? mà không thể cập nhật được. Bạn nào có bị trường hợp giống tôi không. Xin chỉ dùm chổ sai, cám ơn nhiều.
<%
dim sSQL
nickname = Request.Form("nickname")
desc = Request.Form("description")
url = Request.Form("url")
fullname = Request.Form("fullname")
email = Request.Form("email")
'Open Connection with the database...
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db.mdb"))
sSQL = "insert into Webinfo (nickname,description,url,fullname,email) values "
sSQL = sSQL & "('" & nickname & "','" & desc & "','" & url & "','" & fullname & "','" & email & "')"
oConn.Execute(sSQL)
oConn.Close
set oConn = Nothing
%>
Khi chạy script thì báo lỗi:
Microsoft JET Database Engine (0x80004005)
Operation must use an updateable query.
Xin hỏi đây là lỗi gì? mà không thể cập nhật được. Bạn nào có bị trường hợp giống tôi không. Xin chỉ dùm chổ sai, cám ơn nhiều.
Bài liên quan
Theo tớ thì kiểu mở database của bạn chưa hợp lý, thử viết thế này xem :
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Mode = 3
oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db.mdb"))
Tớ nghĩ vậy nhưng không chắc lắm đâu
Microsoft JET Database Engine (0x80004005)
Operation must use an updateable query.
Tôi cũng thử dùng cách cập nhật bằng recordset, nhưng cũng không cập nhật được. Không rõ lý do.
Có bạn nào có ý tưởng khác không? Xin chỉ giúp.
Lỗi đấy là do bạn không set quyền ghi trên database
Bạn hãy click chuột phải vào thư mục web của bạn chọn Properties/Web Sharing/Share this folder. Một hộp thoại xuất hiện bạn đánh dấu vào tất cả các mục trong phần Access Permission thế là xong
Cách này là cách share thư mục web không nằm trong Inetput. Nếu thư mục web của bạn đã ở trong Inetput thì click chuột phải vào database và set quyền ghi là được
Chúc thành công
<%
dim sSQL
nickname = Request.Form("nickname")
desc = Request.Form("description")
url = Request.Form("url")
fullname = Request.Form("fullname")
email = Request.Form("email")
'Open Connection with the database...
Set oConn = Server.CreateObject("ADODB.Connection")
'Open recordset
set oRS = server.CreateObject("ADODB.Recordset")
oRS.LockType = 3
oRS.CursorType = 2
oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db.mdb"))
sSQL="Select * from webinfo"
oRS.open sSQL,oConn
oRS.addnew
ors("nickname")=nickname
ors("descriptions")=desc
ors("url")=url
ors("email")=email
ors.update
ors.close
oConn.Close
set oConn = Nothing
%>
Kết quả nó vẫn không cập nhật được và thông báo lỗi:
Microsoft JET Database Engine (0x80040E09)
Cannot update. Database or object is read-only.
Xin cho biết lý do tại sao? Ai biết xin chỉ giùm.
Theo ý tôi thì khi mở trực tiếp file db.mdb thì xuất hiện thông báo sau:
This file may not be safe ì it contains code that was intended to harm your computer.
Đây có lẽ là nguyên nhân gây ra lỗi trên.
1) Cái File DB của bạn có thể đang để ở chế độ ReadOnly
2) Bạn vừa mở Access vừa chạy đoạn mã trên
3) Mấy lần chạy test trước, bạn quên đóng Connection (oConn.Close), nên hiện tại nó vẫn còn 1 file db.dbl ở dạng ẩn (hình như thế, tôi ko nhớ đuôi của nó là gì)
Cách khắc phục
Bạn thử tắt access của bạn, copy cái File DB của bạn ra một chỗ khác (Copy chứ ko phải đổi tên hay move nhé), Sửa lại kết nối và chạy đoạn mã đó xem thế nào
- Vào xem thuộc tính properties của file db.mdb, nó không có bật chế độ Read-only gì cả.
- Thư mục chứa file db.mdb nằm trong thư mục con của \Inetpub\wwwroot
- Click chuột phải trên thư mục wwwroot,chọn properties, chọn tab web share. Chọn option share thí folder. Sau đó tôi check vào các quyền access permission là read, write luôn.
Cuối cùng kết quả vẫn không cập nhật được. Và thông báo mã lỗi là:
HTTP 500.100 - Internal Server Error - ASP error
Internet Information Services
Microsoft JET Database Engine (0x80040E09)
Cannot update. Database or object is read-only.
Bạn nào có ý kiến khác không? xin chỉ giúp.
[=========> Bổ sung bài viết <=========]
Mừng quá, tôi đã tìm ra nguyên nhân rồi nè!!!
Các bạn nào giống trường hợp tôi thì tham khảo đây.
Do chưa có quyền truy xuất vào datbase.
Cách xử lý cấp quyền truy xuất datbase của tôi như sau:
- Máy tôi cài IIS trên hện điều hành Windows XP SP2.
- Click chuột phải trên folder chứa csdl. Chọn properties, chọn tab Web share.
- Check vào option share thí folder.
- Sau đó chọn nút Edit Properties, bạn check vào hai ô Read/Write trong khung Access Pẻmission. Xong OK.
Kết quả chạy script thành công.