Quan hệ mainform & subform khi sử dụng ADO kết nối dữ liệu trong MS Access

  • Thread starter nghikt2
  • Ngày gửi
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Set quan hệ Link Child Fields và Link Master Fields giữa 2 form . Em lay hoay mãi mà vẫn không tìm được cách làm. Mong các anh chị diễn đàn giúp em giải quyết vướn mắc nho nhỏ này.
file : http://www.mediafire.com/?nqnnogdno41
 
Khóa học Quản trị dòng tiền
C

cuongmyh

Guest
21/10/08
4
0
0
42
Bac ninh
Sao bạn phải để dữ liệu và form ở 2 files thế cho khó ra. Nếu bạn dung 1 file thì thiết kế form dạng main/subform sẽ dễ dàng hơn nhiều. link child fields & link master fields chỉ có hiệu lực khi form của bạn được thiết lập Record Source mà thôi.
 
P

ptm0412

Sơ cấp
7/10/08
21
0
1
64
TP HCM
Bạn click chọn cái subform, (chọn ngoài rìa ấy nhé), rồi vào Property gõ vào theo thứ tự:
MasterChild.gif
 
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Cám ơn các anh nhiều, nhưng vẫn làm chưa được có cách nào khác không ? Em để data nơi khác là muốn để làm việc trực tiếp với server đó mà. Muốn là vậy nhưng không biết Access có làm được ( chương trình Access + data SQL server) không nữa. Mong được hướng dẫn.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,030
125
63
52
Hà nội
vnuni.net
Cám ơn các anh nhiều, nhưng vẫn làm chưa được có cách nào khác không ? Em để data nơi khác là muốn để làm việc trực tiếp với server đó mà. Muốn là vậy nhưng không biết Access có làm được ( chương trình Access + data SQL server) không nữa. Mong được hướng dẫn.

Bạn tách riêng dữ liệu và Form, Modules, Reports,... như thế là RẤT ĐÚNG. (và làm được từ hồi Access còn là bản 2.0 và MS SQL là 6.0 - tức là từ hồi 1996 đã có thể làm được như thế rồi. Bạn yên tâm làm nhé)

Từ file mdb chương trình, bạn tạo các attached tables link tới các bảng dữ liệu được thiết kế ở MS SQL Server hoặc ở 1 file MDB Data khác.

Trong chương trình, bạn chỉ cần quản lý cái "link" giữa file mdb chương trình và "data source" thôi.

Những ai làm Data và Form,... cùng 1 file thì sẽ không chạy được trên mạng, lúc nâng cấp chương trình cũng khó, v.v...

Còn chuyện tạo form Master/Child table thì nó là kinh điển trong các ví dụ của Access rồi. Bạn cứ tìm ví dụ mà làm theo (Miễn là việc thiết kế Database phải chuẩn, quan hệ rõ ràng, thể hiện đúng nghiệp vụ).

Chú ý: Bác ptm0412 link gì mà qua nhiều trường thế. :)

___________________
tb_Transaction '// Master Table
___________________
ID (PK)
-------------------
TransNo
TransDate
.......

___________________
tb_TransactionDetail '// Detail Table
___________________
ID (PK) '// LineNo
TransID (FK)
---------------------------
ProductID (FK)
Qty
....


Như vậy, khi làm form thì chỉ cần link ID của Master table với TransID trong Detail table thôi. Quan hệ giữa Master table & Detail table là quan hệ Identify relationship (quan hệ xác định - hay nôm na gọi là quan hệ cha con). Hầu hết khi xác lập quan hệ xác định thì tức là sẽ có ràng buộc cascade delete và cascade update.

Còn quan hệ giữa các bảng danh mục với bảng chính (ví dụ như danh mục hàng hoá với bảng detail) thì gọi là Non-Identify relationship (quan hệ không xác định - hay còn gọi là quan hệ tham chiếu).

Thông thường, quan hệ không xác định thì đặt ràng buộc để khi xoá/update source thì sẽ RESTRICT.

Việc hiểu cách thiết lập quan hệ sao cho đúng sẽ tạo ra ứng dụng có tốc độ và an toàn về dữ liệu.


Hope that helps!
 
Sửa lần cuối:
P

ptm0412

Sơ cấp
7/10/08
21
0
1
64
TP HCM
Chú ý: Bác ptm0412 link gì mà qua nhiều trường thế. :)
Đúng là chỉ cần link 1 trường ID là đủ. Nhưng trong Access khi lập form (MasterForm, Subform) theo Wizard, Access cho phép lập tối đa 3 linked fields, chỉ nhằm mục đích tự động add dữ liệu cho 3 field đó.
Nếu dữ liệu của Child có vài trường giống Master thì để Access tự điền vào, chẳng tốt hơn sao?
Nói thì nói vậy, nhưng hình chụp mình đưa lên là file cũ lâu rồi. Bây giờ mình không làm thế mà chỉ cần 1 field ID, các trường còn lại trong child là dư, không để trong structure của child table nữa. Sau này khi cần có thể truy vấn lấy từ master table.

Thanks anyway, Mr Hai2hai!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,030
125
63
52
Hà nội
vnuni.net
Đúng là chỉ cần link 1 trường ID là đủ. Nhưng trong Access khi lập form (MasterForm, Subform) theo Wizard, Access cho phép lập tối đa 3 linked fields, chỉ nhằm mục đích tự động add dữ liệu cho 3 field đó.
Nếu dữ liệu của Child có vài trường giống Master thì để Access tự điền vào, chẳng tốt hơn sao?
Nói thì nói vậy, nhưng hình chụp mình đưa lên là file cũ lâu rồi. Bây giờ mình không làm thế mà chỉ cần 1 field ID, các trường còn lại trong child là dư, không để trong structure của child table nữa. Sau này khi cần có thể truy vấn lấy từ master table.

Thanks anyway, Mr Hai2hai!

Bản chất của 1 chứng từ link với detail là qua ID của chứng từ. Link nhiều trường thừa như của bác là.... sai về bản chất chứ không phải là ... link càng nhiều càng tốt :). Khi làm database thì người ta ko link qua các trường phụ như ngày chứng từ, số chứng từ,... đâu mà phải link qua primary key mà ở đây primary key của chứng từ thì chỉ có 1 trường là ID (mà sao trong detail lại có số chứng từ, ngày chứng từ làm gì, chỉ cần TransID là đủ rồi). Về vụ design database thì ... bác tin em đi :)
 
Sửa lần cuối:
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Em làm được rồi. Cám ơn các anh nhiều. Chúc diễn đàn ngày một sinh động hơn.
 

Xem nhiều