Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Liên kết textbox với List
#1
Tìm cả ngày trên forum mà không thấy topic nào đúng theo ý đồ của mình hết. Nên mạnh dạn lên đây hỏi mọi người.
Mình có 1 form F_MuonTraSach, trong đó có List lấy dữ liệu từ query để thực hiện thao tác cho mượn. Khi làm xong form này mình cảm thấy cũng ok rồi, nhưng khi đưa vào thực tế sử dụng thử, thì có yêu cầu đặt ra là nếu List này có danh sách gồm rất nhiều dòng, thì việc tìm kiếm 01 dòng trên đó để thực hiện thao tác cho mượn thì lâu quá.
Mình muốn thiết kế một textbox phía trên, khi gõ tên sách hoặc mã sách vào textbox nào rồi enter thì danh sách bên dưới ở List sẽ hiển thị tên và mã sách mà mình cần.
Nhờ các pro giúp đỡ với
Form của mình đây: https://drive.google.com/open?id=1QwYnbT...V0NVh4nuDk
Chữ ký của vietnc vietnc,gia nhập Thủ Thuật Access từ 20-12 -18.
Reply
Những người đã cảm ơn
#2
Cái tính năng bạn nói ở trên đơn giản là Form tìm kiếm thôi bạn. Tìm kiếm trong Listbox thay vì trong Sub form.
Bạn thao khảo cái demo của bạn MTNQ này, rất hay đó.
Link: http://thuthuataccess.com/forum/post-348...l#pid34838
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 vietnc
#3
(15-04-19, 06:35 PM)ongke0711 Đã viết: Cái tính năng bạn nói ở trên đơn giản là Form tìm kiếm thôi bạn. Tìm kiếm trong Listbox thay vì trong Sub form.
Bạn thao khảo cái demo của bạn MTNQ này, rất hay đó.
Link: http://thuthuataccess.com/forum/post-348...l#pid34838

Mình tham khảo cách viết code rất hay, đẹp, thông tin search nhanh chóng. Nhưng không hiểu sao, mình sử dụng câu truy vấn điều kiện trong query nguồn của List: Like IIf([forms]![ F_MuonTraSach]![chkID]=True,"*" & [forms]![F_MuonTraSach]![txtTimTest] & "*","""") để lọc textbox thì khi chạy form lại báo hộp thoại nhập dữ liệu, hay câu lệnh này sai.
Giúp mình sửa với!!!
Hình báo hộp thoại: https://drive.google.com/open?id=1Z7p8WY...pFaoSnbpt3
Với lại, demo của ông MTNQ thì cái List khi nhập dữ liệu vào textbox mới hiển thị record, còn nếu mình muốn record trong list hiển thị đầy đủ khi mở form, sau đó nhập vào textbox thì trong list nó lọc lại.
Chữ ký của vietnc vietnc,gia nhập Thủ Thuật Access từ 20-12 -18.
Reply
Những người đã cảm ơn
#4
Like IIf([forms]![ F_MuonTraSach]![chkID]=True,"*" & [forms]![F_MuonTraSach]![txtTimTest] & "*","""")

Cái này hình như có vấn đề. Bạn thử đưa IIF lên trước xem sao? (Không đưa Like lên trước …)
IIf([forms]![ F_MuonTraSach]![chkID]=True, Like "*" & [forms]![F_MuonTraSach]![txtTimTest] & "*","""")
Chữ ký của cpucloi Tôi chỉ biết mỗi một điều là những điều tôi biết được còn quá ít 021


ღღღღღTài sản của cpucloi (View All Items) ღღღღღ
Reply
Những người đã cảm ơn vietnc
#5
(16-04-19, 08:40 AM)cpucloi Đã viết: Like IIf([forms]![ F_MuonTraSach]![chkID]=True,"*" & [forms]![F_MuonTraSach]![txtTimTest] & "*","""")

Cái này hình như có vấn đề. Bạn thử đưa IIF lên trước xem sao? (Không đưa Like lên trước …)
IIf([forms]![ F_MuonTraSach]![chkID]=True, Like "*" & [forms]![F_MuonTraSach]![txtTimTest] & "*","""")

Vẫn không được nhỉ, giống y như cũ. Có điều, query này có nguồn từ nhiều Table chứ không phải từ 1 Table, không biết có cần truy vấn tới tên table của field lấy dữ liệu không, vì cái field cần tham chiếu lọc này có ở 02 table
Chữ ký của vietnc vietnc,gia nhập Thủ Thuật Access từ 20-12 -18.
Reply
Những người đã cảm ơn
#6
Form của bạn làm gì có cái chkID mà đưa vô.
[F_MuonTraSach]![chkID]=True

File bạn đây: http://www.mediafire.com/file/hs3c28n66i...accdb/file
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 vietnc
#7
(16-04-19, 11:40 AM)ongke0711 Đã viết: Form của bạn làm gì có cái chkID mà đưa vô.
[F_MuonTraSach]![chkID]=True

File bạn đây: http://www.mediafire.com/file/hs3c28n66i...accdb/file

cái database gởi trước chưa làm mấy checkbox nên không có là phải, dù sao cũng cảm ơn ongke0711 happy
Ông kiểm tra dùm tui xem, trong cái form F_NhapSachCon, nút Lưu tại khu vực nhập Tác giả, bị lỗi câu lệnh.
Đây: https://drive.google.com/open?id=1Y0ET9A...yM9r_alJCS
Chữ ký của vietnc vietnc,gia nhập Thủ Thuật Access từ 20-12 -18.
Reply
Những người đã cảm ơn
#8
(16-04-19, 05:08 PM)vietnc Đã viết: Ông kiểm tra dùm tui xem, trong cái form F_NhapSachCon, nút Lưu tại khu vực nhập Tác giả, bị lỗi câu lệnh.
Đây: https://drive.google.com/open?id=1Y0ET9A...yM9r_alJCS

Báo lỗi phần màu đỏ.
If Tbl_SangTac_IDTacGia.Value = RsM!IDTacGia Then
       MsgBox "Ma tac gia trung"
...

Nó không phải tên một cái control nào trên Form của bạn. Bạn muốn lấy giá trị của cái combobox Mã tác giả thì phải tham chiếu đến Name của chứ. Name: TacGia
Sửa lại:
If Me.TacGia.Value = RsM!IDTacGia Then
       MsgBox "Ma tac gia trung"
...


Về trường hợp trên, bạn muốn kiểm tra tên sách + tên tác giả đã nhập chưa để không bị trùng thì cần gì dùng vòng lặp, duyệt qua từng dòng của table chi cho mệt hệ thống. Bạn dùng hàm DLookup() đi, hoặc muốn dùng Recordset thì dùng Rs.FindFirst ID Sách rồi đến IF... 

Một góp ý khác là bạn bỏ toàn bộ các thiết lập ComboBox trong table đi, các field chỉ thuần là textbox không thôi thì tốc độ tải dữ liệu, load dữ liệu lên Form mới nhanh được.
Combobox trong table chỉ để cho người mới học lập trình xem cho dễ thôi chứ ra ứng dụng rồi thì bỏ đi, làm nặng nề thêm table một cách không cần thiết.

Các query join table với nhau đừng nên lúc nào cũng chọn [TênTable.* ] vì nó sẽ kéo luôn nhưng trường không cần thiết -> giảm tốc độ query. Nếu sau này bạn dùng Linked table qua mạng nội bộ thì các thiết lập dư thừa này làm query chạy ì ạch luôn đó. Bên cạch đó cái trường Primary key cũng bị lập lại 2 lần nên khi cần khai báo trường đó phải thêm tên Table vô để xác định bạn muốn dùng Field key đó của table nào -> phiền phức.
Cụ thể sửa cái Query [Q_NhapTacGia] lại như sau:

Mã PHP:
SELECT Tbl_SangTac.*, Tbl_TacGia.TenTacGia
FROM Tbl_TacGia INNER JOIN Tbl_SangTac ON Tbl_TacGia
.IDTacGia Tbl_SangTac.IDTacGia
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 vietnc
#9
(17-04-19, 12:31 AM)ongke0711 Đã viết:
(16-04-19, 05:08 PM)vietnc Đã viết: Ông kiểm tra dùm tui xem, trong cái form F_NhapSachCon, nút Lưu tại khu vực nhập Tác giả, bị lỗi câu lệnh.
Đây: https://drive.google.com/open?id=1Y0ET9A...yM9r_alJCS

Báo lỗi phần màu đỏ.
If Tbl_SangTac_IDTacGia.Value = RsM!IDTacGia Then
       MsgBox "Ma tac gia trung"
...

Nó không phải tên một cái control nào trên Form của bạn. Bạn muốn lấy giá trị của cái combobox Mã tác giả thì phải tham chiếu đến Name của chứ. Name: TacGia
Sửa lại:
If Me.TacGia.Value = RsM!IDTacGia Then
       MsgBox "Ma tac gia trung"
...


Về trường hợp trên, bạn muốn kiểm tra tên sách + tên tác giả đã nhập chưa để không bị trùng thì cần gì dùng vòng lặp, duyệt qua từng dòng của table chi cho mệt hệ thống. Bạn dùng hàm DLookup() đi, hoặc muốn dùng Recordset thì dùng Rs.FindFirst ID Sách rồi đến IF... 

Một góp ý khác là bạn bỏ toàn bộ các thiết lập ComboBox trong table đi, các field chỉ thuần là textbox không thôi thì tốc độ tải dữ liệu, load dữ liệu lên Form mới nhanh được.
Combobox trong table chỉ để cho người mới học lập trình xem cho dễ thôi chứ ra ứng dụng rồi thì bỏ đi, làm nặng nề thêm table một cách không cần thiết.

Các query join table với nhau đừng nên lúc nào cũng chọn [TênTable.* ] vì nó sẽ kéo luôn nhưng trường không cần thiết -> giảm tốc độ query. Nếu sau này bạn dùng Linked table qua mạng nội bộ thì các thiết lập dư thừa này làm query chạy ì ạch luôn đó. Bên cạch đó cái trường Primary key cũng bị lập lại 2 lần nên khi cần khai báo trường đó phải thêm tên Table vô để xác định bạn muốn dùng Field key đó của table nào -> phiền phức.
Cụ thể sửa cái Query [Q_NhapTacGia] lại như sau:

Mã PHP:
SELECT Tbl_SangTac.*, Tbl_TacGia.TenTacGia
FROM Tbl_TacGia INNER JOIN Tbl_SangTac ON Tbl_TacGia
.IDTacGia Tbl_SangTac.IDTacGia

Việc thiết lập combobox cho các table chỉ là muốn chọn từ ID sẽ hiển thị kèm theo tên luôn, đỡ mất thời gian người dùng, với lại họ có thể quên. Thực ra, phần mềm mình viết dành cho đơn vị nên cố gắng tối ưu hóa cho người sử dụng cũng là đồng nghiệp nên mới rắc rối thêm rối.
Trở lại vấn đề Form F_NhapSachCon, bạn có để ý thấy rằng có 02 subform mình đưa vào form chính, cả 02 subform này đều có nút lưu, đều truy vấn từ các table join với nhau bằng query với các điều kiện tương đồng nhau. Vấn đề bạn điều chỉnh trong câu truy vấn tham chiếu đến Name của các đối tượng trên subform, mình đã sửa tại 02 nút lưu của 02 subform thì 01 cái sub NhapNXB thì chạy ok, còn 01 cái sub NhapTacGia cứ báo "trùng mã" mặc dù vẫn lưu được và cập nhật vào table.
Mình dò cả đêm từ code đến các query, nhưng tìm ra được tại sao nó cứ báo "Mã Tác giả trùng" (dù có thêm mới tác giả và chọn 01 tác giả chưa hề có trong table nó vẫn báo").
Chữ ký của vietnc vietnc,gia nhập Thủ Thuật Access từ 20-12 -18.
Reply
Những người đã cảm ơn
#10
(17-04-19, 03:40 AM)vietnc Đã viết: Việc thiết lập combobox cho các table chỉ là muốn chọn từ ID sẽ hiển thị kèm theo tên luôn, đỡ mất thời gian người dùng, với lại họ có thể quên. Thực ra, phần mềm mình viết dành cho đơn vị nên cố gắng tối ưu hóa cho người sử dụng cũng là đồng nghiệp nên mới rắc rối thêm rối.

Ý đồ hoàn toàn đúng, chỉ có thực hiện là sai thôi.
Người dùng thì chỉ có thao tác trên Form chứ không phải thao tác trên Table nên bạn thiết kế trong Table thì ai bấm cái comboBox đó đây. Table thuần tuý chỉ lưu trữ dữ liệu thôi. Bạn muốn ComboBox chọn kiểu gì, bao nhiêu cái thì cứ lên Form mà thiết kế.
Ở cái Subform "Khu Vực Sách" có 3 cái combobox: Mã ngôn ngữ, mã thể loại, mã kho. Tại sao bạn không gán Row Source cho các combobox này là cái table thể loại, kho, tbl_ngonngu luôn mà dùng Value List rồi gõ tay vô??? 
Sau này bạn thêm kho, thêm thể loại...Tôi thấy bạn cũng có giải pháp là mỗi khi bấm vào combobox này nó sẽ xoá list và tải lại cái danh sách thể loại, kho mới nhất ==> tốn thêm tài nguyên máy cho hoạt động này. Cách này dùng cho UnBound Form, Unbound Control, bạn đang dùng Bound Form - các control, form gắn với một source thì tận dụng Source có sẳn luôn cho nhanh.
Bên cạnh đó còn hiện thêm cái subform cho ngôn ngữ, thể loại..lại tốn thêm tài nguyên máy.
Tôi có sửa demo lại, bạn xem thử rồi áp dung cho các form khác luôn. Bạn xem kỹ các thông số: Bound Column, Column Count, Column Width, List Width.
Nói chung là code dư thừa nhiều quá làm giảm hiệu suất của ứng dụng.

Demo sửa: http://www.mediafire.com/file/ktm43742yu...accdb/file

Trích dẫn:Trở lại vấn đề Form F_NhapSachCon, bạn có để ý thấy rằng có 02 subform mình đưa vào form chính, cả 02 subform này đều có nút lưu, đều truy vấn từ các table join với nhau bằng query với các điều kiện tương đồng nhau. Vấn đề bạn điều chỉnh trong câu truy vấn tham chiếu đến Name của các đối tượng trên subform, mình đã sửa tại 02 nút lưu của 02 subform thì 01 cái sub NhapNXB thì chạy ok, còn 01 cái sub NhapTacGia cứ báo "trùng mã" mặc dù vẫn lưu được và cập nhật vào table.
Mình dò cả đêm từ code đến các query, nhưng tìm ra được tại sao nó cứ báo "Mã Tác giả trùng" (dù có thêm mới tác giả và chọn 01 tác giả chưa hề có trong table nó vẫn báo").

014 Tôi biết cái lỗi này chứ nhưng muốn để bạn suy nghĩ xem tại sao.
Nó hoàn toàn do cái logic, luồn xử lý nhập liệu của bạn mà ra thôi.
Bạn xem lại trước đi rồi lúc rảnh tôi sẽ sửa và trao đổi thêm.

Về cái vụ lúc trước bạn nói các form khi mở lên nó bung toàn màn hình là do cái Main Form của bạn khi khởi động thiết lập Maximize nên các form con sau đó cũng tự động bung toàn màn hình hoặc nếu bạn thu nhỏ các form con thì form Main cũng bị thu nhỏ luôn. Vụ này phải dfng code khác can thiệp hệ thống chứ không dùng tính năng Maximize mặc định được. Để tôi lục lại code rồi gửi. 

Nếu bạn có Zalo hay Facebook Messenger thì cho thông tin, trao đổi nhanh hơn.
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 vietnc


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Liên kết giữa 2 tabcontrol obelisk90sl 1 153 22-03-19, 09:25 AM
Bài mới nhất: lmthu
  [Hỏi] Tạo liên kết giữa listbox và form longkd_bvct@yahoo.com.vn 4 352 25-01-19, 04:46 PM
Bài mới nhất: tranthanhan1962
  [Hỏi] Liên kết comboBox với subform để điền dữ liệu giống nhau vào table vuthaiha90 5 600 05-12-18, 03:11 PM
Bài mới nhất: ongke0711
  [Hỏi] Textbox Search và sửa ngay trên Form vuthaiha90 1 475 22-11-18, 04:28 PM
Bài mới nhất: lamvankhanh
  [Help] Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ," ongke0711 21 5,130 25-07-18, 12:53 PM
Bài mới nhất: ongke0711

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