Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Help ACE Sửa giúp em code Delete với ?
#1
Anh chị cho em hỏi có cách nào để xóa nhiều dòng dữ liệu 1 lúc mà chỉ hiện 1 msgbox Yes - Cancel không ạ ? 

hiện tại code bên dưới khi bấm nút DELETE trên bàn phím thì xóa từng dòng 1 thì msgbox không có vấn đề gì cả .

Nhưng khi xóa từ 2 dòng trở đi thì msgbox xác nhận nó lặp đi lặp lại nhiều lần

Vậy có cách nào để giải quyết vấn đề "Chỉ 1 msgbox xác nhận là xóa dc nhiều dòng trong form ko vậy a?"


Code :
Private plngDelSelCnt As Variant

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Response = acDataErrContinue
End Sub

Private Sub Form_Delete(Cancel As Integer)
    plngDelSelCnt = Me.SelHeight
    
    If MsgBox(plngDelSelCnt & " Xoa" & vbCrLf & _
              "xac nhan xoa", vbOKCancel) = vbCancel Then
        Cancel = True
    End If
End Sub
Chữ ký của Cuong Servenet Cuong Servenet,gia nhập Thủ Thuật Access từ 12-07 -18.
ღღღღღTài sản của Cuong Servenet (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
upTrả lời
Chữ ký của Cuong Servenet Cuong Servenet,gia nhập Thủ Thuật Access từ 12-07 -18.
ღღღღღTài sản của Cuong Servenet (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(14-05-19, 03:19 PM)Cuong Servenet Đã viết: Anh chị cho em hỏi có cách nào để xóa nhiều dòng dữ liệu 1 lúc mà chỉ hiện 1 msgbox Yes - Cancel không ạ ? 

hiện tại code bên dưới khi bấm nút DELETE trên bàn phím thì xóa từng dòng 1 thì msgbox không có vấn đề gì cả .

Nhưng khi xóa từ 2 dòng trở đi thì msgbox xác nhận nó lặp đi lặp lại nhiều lần

Vậy có cách nào để giải quyết vấn đề "Chỉ 1 msgbox xác nhận là xóa dc nhiều dòng trong form ko vậy a?"


Code :
Private plngDelSelCnt As Variant

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Response = acDataErrContinue
End Subt

Private Sub Form_Delete(Cancel As Integer)
    plngDelSelCnt = Me.SelHeight
    
    If MsgBox(plngDelSelCnt & " Xoa" & vbCrLf & _
              "xac nhan xoa", vbOKCancel) = vbCancel Then
        Cancel = True
    End If
End Sub

Các bước để bạn làm như sau:
1. Bạn muốn xóa nhưng record có đặc điểm gì? Ví dụ các bản ghi có trường Hovaten có chữ bắt đầu là "Hoa"
2. Thực hiện tập lệnh SQL để xóa: docmd.RunSQL
Ví dụ: 
+ Đoạn sau sẽ xóa tất cả các bản ghi có trường [tentruong] bắt đầu bằng chữ Hoa (từ khóa Like để lọc những bản gi thỏa mãn để xóa).
DoCmd.RunSQL "Delete * from [tenbang] WHERE [tentruong] like 'Hoa*';"
+ Đoạn sau sẽ xóa tất cả các bản ghi có trường [tentruong] là chữ Hoa (Toán tử ='Hoa' để xóa các bản ghi có trường là chữ Hoa. Vì Trường này là ký tự nên bạn phải đặt trong dấu nháy kép, còn nếu là trường số bạn sẽ không cần nó.
DoCmd.RunSQL "Delete * from [tenbang] WHERE [tentruong] = 'Hoa';"
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , Noname
#4
Thực ra bạn sử dụng lệnh xóa trên một button nên chỉ xóa được một record mà thôi.
Nếu bạn đã có code BeforeDelConfirm và thiết kế form với record selectors = yes
     Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)

     Dim n_Reply, TraLoi As Integer
     Response = acDataErrContinue
     TraLoi = MsgBox("Xác nhận xóa", vbQuestion + vbYesNo, "Thông báo")
     If TraLoi = vbNo Then
     Cancel = True
     End If
     End Sub
Khi đã đưa phần thông báo vào BeforeDelConfirm, code  nút xóa (cmdDel)  đơn giản hơn
[i]     Private Sub cmdDel_Click()
[/i]

     DoCmd.RunCommand acCmdDeleteRecord

    [i]End Sub[/i]


Lúc này, chỉ cần bạn quét các dòng record liện tục và bấm delete nó cũng chỉ hiện thông báo một lần, nếu bạn yes nó sẽ xóa tất tần tật những record mà bạn đã chọn, nên nhớ, nó chỉ xóa hết khi bạn dùng nút delete trên bàn phím còn nếu bạn sử dụng button xóa trên form nó cũng chỉ xóa 1 record đầu tiên trên nhóm record mà bạn chọ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
#5
Thực ra bạn sử dụng lệnh xóa trên button trên form nên chỉ xóa được một record mà thôi.
Nếu bạn đã có code BeforeDelConfirm và thiết kế form với record selectors = yes
     Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)

     Dim  TraLoi As Integer
     Response = acDataErrContinue
     TraLoi = MsgBox("Xác nhận xóa", vbQuestion + vbYesNo, "Thông báo")
     If TraLoi = vbNo Then
     Cancel = True
     End If
     End Sub
Khi đã đưa phần thông báo vào BeforeDelConfirm, code  nút xóa (cmdDel)  đơn giản hơn
[i]     Private Sub cmdDel_Click()
[/i]

     DoCmd.RunCommand acCmdDeleteRecord

    [i]End Sub[/i]


Lúc này, chỉ cần bạn quét các dòng record liện tục và bấm delete nó cũng chỉ hiện thông báo một lần, nếu bạn yes nó sẽ xóa tất tần tật những record mà bạn đã chọn, nên nhớ, nó chỉ xóa hết khi bạn dùng nút delete trên bàn phím còn nếu bạn sử dụng button xóa trên form nó cũng chỉ xóa 1 record đầu tiên trên nhóm record mà bạn chọ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
#6
(15-05-19, 05:07 PM)tranthanhan1962 Đã viết: Thực ra bạn sử dụng lệnh xóa trên button trên form nên chỉ xóa được một record mà thôi.
Nếu bạn đã có code BeforeDelConfirm và thiết kế form với record selectors = yes
     Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)

     Dim  TraLoi As Integer
     Response = acDataErrContinue
     TraLoi = MsgBox("Xác nhận xóa", vbQuestion + vbYesNo, "Thông báo")
     If TraLoi = vbNo Then
     Cancel = True
     End If
     End Sub
Khi đã đưa phần thông báo vào BeforeDelConfirm, code  nút xóa (cmdDel)  đơn giản hơn
[i]     Private Sub cmdDel_Click()
[/i]

     DoCmd.RunCommand acCmdDeleteRecord

    [i]End Sub[/i]


Lúc này, chỉ cần bạn quét các dòng record liện tục và bấm delete nó cũng chỉ hiện thông báo một lần, nếu bạn yes nó sẽ xóa tất tần tật những record mà bạn đã chọn, nên nhớ, nó chỉ xóa hết khi bạn dùng nút delete trên bàn phím còn nếu bạn sử dụng button xóa trên form nó cũng chỉ xóa 1 record đầu tiên trên nhóm record mà bạn chọn


cam on anh nhe.
cái form của em thì ko thiết kế nút xóa mà thay vào đó dùng nút Delete trên keyboard ạ

khi dùng cách đó thì mình chọn 1 dòng xóa thì ko vấn đề gì cả nhưng khi chọn nhiều dòng dữ liệu xóa thì nó hiện thông báo tin yes-no nhiều lần .
Chữ ký của Cuong Servenet Cuong Servenet,gia nhập Thủ Thuật Access từ 12-07 -18.
ღღღღღTài sản của Cuong Servenet (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#7
(16-05-19, 08:30 AM)Cuong Servenet Đã viết: cái form của em thì ko thiết kế nút xóa mà thay vào đó dùng nút Delete trên keyboard ạ
khi dùng cách đó thì mình chọn 1 dòng xóa thì ko vấn đề gì cả nhưng khi chọn nhiều dòng dữ liệu xóa thì nó hiện thông báo tin yes-no nhiều lần .
Khi bạn đưa code gọi msgbox vào thủ tục (procedure) Form_Delete và sử dụng phím delete xóa một nhóm record, access sẽ thực hiện bấy nhiêu thủ tục xóa lần lượt từng record một, vì trong thủ tục Form_Delete có chứa dòng lệnh gọi msgbox nên mỗi lần xóa một record thì nó sẽ thực hiện lệnh gọi msgbox một lần, nên xóa bao nhiêu record nó sẽ hiện lên bấy nhiêu msgbox, còn khi bạn đưa công việc gọi msgbox cho BeforeDelConfirm (xác nhận trước khi xóa) thì sau khi xác nhận một lần cho việc xóa các record được chọn đó thì công việc của lệnh Form_Delete chỉ còn là việc xóa hoặc không xóa các record đó, vì trong thủ tục này không có lệnh gọi msgbox.
* Thứ tự các thủ tục khi xóa record
BeforeDelConfirm: Thủ tục trước khi xóa, nhằm xử lý một công việc trước khi record: hỏi xóa hay không? lưu các record bị xóa sang table khác....
Form_Delete(Cancel As Integer): thủ tục khi xóa, một công việc cùng lúc với việc xóa record
Form_AfterDelConfirm(Status As Integer): thủ tục thực hiện sau khi xóa. requery một đối tượng nào đó, di chuyển trỏ chuột đến vị trí nào đó sau khi xóa...
* Khi dùng phím delete mà không cần gọi lệnh gì thêm thì không cần sử dụng thủ tục Form_Delete vì nó cùng bản chất.
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


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Giúp tạo CSDL quyethoa22 1 739 03-01-18, 12:31 PM
Bài mới nhất: ongke0711
  [Help] Giúp em về tạo CSDL cho Access kiepgiangho79 13 3,188 21-09-17, 09:11 AM
Bài mới nhất: tranthanhan1962
  Giúp tôi về các phép tính table trong Access ! tomahoc89 14 15,846 04-07-17, 12:28 PM
Bài mới nhất: tranthanhan1962
  [Hỏi] cần tư vấn code tính thời gian quá hạn khonggianviet 1 1,183 02-07-17, 03:29 AM
Bài mới nhất: ongke0711
  [Help] Nhờ AE chỉ giúp phần import ODBC database với ạ Mr H 1 1,200 01-12-16, 05:19 PM
Bài mới nhất: maidinhdan

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| Phần mềm quản lý bán hàng, công nợ- tồn kho- nhà phân phối