Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Tạo button "Chọn tất cả" trong form tìm kiếm
#1
Photo 
Chào mọi người. Mong mọi người giúp đỡ. Chả là mình đang làm phần mềm cho phòng và có chút vướng mắc. Trong form tìm kiếm của mình, sau khi đã lọc ra kết quả tìm kiếm, ví dụ như tìm chữ "bằng" chẳng  hạn thì chương trình cho ra 10 record có chữ "bằng" trong đó và mình muốn tạo một command button "Chọn tất cả" để khi ấn vào button đó thì các ô checkbox của 10 record sẽ được tự động tích vào, đỡ phải mất công tick vào từng ô checkbox sẽ lâu và không hiệu quả. MOng mọi người giúp đỡ. Thanks all
[Hình: Untitled-1copy.jpg]
Chữ ký của nam8384 nam8384,gia nhập Thủ Thuật Access từ 17-03 -16.
Reply
Những người đã cảm ơn
#2
Không có file mẫu database của bạn nên không biết form tìm kiếm của bạn là lọc = câu lệnh SQL và thay thế Record source của form bằng câu lệnh SQL hay cách khác. 
Tôi cũng chỉ gợi ý code như sau: (áp dụng cho form có Record source = câu lệnh SQL).
- Tạo 1 check box "Chọn tất cả" có name là: chkChonTatCa
- Giả sử cái table bạn lọc ra kết quả có 1 trường là [Chọn] - kiểu True/False như trên form của bạn.
- Code như sau:

Mã PHP:
Private Sub chkChonTatCa_Click()
   Dim rs As DAO.Recordset
   Set rs 
Me.Tên subform.Form.RecordsetClone
   If rs
.RecordCount 0 Then
       rs
.MoveFirst
   End 
If
   Do While Not rs.EOF
       rs
.Edit
       If rs
![Chon] = True Then
           rs
![Chon] = False
       Else
           rs
![Chon] = True
       End 
If
   rs.Update
   rs
.MoveNext
   Loop

   rs
.Close
   Set rs 
Nothing
End Sub 

- Nếu dùng command button thì code cũng như trên và bạn thêm dòng code để đổi tên của nút lệnh khi click. (tên của nút lệnh trong mã VBA không sử dụng tiếng Việt có dấu được nhé).
Vd: 
...
If rs![Chon] = True Then
           rs![Chon] = False
           Me.cmdSelectAll.Caption = "Deselect all"
       Else
           rs![Chon] = True
           Me.cmdSelectAll.Caption = "Select all"
       End If
...
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 maidinhdan
#3
(18-03-16, 12:31 AM)ongke0711 Đã viết: Không có file mẫu database của bạn nên không biết form tìm kiếm của bạn là lọc = câu lệnh SQL và thay thế Record source của form bằng câu lệnh SQL hay cách khác. 
Tôi cũng chỉ gợi ý code như sau: (áp dụng cho form có Record source = câu lệnh SQL).
- Tạo 1 check box "Chọn tất cả" có name là: chkChonTatCa
- Giả sử cái table bạn lọc ra kết quả có 1 trường là [Chọn] - kiểu True/False như trên form của bạn.
- Code như sau:

Mã PHP:
Private Sub chkChonTatCa_Click()
   Dim rs As DAO.Recordset
   Set rs 
Me.Tên subform.Form.RecordsetClone
   If rs
.RecordCount 0 Then
       rs
.MoveFirst
   End 
If
   Do While Not rs.EOF
       rs
.Edit
       If rs
![Chon] = True Then
           rs
![Chon] = False
       Else
           rs
![Chon] = True
       End 
If
   rs.Update
   rs
.MoveNext
   Loop

   rs
.Close
   Set rs 
Nothing
End Sub 

- Nếu dùng command button thì code cũng như trên và bạn thêm dòng code để đổi tên của nút lệnh khi click. (tên của nút lệnh trong mã VBA không sử dụng tiếng Việt có dấu được nhé).
Vd: 
...
If rs![Chon] = True Then
           rs![Chon] = False
           Me.cmdSelectAll.Caption = "Deselect all"
       Else
           rs![Chon] = True
           Me.cmdSelectAll.Caption = "Select all"
       End If
...

Thanks bạn mình sẽ thử xem
Chữ ký của nam8384 nam8384,gia nhập Thủ Thuật Access từ 17-03 -16.
Reply
Những người đã cảm ơn
#4
(18-03-16, 12:31 AM)ongke0711 Đã viết: Không có file mẫu database của bạn nên không biết form tìm kiếm của bạn là lọc = câu lệnh SQL và thay thế Record source của form bằng câu lệnh SQL hay cách khác. 
Tôi cũng chỉ gợi ý code như sau: (áp dụng cho form có Record source = câu lệnh SQL).
- Tạo 1 check box "Chọn tất cả" có name là: chkChonTatCa
- Giả sử cái table bạn lọc ra kết quả có 1 trường là [Chọn] - kiểu True/False như trên form của bạn.
- Code như sau:

Mã PHP:
Private Sub chkChonTatCa_Click()
   Dim rs As DAO.Recordset
   Set rs 
Me.Tên subform.Form.RecordsetClone
   If rs
.RecordCount 0 Then
       rs
.MoveFirst
   End 
If
   Do While Not rs.EOF
       rs
.Edit
       If rs
![Chon] = True Then
           rs
![Chon] = False
       Else
           rs
![Chon] = True
       End 
If
   rs.Update
   rs
.MoveNext
   Loop

   rs
.Close
   Set rs 
Nothing
End Sub 

- Nếu dùng command button thì code cũng như trên và bạn thêm dòng code để đổi tên của nút lệnh khi click. (tên của nút lệnh trong mã VBA không sử dụng tiếng Việt có dấu được nhé).
Vd: 
...
If rs![Chon] = True Then
           rs![Chon] = False
           Me.cmdSelectAll.Caption = "Deselect all"
       Else
           rs![Chon] = True
           Me.cmdSelectAll.Caption = "Select all"
       End If
...

Đây là file của mình, bạn xem sửa hộ mình chút
http://www.mediafire.com/download/addgdy..._2_2.accdb
tên: admin
pass: khongco
Chữ ký của nam8384 nam8384,gia nhập Thủ Thuật Access từ 17-03 -16.
Reply
Những người đã cảm ơn
#5
Điều đó không có gì khó cả, bạn nên dùng SQL dạng UPDATE. Tuy nhiên, cần lưu ý trả lời câu hỏi sau đây:

+ Bạn chọn để thực hiện việc nào đó (ví dụ in ra các phiếu có chữ "Bằng"): Nếu là như vậy thì không cần và hãy xem một đoạn SQL như sau:
Mã:
SELECT * FROM [bangtong] WHERE [noidung] like '*bằng*';
Và khi cần in ra bạn chỉ cần truyền cho báo cáo cái chuỗi SQL kia là xong

+ Bạn muốn cập nhập thông tin vào Bảng để đánh dấu việc gì đó...
Vậy thì có nhiều cách nhưng đơn giản nhất là dùng SQL UPDATE. Cú pháp là
Mã:
SqlTxt="UPDATE [bangtong] SET [chon]=True WHERE [noidung] LIKE '*bằng*';"
và thực thi nó bằng cách sau
Mã:
CurrentDb.Execute SqlTxt

Các bước làm như sau:
1. Nút tìm kiếm
2. Nút chọn tất
Mã nút chọn tất cả như sau:
Mã:
Private Sub Command46_Click()
    Dim SqlTxt As String
    SqlTxt = "UPDATE [bangtong] SET [chon]=True WHERE [noidung] LIKE '*" & txtFindAsUTypeValue & "*';"
    CurrentDb.Execute SqlTxt
End Sub

Thân...
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 Che_Guevara
#6
(18-03-16, 02:51 PM)paulsteigel Đã viết: Điều đó không có gì khó cả, bạn nên dùng SQL dạng UPDATE. Tuy nhiên, cần lưu ý trả lời câu hỏi sau đây:

+ Bạn chọn để thực hiện việc nào đó (ví dụ in ra các phiếu có chữ "Bằng"): Nếu là như vậy thì không cần và hãy xem một đoạn SQL như sau:
Mã:
SELECT * FROM [bangtong] WHERE [noidung] like '*bằng*';
Và khi cần in ra bạn chỉ cần truyền cho báo cáo cái chuỗi SQL kia là xong

+ Bạn muốn cập nhập thông tin vào Bảng để đánh dấu việc gì đó...
Vậy thì có nhiều cách nhưng đơn giản nhất là dùng SQL UPDATE. Cú pháp là
Mã:
SqlTxt="UPDATE [bangtong] SET [chon]=True WHERE [noidung] LIKE '*bằng*';"
và thực thi nó bằng cách sau
Mã:
CurrentDb.Execute SqlTxt

Các bước làm như sau:
1. Nút tìm kiếm
2. Nút chọn tất
Mã nút chọn tất cả như sau:
Mã:
Private Sub Command46_Click()
    Dim SqlTxt As String
    SqlTxt = "UPDATE [bangtong] SET [chon]=True WHERE [noidung] LIKE '*" & txtFindAsUTypeValue & "*';"
    CurrentDb.Execute SqlTxt
End Sub

Thân...
Thanks bác, em làm được rồi. Trong filed "nội dung" thì ok, còn nếu em muốn check trong filed "ID" hay "tên"... 
nói chung là với tất cả các field thì em phải bổ sung code vào như thế nào ah
Chữ ký của nam8384 nam8384,gia nhập Thủ Thuật Access từ 17-03 -16.
Reply
Những người đã cảm ơn
#7
(18-03-16, 04:26 PM)nam8384 Đã viết: .....

Thanks bác, em làm được rồi. Trong filed "nội dung" thì ok, còn nếu em muốn check trong filed "ID" hay "tên"... 
nói chung là với tất cả các field thì em phải bổ sung code vào như thế nào ah

Câu hỏi của em không rõ ràng...
Một là em dùng tiếng Anh loạn xạ làm cho người trả lời không hiểu được.
1. Trường hợp 1: Check có nghĩa là đánh dấu tức là bấm vào cái ô vuông ở cột Chọn nó sẽ chuyển trạng thái từ không chọn sang chọn với dấu hình chữ V và ngược lại;
2. Trường hợp 2: Check có nghĩa là kiểm tra.
Em hãy đọc lại câu hỏi của mình trước xem có gây hiểu lầm không đã!
Mình không trả lời câu hỏi này cho đến khi bạn làm rõ ý định của mình.
(vì với câu hỏi trước thì đã được giải đáp bằng bài vừa rồi của mình đấy).
Thân
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
#8
(18-03-16, 04:40 PM)paulsteigel Đã viết:
(18-03-16, 04:26 PM)nam8384 Đã viết: .....

Thanks bác, em làm được rồi. Trong filed "nội dung" thì ok, còn nếu em muốn check trong filed "ID" hay "tên"... 
nói chung là với tất cả các field thì em phải bổ sung code vào như thế nào ah

Câu hỏi của em không rõ ràng...
Một là em dùng tiếng Anh loạn xạ làm cho người trả lời không hiểu được.
1. Trường hợp 1: Check có nghĩa là đánh dấu tức là bấm vào cái ô vuông ở cột Chọn nó sẽ chuyển trạng thái từ không chọn sang chọn với dấu hình chữ V và ngược lại;
2. Trường hợp 2: Check có nghĩa là kiểm tra.
Em hãy đọc lại câu hỏi của mình trước xem có gây hiểu lầm không đã!
Mình không trả lời câu hỏi này cho đến khi bạn làm rõ ý định của mình.
(vì với câu hỏi trước thì đã được giải đáp bằng bài vừa rồi của mình đấy).
Thân

Ý của em là khi lọc ra kết quả có bao nhiêu record thì phần mềm tự động tick vào ô vuông của cột "chọn", không phải mất công tick thủ công vào từng ô
Chữ ký của nam8384 nam8384,gia nhập Thủ Thuật Access từ 17-03 -16.
Reply
Những người đã cảm ơn
#9
(18-03-16, 06:34 PM)nam8384 Đã viết: Ý của em là khi lọc ra kết quả có bao nhiêu record thì phần mềm tự động tick vào ô vuông của cột "chọn", không phải mất công tick thủ công vào từng ô
Câu trả lời của mình có rồi đấy!
Bạn chỉ cần bấm nút chọn là được!
Mã:
Private Sub Command46_Click()
    Dim SqlTxt As String
    SqlTxt = "UPDATE [bangtong] SET [chon]=True WHERE [noidung] LIKE '*" & txtFindAsUTypeValue & "*';"
    CurrentDb.Execute SqlTxt
End Sub
Còn nếu bạn muốn tìm xong rồi chọn ngay thì bạn gọi thủ tục Command46_Click. Tuy nhiên, về quan điểm lập trình thì đó là điều không tốt vì người dùng có thẻ tìm nhiều lần, mỗi lần lại ghi ngay vào cơ sở dữ liệu thì vừa chậm, vừa không an toàn....

Thân
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


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Refresh Form và tiếp tục hoạt động Godspear 2 84 08-12-16, 12:48 PM
Bài mới nhất: Godspear
  [Hỏi] Cách thêm dữ liệu vào form Main_Sub NganNguyen 1 39 06-12-16, 02:23 AM
Bài mới nhất: maidinhdan
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 195 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 167 09-11-16, 09:49 PM
Bài mới nhất: toancvp

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ơ