(18-03-18, 10:23 AM)mrsiro Đã viết: Hay quá, cho mình hỏi cái index, cái mà mình thắc mắc lâu rồi. Thường mình dùng định danh cho 1 record nào đấy bằng khóa chính, ví dụ mahd chằng hạn. Nhưng có cách nào tìm ra định danh cứng của record đó không, kiểu như không cần biết mahd là gì chỉ cần chỉ ra cái định danh cứng đó thì tự động tìm đến record tương ứng. Ví dụ như combobox ấy, dù cho record source có lấy từ bảng nào, nhưng trên vba chỉ cần dùng combobox.listindex là ra dòng thứ mấy trong combo đó. Tương tự không biết có cách nào tìm ra định danh cứng của record trên table hay không. Mục đích của việc tìm định danh cứng này của mình là để áp dụng vào việc tìm ra record nào đang bị khóa khi sử dụng form record lock.
Trên sqlserver thì có cái index cho từng record trên table, giúp cho truy vấn nhanh hơn. Không biết là trên access có cái index này không.
Về index thì bạn xem bài này tôi mới post.
http://thuthuataccess.com/forum/thread-10443.html
Về định danh cứng thì từ này tôi không biết nhưng nếu nói về Table của Access thì nó gọi là Khóa chính (Primary key - PK), Khóa phụ hay khóa ngoại (Foreign Key - FK). Cái PK chính là định dạnh cứng cho record đó rồi còn gì. PK nó dùng phân biệt record này với record khác và không được trùng nhau. Trong ví dụ của bạn là [mahd], nếu bạn không dùng [mahd] làm PK thì dùng một trường khác dạng Auto Number là PK cũng được, lúc đó không cần quan tâm [mahd] là gì.
Còn về Combobox thì bắt buộc cột đầu tiên trong Record Source phải là Khóa chính (PK) của nguồn dữ liệu đó để tham chiếu trong bảng. Khi dùng Combobox.ListIndex thì nó đã chỉ ra vị trí thứ mấy của dòng được chọn (selected) trong cái combobox đó rồi. Nếu bạn muốn lấy giá trị của Record tại cái ListIndex =i vừa tìm được thì bạn dùng: ComboBox.Value = ComboBox.ItemData(i).
Về việc tìm ra Record nào bị khóa thì có liên quan gì đến định danh cứng, bạn chỉ cần dùng code thư viện DAO là xác định Record nào đang bị lock rồi.
Mặc định trong Form của Access nếu record nào bị lock sẽ có ký hiệu hình tròn gạch chéo ở đầu record đó. Còn nếu bạn muốn tìm thì dùng code như sau: code giả định thôi.
---------------------------------------------------------
On Error Go To KhoaRecord_Error
Dim rs As DAO. Recordset
rs.Edit
rs.MoveNext
KhoaRecord_Error:
If Err.Number = 3218 Then ---> Khi record bị khóa sẽ báo lỗi này
Msgbox "Record đang bị khóa"
Else
Msgbox Err.Number & vbNewLine & Err.Description
End If
----------------------------------------------------------
Bạn muốn biết ai đang khóa record đó thì tham khảo code trong bài này:
http://etutorials.org/Microsoft+Products/access/Chapter+10.+Multiuser+Applications/Recipe+10.9+Determine+if+a+Record+Is+Locked+and+by+Whom/