Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] AddNew và Edit dữ liệu trên UnboundForm Access
#1
Chào mọi người!
Nhờ mọi người hướng dẫn lại cách thao tác trên Unbound Form của Access được không ạ.
Cụ thể là tôi có làm 1 UnboundForm (F_Hàng Hóa) với các textbox là MaHH (khóa chính), TenHH, QuiCach, DVT.
Tôi có vẽ 1 Listbox, để khi bấm vào Listbox này, các thông tin về hàng hóa sẽ hiện lên trên các textbox tương ứng.
Tôi cũng vẽ các nút lệnh: "Xóa, Sửa, Ghi, Thêm, Không" để phục vụ cho việc nhập liệu. Đặc biệt nút Ghi dùng chung cho cả trường hợp Thêm mới và Sửa chữa.
Tôi nhận ra rằng, nút Sửa không thi hành được vì vướng báo lỗi khóa chính, cụ thể là ở dòng Update.
- Nếu "Thêm" là:
rs.Addnew
...
rs.Update
- Thì "Sửa" sẽ là:
rs.Edit
...
rs.Update  ' Và nó bị lỗi ở đây

Một lần nữa, tôi đã làm phiền đến các anh/chị trên diễn đàn.
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#2
Phải có CSDL cụ thể mới biết được lỗi của nó
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(31-12-17, 10:01 AM)tranthanhan1962 Đã viết: Phải có CSDL cụ thể mới biết được lỗi của nó

Đây là file của e ạ! Nhờ a xem qua: http://www.mediafire.com/file/eixlt44c3r...angHoa.mdb

Nút "Ghi" là nút dùng chung. E muốn là "Ghi" sẽ phân biệt đâu là "Thêm mới" và đâu là "Sửa chữa". Để khi "thêm mới", thì nút "Ghi" có tác dụng lưu lại những thông tin mới nhất, không trùng khóa chính; và khi "sửa chữa", thì "Ghi" có tác dụng lưu lại những thông tin mình hiệu chỉnh (và cũng không trùng khóa chính). (vụ bẫy lỗi trùng khóa chính thì e biết làm rồi, nên e không diễn giải trong này).

E cám ơn!
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#4
(31-12-17, 12:58 AM)pherotao Đã viết: Chào mọi người!
Nhờ mọi người hướng dẫn lại cách thao tác trên Unbound Form của Access được không ạ.
Cụ thể là tôi có làm 1 UnboundForm (F_Hàng Hóa) với các textbox là MaHH (khóa chính), TenHH, QuiCach, DVT.
Tôi có vẽ 1 Listbox, để khi bấm vào Listbox này, các thông tin về hàng hóa sẽ hiện lên trên các textbox tương ứng.
Tôi cũng vẽ các nút lệnh: "Xóa, Sửa, Ghi, Thêm, Không" để phục vụ cho việc nhập liệu. Đặc biệt nút Ghi dùng chung cho cả trường hợp Thêm mới và Sửa chữa.
Tôi nhận ra rằng, nút Sửa không thi hành được vì vướng báo lỗi khóa chính, cụ thể là ở dòng Update.
- Nếu "Thêm" là:
rs.Addnew
...
rs.Update
- Thì "Sửa" sẽ là:
rs.Edit
...
rs.Update  ' Và nó bị lỗi ở đây

Một lần nữa, tôi đã làm phiền đến các anh/chị trên diễn đàn.

Trường hợp này của bạn cũng đơn giản thôi.
- Tạo 1 cái biến tạm. Ví dụ:  Public strEdiAddStatus As String
- Khi bấm nút [Sửa] thì gán biến strEditAddStatus = "Sua". Khi bấm nút [Them] thì gán biến strEditAddStatus = "Them"
- Khi đó code cho nút [Ghi] sẽ dùng Select Case strEditAddStatus
Vd: 
     Select Case strEditAddStatus
            Case "Sua"
                  rs.Edit
            Case "Them"
                  rs.AddNew
     End Select

Một góp ý là rất hạn chế sử dụng "On Error Resume Next" nếu bạn chưa bẫy được lỗi lập trình. Như code của bạn đang dùng, nó sẽ bỏ qua lỗi để xử lý tiếp mà bạn không biết cái lỗi đó nghiêm trọng cỡ nào.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao
#5
(02-01-18, 04:21 PM)ongke0711 Đã viết:
(31-12-17, 12:58 AM)pherotao Đã viết: Chào mọi người!
Nhờ mọi người hướng dẫn lại cách thao tác trên Unbound Form của Access được không ạ.
Cụ thể là tôi có làm 1 UnboundForm (F_Hàng Hóa) với các textbox là MaHH (khóa chính), TenHH, QuiCach, DVT.
Tôi có vẽ 1 Listbox, để khi bấm vào Listbox này, các thông tin về hàng hóa sẽ hiện lên trên các textbox tương ứng.
Tôi cũng vẽ các nút lệnh: "Xóa, Sửa, Ghi, Thêm, Không" để phục vụ cho việc nhập liệu. Đặc biệt nút Ghi dùng chung cho cả trường hợp Thêm mới và Sửa chữa.
Tôi nhận ra rằng, nút Sửa không thi hành được vì vướng báo lỗi khóa chính, cụ thể là ở dòng Update.
- Nếu "Thêm" là:
rs.Addnew
...
rs.Update
- Thì "Sửa" sẽ là:
rs.Edit
...
rs.Update  ' Và nó bị lỗi ở đây

Một lần nữa, tôi đã làm phiền đến các anh/chị trên diễn đàn.

Trường hợp này của bạn cũng đơn giản thôi.
- Tạo 1 cái biến tạm. Ví dụ:  Public strEdiAddStatus As String
- Khi bấm nút [Sửa] thì gán biến strEditAddStatus = "Sua". Khi bấm nút [Them] thì gán biến strEditAddStatus = "Them"
- Khi đó code cho nút [Ghi] sẽ dùng Select Case strEditAddStatus
Vd: 
     Select Case strEditAddStatus
            Case "Sua"
                  rs.Edit
            Case "Them"
                  rs.AddNew
     End Select

Một góp ý là rất hạn chế sử dụng "On Error Resume Next" nếu bạn chưa bẫy được lỗi lập trình. Như code của bạn đang dùng, nó sẽ bỏ qua lỗi để xử lý tiếp mà bạn không biết cái lỗi đó nghiêm trọng cỡ nào.

Nó bị lỗi 3020 a ơi!
Mã:
Private Sub Ghi_Click()
'On Error Resume Next

Dim DB As Database
Dim rs As Recordset

Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT * FROM T_HangHoa")

   Select Case strEditAddStatus
           Case "Sua"
                 rs.Edit
           Case "Them"
                 rs.AddNew
    End Select
       
       rs("MaHH") = Me.txtMaHH.Value
       rs("TenHH") = Me.txtTenHH.Value
       rs("QuiCach") = Me.txtQuiCach.Value
       rs("DVT") = Me.txtDVT.Value
       
   rs.Update
       
   
       Me.txtMaHH = Null
       Me.txtTenHH = Null
       Me.txtQuiCach = Null
       Me.txtDVT = Null
       
       Me.txtMaHH.Locked = True
       Me.txtTenHH.Locked = True
       Me.txtQuiCach.Locked = True
       Me.txtDVT.Locked = True
       
       Me.txtMaHH.SetFocus
   
   rs.Close
   Me.List.Requery
   
   Ghi.Visible = False
   Khong.Visible = False
   
   Xoa.Visible = True
   Sua.Visible = True
   Them.Visible = True
         
End Sub
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#6
- Theo như code của bạn, thì khi vào chế độ [Sửa] thì rs có biết record nào để sửa không? -> Không. Code Edit bạn cũng chọn nguyên cái rs = DB.OpenRecordset("SELECT * FROM T_HangHoa")   và  vô rs.Edit -> chương trình biết sửa cái record nào? Nó chọn đại cái record đầu tiên rồi Edit -> dẫn đến trùng MaHH.
- Sửa lại: Bạn nên dùng thư viện DAO. Nó mạnh vậy mà bạn không ngâm cứu sử dụng.
Mã PHP:
Private Sub Ghi_Click()

   Dim DB As DAO.Database
   Dim rs 
As DAO.Recordset

   Set DB 
CurrentDb
   Set rs 
DB.OpenRecordset("SELECT * FROM T_HangHoa")

   Select Case strEditAddStatus
   Case 
"Sua"
       rs.FindFirst "[MaHH] = '" Me.txtMaHH.Value "'"
       If Not rs.NoMatch Then
           rs
.Edit
           rs
("TenHH") = Me.txtTenHH.Value
           rs
("QuiCach") = Me.txtQuiCach.Value
           rs
("DVT") = Me.txtDVT.Value
       End 
If
   Case "Them"
       rs.AddNew
       rs
("MaHH") = Me.txtMaHH.Value
       rs
("TenHH") = Me.txtTenHH.Value
       rs
("QuiCach") = Me.txtQuiCach.Value
       rs
("DVT") = Me.txtDVT.Value
   End Select

   rs
.Update

   Me
.txtMaHH Null
   Me
.txtTenHH Null
   Me
.txtQuiCach Null
   Me
.txtDVT Null

   Me
.txtMaHH.Locked True
   Me
.txtTenHH.Locked True
   Me
.txtQuiCach.Locked True
   Me
.txtDVT.Locked True

   Me
.txtMaHH.SetFocus

   rs
.Close
   Me
.List.Requery

   Ghi
.Visible False
   Khong
.Visible False

   Xoa
.Visible True
   Sua
.Visible True
   Them
.Visible True

End Sub 

- Ở chế độ rs.Edit, bạn không thể sửa field chứa Primary Key [MaHH] vì nó liên quan đến các table khác. Nếu muốn sửa Primary Key thì xóa record đó luôn rồi tạo lại.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn pherotao , advnamk
#7
(02-01-18, 10:59 PM)ongke0711 Đã viết: - Theo như code của bạn, thì khi vào chế độ [Sửa] thì rs có biết record nào để sửa không? -> Không. Code Edit bạn cũng chọn nguyên cái rs = DB.OpenRecordset("SELECT * FROM T_HangHoa")   và  vô rs.Edit -> chương trình biết sửa cái record nào? Nó chọn đại cái record đầu tiên rồi Edit -> dẫn đến trùng MaHH.
- Sửa lại: Bạn nên dùng thư viện DAO. Nó mạnh vậy mà bạn không ngâm cứu sử dụng.
Mã PHP:
Private Sub Ghi_Click()

   Dim DB As DAO.Database
   Dim rs 
As DAO.Recordset

   Set DB 
CurrentDb
   Set rs 
DB.OpenRecordset("SELECT * FROM T_HangHoa")

   Select Case strEditAddStatus
   Case 
"Sua"
       rs.FindFirst "[MaHH] = '" Me.txtMaHH.Value "'"
       If Not rs.NoMatch Then
           rs
.Edit
           rs
("TenHH") = Me.txtTenHH.Value
           rs
("QuiCach") = Me.txtQuiCach.Value
           rs
("DVT") = Me.txtDVT.Value
       End 
If
   Case "Them"
       rs.AddNew
       rs
("MaHH") = Me.txtMaHH.Value
       rs
("TenHH") = Me.txtTenHH.Value
       rs
("QuiCach") = Me.txtQuiCach.Value
       rs
("DVT") = Me.txtDVT.Value
   End Select

   rs
.Update

   Me
.txtMaHH Null
   Me
.txtTenHH Null
   Me
.txtQuiCach Null
   Me
.txtDVT Null

   Me
.txtMaHH.Locked True
   Me
.txtTenHH.Locked True
   Me
.txtQuiCach.Locked True
   Me
.txtDVT.Locked True

   Me
.txtMaHH.SetFocus

   rs
.Close
   Me
.List.Requery

   Ghi
.Visible False
   Khong
.Visible False

   Xoa
.Visible True
   Sua
.Visible True
   Them
.Visible True

End Sub 

- Ở chế độ rs.Edit, bạn không thể sửa field chứa Primary Key [MaHH] vì nó liên quan đến các table khác. Nếu muốn sửa Primary Key thì xóa record đó luôn rồi tạo lại.

nó lại lỗi 3020, cụ thể là ngay dòng rs.update a ơi  040 040 040 040
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#8
Cái biến strEditAddStatus bạn khai báo ở đâu?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
(02-01-18, 11:53 PM)ongke0711 Đã viết: Cái biến strEditAddStatus bạn khai báo ở đâu?

Nhờ a hướng dẫn cho trót luôn ạ. E cám ơn nhiều lắm!
Chữ ký của pherotao "Hạnh phúc ở đâu... biết tìm đâu,
Hồng trần là thế giới muôn màu,
Hội đủ nhân duyên... thời sinh quả,
Kết thúc... cũng là lúc bắt đầu".
Reply
Những người đã cảm ơn
#10
[Hình: 24586782577_1087bdcdbf.jpg]
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Hướng Dẫn Hàm kiểm tra dữ liệu để import dữ liệu từ excel vào access subasatran 14 748 16-11-18, 01:36 AM
Bài mới nhất: maidinhdan
  [Thủ Thuật] Demo Tổng hợp tất cả các kiểu thông báo tiếng việt trong Access maidinhdan 39 8,488 22-09-18, 12:40 PM
Bài mới nhất: NguyenDungAnh
  [Hỏi] Điền kết quả của 1 query từ Access sang Excel killitmore 0 217 21-08-18, 12:33 PM
Bài mới nhất: killitmore
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 62 34,528 03-08-18, 12:41 PM
Bài mới nhất: Cuong Servenet
  Gửi tin nhắn SMS bằng Access lmthu 9 2,046 23-07-18, 07:09 PM
Bài mới nhất: tt1212

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line