Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hỏi đáp về Access cơ bản của thành viên mới...
#1
Tôi viết chủ đề này với mục đích giúp đỡ các bạn mới bắt đầu học Access có thể tiếp cận với Access..
Chủ đề không được viết và sắp xếp theo cấu trúc bất cứ sách vở hoặc bài giảng nào mà là dựa trên nỗ lực tự học, đọc và làm bài tập của một bạn (hiện là thành viên mới của diễn đàn - Đặng Kim Ngọc).
Trên cơ sở các ý kiến ban đầu, Ngọc đã đọc một số tài liệu trên mạng và thực hành với bài tập đầu tiên về CSDL. Sau đây là bài tập mà Ngọc đã thực hiện trong ngày hôm nay với câu hỏi sau
Trích dẫn:Với những cái em đã đọc và em đã làm 1 ví dụ này. Em làm ví dụ về quản lý hàng hóa. Em đã tạo các bảng (như file đính kèm). Em đã đặt các khóa. Em đã làm đến bước tạo Relationships thì chưa được.
Trong ví dụ này, anh xem em:
- Em đã tạo các khóa như vậy đã được chưa?
- Em tạo các bảng  với nội dung như vậy có hợp lý không để truy vấn dữ liệu và sau này còn tạo Form?
- Em tạo quan hệ Relationships cho PHIEUNHAPKHO thì được. Nhưng đến PHIEUXUATKHO, sao em không tạo được MADOITUONG có quan hệ 1 với nhiều?
Đó là những gì em đã đọc được và làm ví dụ áp dụng. Anh xem qua cho em và hướng dẫn em thêm nhé!
Cám ơn anh Ngọc nhiều!

Em Ngọc
------------------------------------------------
^^ Chập chững đi....
Liên kết đến CSDL ở đây

Với câu hỏi của Ngọc, tôi xin phép trả lời bằng bài tập phân tích

Góp ý thứ nhất....Luôn giữ cho CSDL gọn gàng và nhỏ
Với người mới học, thao tác thường hay quên và ít chú ý nhất đó là Làm gọn file Access của mình. Đây là việc làm cho các phần thừa, các bản ghi/ bảng ..vv đã bị xóa mất hẳn khỏi CSDL. Làm như vậy, kích thước file sẽ nhỏ đi rất nhiều (chẳng hạn file của bạn Ngọc hiện tại là 2.2M, sau khi nén lại chỉ còn 544K)
Cách làm như sau: Nhấn vào File/ chọn Compact and Repair Database.
Hoặc có thể làm một cách tự động mỗi khi thoát khỏi Database bằng cách
Nhấn File/Option/Current Database/ Chọn Compact on Close...

Góp ý thứ 2 - Nên tận dụng các chức năng của Access trong việc kiểm soát khóa chính...
Thông thường, tôi không dùng (đây là trường phái mà tôi hay dùng - có nhiều bạn khác dùng cách khác...) các trường khóa là trường dạng Text mà dùng dạng Auto Number (đánh số tự động). Cách làm đó có cái lợi:
+ Access sẽ tự động kiểm soát số thứ tự đánh số mà tôi không phải quan tâm đến việc có trùng hay không trùng;
+ Ít gặp lỗi trong quá trình xử lý số liệu.
Với tình huống CSDL hiện tại của Ngọc, tôi sẽ thêm một trường ID_Doituong với bảng DMDOITUONG, ID_PhieuNhapKho, ID_HangHoa, ID_Kho với kiểu là AutoNumber và đặt khóa liên kết bảng với các trường này.
Như vậy tại các bảng có liên kết tôi sẽ bổ sung thêm các trường như trên. Chẳng hạn
Bảng CTPHIEUNHAP tôi bổ sung trường ID_Doituong với kiểu Number và đặt liên kết Nhiều - Một với trường ID_Doituong trong bảng DMDOITUONG

Tất nhiên việc này nhiều bạn sẽ không thích thú vì nó làm phát sính thêm một việc đó là thêm một trường Mã theo chuẩn mực mong muốn của nghiệp vụ.

Góp ý thứ 3 - Khi xây dựng quan hệ, cần phát sinh từ phân tích nghiệp vụ.
Với trường hợp CSDL hiện tại, có các cặp quan hệ sau:
+ Phiếu nhập phát sinh theo đối tượng (vì đó là chủ thể) - Vậy quan hệ này sẽ là quan hệ Một (Đối tượng) - Nhiều (Phiếu nhập). Khi xóa đối tượng, tất cả các phiếu nhập sẽ được xóa theo.
Như vậy quan hệ 2 trường liên kết sẽ đòi hỏi Enforce Referential Integrity (Bắt buộc phải tham chiếu nhất quán), Cascade Update/Delete related records (Tự động cập nhập, xóa bản ghi liên quan). Xin phép gọi là liên kết chặt
+ Hàng hóa phát sinh theo kho nhưng có thể một hàng hóa có thể xuất hiện ở nhiều kho do vậy nếu thiết lập liên kết như hiện tại (1 kho, nhiều hàng hóa, liên kết chặt), bạn sẽ không thể sử dụng được 1 danh mục hàng hóa chung được vì mỗi mã hàng đó được tạo ra là đuy nhất cho kho đó mất rồi.
Nếu muốn sử dụng một danh mục hàng hóa để tiện việc nhập liệu, bạn có thể tạo ra một bảng DMHANGHOACHUNG bao gồm ID_HANGHOACHUNG, MAHANGHOA, TENHANG ... và các trường khác cần quản lý liên quan đến danh mục hàng hóa. Sau đó tạo một liên kết tham chiếu (lỏng - hoặc chặt cũng được) giữa trường ID_HANGHOACHUNG với trường ID_HANGHOACHUNG trong bảng DMHANGHOA.
Nói khác hơn, không còn danh mục hàng hóa thì không còn hàng ở các kho trong khi nhà kho vẫn còn đó....
+ Quan hệ giữa hàng hóa và phiếu nhập có 2 dạng:
- Người ta muốn biết hàng đó ở kho nào? như thế, chỉ cần Gắn liên kết giữa ID_Hanghoa trong phiếu nhập với ID_Hanghoa trong DMHANGHOA là được.
- Người ta chỉ cần biết loại hàng, còn kho là bất kỳ: Lúc này chỉ cần gắn liên kết ID_Hanghoa trong phiếu nhập với ID_HANGHOACHUNG. Và bổ sung thêm một trường ID_Kho vào phiếu nhập và gắn liên kết lỏng (không bắt buộc cập nhập/ xóa) với ID_Kho.

Với các điều chỉnh như vậy, bảng dữ liệu đã có thay đổi như trong liên kết kèm theo. Cách làm này sẽ giúp bạn thu nhỏ kích thước CSDL và dễ thao tác hơn nhiều.
Ngoài ra, xin giới thiệu một cách để tạo ra các Combobox lựa chọn danh mục trong quá trình nhập liệu:::
>1. Vào chế độ thiết kế bảng DMHANGHOA
>2. Thêm trường ID_HANGHOACHUNG
>3. Mục Data Type chọn Lookup
>4. Chọn I want the lookup ...(Tôi muốn trường tìm kiếm lấy giá trị từ bảng/ query khác)
>5. Next, chọn DMHANGHOACHUNG
>6. Next, thêm ID_HANGHOACHUNG, MAHH, TENHH
>7. Next, Chọn tên trường cần sắp xếp
>8. Next ... và kết thúc
Gợi ý: Sau này các bạn có thể quan sát phần DataType của trường này và Tab LookUp để hiểu nguyên lý và tự thiết kế mà không cần WIZARD nhé.

Góp ý thứ 3: Đơn gia của Ngọc là kiểu Long (không có thập phân, như vậy có thể không ổn, nên chọn là Single hoặc Double (thực) để có thể thêm thập phân vì có thể ta dùng đơn vị tính hàng ngàn thì sao?

Bạn Ngọc sẽ làm tiếp phần còn lại nhé... và lưu ý post lên đây phần phân tích bài của bạn.
Liên kết bài đã sửa ở đây
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
#2
Chào mọi người! Em có ví dụ này nhờ mọi người xem dùm cho em nhé!
-         Sao code của em sai cho nào mà em click chọn danh mục hàng trên List để nó cập nhật thay đổi ở các mục tương ứng?
-         Khi em nhập thông tin và chọn nút Ghi sao nó không hiển thị trên List mà phải thoát form và khởi động lại mới thấy?
-         Khi em cho mã hàng để xóa và chọn nút Xóa sao nó không cập nhật lại và cũng phải thoát form rùi mở lại mới thấy nó được xóa?
-         Em đã chọn hiển thị 4 cột, vậy mà khi mở form không thấy cột mã hàng đâu cả mà chỉ có 3 cột?
Vậy nhờ mọi  người xem cho em và hướng dẫn em thêm nhé!
Cám ơn mọi người nhiều!

File đính kèm
Chữ ký của Ranju Ranju,gia nhập Thủ Thuật Access từ 08-07 -16.
Reply
Những người đã cảm ơn
#3
Em có câu hỏi này: Em muốn form f_login khi mở ra nó sẽ hiện đầy màn hình?

File đính kèm
Chữ ký của Ranju Ranju,gia nhập Thủ Thuật Access từ 08-07 -16.
Reply
Những người đã cảm ơn
#4
Trích dẫn:Chào mọi người! Em có ví dụ này nhờ mọi người xem dùm cho em nhé!
-         Khi em nhập thông tin và chọn nút Ghi sao nó không hiển thị trên List mà phải thoát form và khởi động lại mới thấy?
-         Khi em cho mã hàng để xóa và chọn nút Xóa sao nó không cập nhật lại và cũng phải thoát form rùi mở lại mới thấy nó được xóa?
-         Em đã chọn hiển thị 4 cột, vậy mà khi mở form không thấy cột mã hàng đâu cả mà chỉ có 3 cột?
Vậy nhờ mọi  người xem cho em và hướng dẫn em thêm nhé!
Cám ơn mọi người nhiều!
Câu hỏi trong Link http://thuthuataccess.com/forum/thread-9396.html
và Link http://thuthuataccess.com/forum/thread-9396.html

Ngọc nên đặt câu hỏi trong Thread mình đã tạo ra thì ổn hơn... thay vì tạo nhiều thread khác.


"Sao code của em sai cho nào mà em click chọn danh mục hàng trên List để nó cập nhật thay đổi ở các mục tương ứng?"
Ngọc viết không rõ nên không trả lời được

Ý 2 và 3:
"Khi em nhập thông tin và chọn nút Ghi sao nó không hiển thị trên List mà phải thoát form và khởi động lại mới thấy?"
Đây là lập trình hướng đối tượng, bạn muốn List hiển thị, bạn phải yêu cầu nó làm việc đó. 
Khi ghi xong, bạn cần gọi bằng cách [Tên List].Requery

Ý 4:
"Em đã chọn hiển thị 4 cột, vậy mà khi mở form không thấy cột mã hàng đâu cả mà chỉ có 3 cột?"
Bạn cần nắm được khái niệm về Thuộc tính (Property).
Với Listbox, liên quan đến việc này có 2 thuộc tính bao gồm:
[Tên Listbox].ColumnCount=4 ' để quy định rằng List này có 4 cột
[Tên Listbox].ColumnWidths="0;1;2;3;4" ' Để quy định độ rộng cột của 4 cột đó
Nhấn phải chuột vào listbox trong chế độ thiết kế, chọn Property và tìm 2 thuộc tính đó xem nào.

Tiện đây mình trả lời luôn bài viết về phóng to màn hình
Bạn chỉ cần đặt lệnh docmd.Maximize trong thủ tục Form_Open hoặc Load là được.
Muốn tràn màn hình ra ngoài Access thì bạn cần biết về lập trình API và vào lúc này, thiết nghĩ chưa cần phải nghiên cứu đến vấn đề đó.

Một góp ý khi đăng bài.
Ngọc nên viết đầy đủ theo cấu trúc

Đặt vấn đề: Mô tả rõ nghiệp vụ bạn đang làm;
Vấn đề này sinh: Mô tả rõ vấn đề nảy sinh không mong muốn hoặc điều bạn muốn xử lý
Câu hỏi: Cần được giải đáp điều gì

Như vậy sẽ ổ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 Ranju , maidinhdan , Che_Guevara
#5
Bài trả lời ở đây ..
http://thuthuataccess.com/forum/thread-9394.html
Nhờ Tuấn xóa giúp hoặc gộp thread này vào
http://thuthuataccess.com/forum/thread-9394.html
Giùm mình với
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
#6
Bài trả lời ở đây ..
http://thuthuataccess.com/forum/thread-9394.html
Nhờ Tuấn xóa giúp hoặc gộp thread này vào
http://thuthuataccess.com/forum/thread-9394.html
Giùm mình với
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
#7
mình có chỉnh sửa chút xíu, bạn tham khảo nhé, file của bạn đây
Download file
Reply
Những người đã cảm ơn Ranju
#8
Đã giải quyết xong vấn đề, mình có thêm một vài dòng code, file của bạn đây
Download file

Mã PHP:
Private Sub CMD_GHI_Click()
If 
IsNull(MAHANG) = True Then
  MsgBox 
"Ma hang khong duoc de trong!"vbCritical"ACCESS"
  MAHANG.SetFocus
ElseIf DCount("MAHANG""DMKHOHANG""MAHANG='" MAHANG "'") = 1 Then ' Dieu kien ma hang trung nhau (Ma da ton tai)'
  MsgBox "Ma hang nay da ton tai. Vui long nhap ma khac!"vbCritical"ACCESS"
  MAHANG.SetFocus
Else
  DoCmd.RunCommand acCmdSaveRecord
  Me
.Refresh 'Them vao dong nay de lam sach form va load lai du lieu'
End If
End Sub

'Them 03 dong trong CMD_XOA'
Private Sub CMD_XOA_Click()
If 
MsgBox("Ban co muon xoa ma hang nay khong?"vbYesNo vbQuestion"ACCESS") = vbYes Then
   DoCmd
.SetWarnings False 'Tat canh bao mac dinh cua Access'
   DoCmd.RunCommand acCmdDeleteRecord 
   DoCmd
.SetWarnings True 'Bat lai canh bao mac dinh cua Access'
   Me.Refresh 'Them vao dong nay de lam sach form va load lai du lieu'
End If
End Sub 
Reply
Những người đã cảm ơn paulsteigel
#9
Chưa xem file của bạn. big green
Nếu như chỉ cần làm mới list, sau mỗi hành động bạn đưa vào dòng
tênlist.Requery
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
Gmail: cgiahuy13@gmail.com


ღღღღღTài sản của cpucloi (View All Items) ღღღღღ
Reply
Những người đã cảm ơn paulsteigel


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 tạo Menu cho file Access bằng Macro Noname 44 31,813 10-11-16, 04:48 PM
Bài mới nhất: ongke0711
  hàm đổi số thành chữ trong access trico9.0 8 4,594 30-09-16, 03:09 PM
Bài mới nhất: ongke0711
  [Hỏi] Macro Setvalue bị tắt sau khi chuyển thành file MDB toancvp 6 341 25-07-16, 07:28 PM
Bài mới nhất: toancvp
  menu trong access 2007 anhhoa1208 1 964 22-06-15, 06:52 PM
Bài mới nhất: tranthanhan1962
  Phân Biệt Code Viết Trong VBA Excel Và Access kieu manh 9 2,024 22-06-15, 01:30 PM
Bài mới nhất: tranthanhan1962

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ơ