PDA

View Full Version : [Q] Relationship trong Access



lttnttn
29-05-2003, 21:06
Mình taïo ra 1 query trong ñoù coù 1 field maõ khaùch haøng ñöôïc taïo töø field stt vaø field Teân khaùch haøng cuûa baûng khaùc (vd trong baûng 1 coù caùc filed stt la khoaù chính, field teân khaùch haøng vv... roài mình töï taïo moät query khaùc coù field maõ khaùch haøng, field teân khaùch haøngvv..)Vaäy mình coù theå thieát laäp query naøo vaøo relationship ko?, neáu ko thì laøm sao thieát laäp quan heä vôùi caùc baûng khaùc ñöôïc?
Mong söï chæ giaùo cuûa caùc cao thuû.Mình ñang caàn gaáp.

nguyenthu
02-06-2003, 15:08
Bạn lộn font rồi, đọc không được.
Ở đây xài font Unicode UTF-8.
Thân

le6ha2
20-06-2003, 15:57
Khó đọc quá!
Nhưng có lẽ chỉ cần mở cửa sổ relationship ra rồi create quan hệ thôi mà.
nếu bạn muốn cho query liên hệ với các table thì đầu tiên dùng make table query để tạo ra một table chứa các field như query đó, sau đó thì create relationship.

lttnttn
24-06-2003, 00:58
Mình cũng làm tương tự như bạn le6ha2 nói nhưng vẫn không được.Tại vì trong Query không có tạo ra được khoá chính.

nguyenthu
24-06-2003, 14:00
Bạn hãy mở Access ra, Open database và chọn database của bạn.
Xong Select tên 1 table (bạn đã create)/ Modify (icon là hình cái thước đo góc "equerre") : bạn sẽ thấy một cửa sổ của table, mỗi hàng là một field của table đó.
Select field mà bạn muốn tạo PRIMARY KEY, click trên Tool bar, cái icon hình "chìa khóa".
Có vậy thôi.
Thân

lttnttn
30-06-2003, 00:08
Cái đó là bảng rồi chứ nếu là Query thi hình chìa khoá bị mờ đi.
Bạn có thể nói cụ thể hơn không.

nguyenthu
30-06-2003, 02:34
Bạn lttnttn,
Tôi phải đọc lại bài post bằng VNI-times mới hiểu rõ.
Không thể và không cần tạo khóa chính hay ngoại trong một Query. Việc tạo khoá phải thực hiện thẳng trong Table, Mode Creation.
Bạn cần tạo các khoá chính, ngoại xong rồi, và dùng sơ đồ liên hệ để tạo liên hệ (thí dụ n-1) :
T1 (PK : stt, FK = mkh)
T2 (PK : mkh, tenkh)
Muốn tạo một liên hệ của T1 với một trường của table T2, trường đó bắt buộc phải là Primary key (PK) của T2, đó là trường mkh, trong T1 nó trở thành Foreign key (FK).
Khi bạn tạo xong sơ đồ liên hệ bằng Menu Tools/ Relation, bạn mở cửa sổ tạo Query mới :
- Bạn phải Add những table bạn cần, sau khi Add T1 và T2 bạn sẽ thấy có dây liên-hệ hiện ra.
- Xong bạn lựa trường nào bạn muốn (từ Dropdown listbox), có vậy thôi.
Click (!) là chạy liền.
OK?
Không được thì gởi địa chỉ e-mail cho tôi, tôi gởi thí dụ cho.
Thân

le6ha2
30-06-2003, 15:22
sau khi chay make table query(ban chon make table query va chac chan la phai RUN , nhan dau cham cam !). ban se tao ra mot mot table moi (ma khi chay access se hoi ban dat ten gi?) sau do ban mo table nay ra va qua che do design ,chac chan se tao duoc khoa chinh thoi ma!

lttnttn
30-06-2003, 17:04
Mình hiểu ý của nguyenthu nói. Nhưng ý mình muốn hỏi là T2 của mình không thể tạo được bằng bảng mà phải tạo bằng Query thì việc thiết lập quan hệ (một nhiều) với bảng T1 trong Relationships có được không?

lttnttn
30-06-2003, 17:11
Bạn le6ha2 nói mình không hiểu cho lắm, khi tạo make table query xong Run và Save nó thì nó đã trở thành query, mở qua chế độ design thì là chế độ design của query chứa không còn chế độ design của bảng nữa và biểu tượng Primary key cũng bị mờ đi rồi.

nguyenthu
01-07-2003, 14:52
Bạn lttnttn,

Chắc bạn muốn nói là làm sao tạo Relation giữa table T1 nằm trên disque và table T2 nằm trong RAM ?
Chắc chắn là không được. Bạn phải tạo table T2 trên physical support như disque thì mới thao tác Relation ship được.

Table T2 bạn có thể tạo bằng Query nhưng ít bảo đảm bằng thao tác thẳng trên cửa sổ Access. Tạo xong T2 trên disque rồi, bạn mới có thể làm Query (câu lệnh thứ hai) và dùng Relation.

Khác nhau giữa Query và Macro là Query chỉ thực hiện một câu lệnh SQL, mà Macro có thể thực hiện nhiều câu. Vậy bạn có thể thực hiện hai câu lệnh SQL (tạo table T2, và Query với Relation) bằng một macro.

Nhưng mà tại sao vậy ? Bạn không có quyền Admin để tạo table từ trong cửa sổ Access à ? Vậy thì dù bạn có làm bao nhiêu Query nó cũng sẽ đòi privilege mà bạn không có,cho nên cũng sẽ báo lỗi mà thôi. Bạn cần phải nói rõ thì các bạn ở đây mới giúp được.
OK?
Thân

lttnttn
01-07-2003, 21:19
Mình có bảng Khách hàng gồm các field(makh(khoá chính), tenkh, diachikh....)và bảng Hoá đơn( mahd, makh(khoá ngoại), ngayxuathd.., 2 bảng này quan hệ với nhau là (một nhiều thông qua filed makh).Nhưng khồ nổi là field makh trong bảng Khách hàng admin không có quyền nhập vô mà nó phải sinh tự động.Vậy phải làm sao?

nguyenthu
02-07-2003, 19:59
Mình có bảng Khách hàng gồm các field(makh(khoá chính), tenkh, diachikh....)và bảng Hoá đơn( mahd, makh(khoá ngoại), ngayxuathd.., 2 bảng này quan hệ với nhau là (một nhiều thông qua filed makh).Nhưng khồ nổi là field makh trong bảng Khách hàng admin không có quyền nhập vô mà nó phải sinh tự động.Vậy phải làm sao?

Chào lttnttn,
Hôm nay server bận nên trả lời trễ, mong lttnttn thông cảm.
Mình thấy là khi dùng Access, chọn Autonumber, mình sẽ có một column tên là " No " và type là Autonumber. Và mình có thử xoá tên N° gõ lại makh, và thấy OK.
Vậy, mình đề nghị lttnttn hãy làm như sau đây :
1) Mở Access, tab Table, mở table khachhang ra, sữa column “N° “ ra thành “makh”, bên trái có sẵn hình chià khoá (vì nó là PK), nếu không thì click icône chìa khoá để tạo khoá.
2) Table hoadon không có gì thay đổi , lưu ý là makh phải là type numeric, nó mới tương đương được với type Autonumber.
3) Menu To ol/ Relation : cửa sổ mới Relation hiện ra. Click right : Ad d hai table đó vào. Xong dung chuột, bấm vào hang makh của table này kéo qua makh của table kia. Bạn sẽ thấy hiện ra cửa sổ nhỏ : bạn thấy bên trái field khachhang.makh, và bên phải là hoadon.makh, đánh dấu Referential integrity, 1-n. Xong Save.
4) Bây giờ, bạn có thể dung tab Query, tạo Query mới : bạn thấy cửa sổ hiện ra, Ad d hai table vào, bạn thấy ngay cái relation hiện ra giữa hai table.
5) Click icone ( ! ) là chạy liền.
OK ?
Thân,

lttnttn
04-07-2003, 16:19
Nhưng field makh không phải tăng tự động từ 1, 2, 3...... mà là phải lấy năm hiện tại + tháng hiện tại và số thứ tự ứng với lúc nhập makh đó.(vd Người khách A hôm nay đăng ký vào mang số thứ tự là 15 thì makh là: 20030715.)

nguyenthu
04-07-2003, 16:53
Bạn lttnttn,
Vậy thì trong Access, bạn sửa nó lại, thay vì type Autonumber, bạn chọn type Date. Với type này, bạn có nhiều dạng để hiển thị. Còn không thích thì sửa lại type text (8). Muốn sữa lại thì click vào bên phải chữ Autonumber, nó sẽ cho hiện ra một list mà chọn. Nếu chọn text, xem bên dưới, chọn chiều dài là 8.
OK?
Thân

lttnttn
10-07-2003, 13:24
nhưng mà 20030715 là 2003 lấy năm hiện tại + 07 là tháng hiện tại +15 là số Autonumber. Mà trong bảng thì không thể nào chọn hai kiểu dữ liệu cùng một lúc được.Cái này thì chỉ làm được trong query thôi. Nhưng query thì mình không biết làm cách nào để chọn nó làm khoá chính.Phài làm sao đây, mong được giúp đỡ

nguyenthu
10-07-2003, 15:11
Có hai trường hợp :
1) Có một chương-trình nạp dữ liệu, trong chương-trình đó, trường ngày đã được chọn, đó là hàm date() nếu là Visual Basic, và dùng format ngắn.
2) Trong Access, mở cái table hoadon ra, trên trường mhd, đã chọn xong type date rồi, bên dưới chọn format (ngắn), ngoài ra Default value, bạn click vào bên phải (dấu ...), nó cho ra một cửa sổ. Bạn chọn function, thấy Date thì nhấp chuột vào: sẽ thấy hiện ra Date().
Điều này cho phép bất kỳ ai nhập dữ liệu vào, sẽ có ngày đúng như ngày họ nhập (tức ngày hôm nay).
Có thể là vậy thôi, chứ còn làm Query thì chỉ còn cách dùng Query cho database non-relational thôi, thí dụ :
"select hoadon.mhd, hoadon.mkh, hoadon.ngayxuathd, khachhang.mkh, khachhang.tenkh, khachhang.diachikh from hoadon, khachhang
where khachhang.mkh = hoadon.mkh;"
Bạn hãy thử xem ? Cách này không cần khóa primary key, hay foreign key.
Thân

nguyenthu
10-07-2003, 15:33
À quên nữa, bạn phải Insert, thì dùng :
Insert vào table khachhang trước, nó được xem như table chính, nếu một khách hàng quen thuộc thì đã có rồi, khỏi nhập.
Sau đó Insert vào table hoadon, cột mhd thì để tự nó chọn, nhớ ghi lại ngày hoadon.
Dù database nào chăng nữa, mình không thể dùng Query để Insert một lúc hai table. Trong trương hợp này, table khachhang là primary.
Thân

lttnttn
12-07-2003, 22:34
thì ngày tháng nó có thể tự động rồi đó, nhưng còn số 15 nữa thì sao?, mà số 15 nào là phải là autonumber mới được, nếu người kế tiếp nhập vào thỉ nó sẽ trở thành 16, 17, 18 .....

nguyenthu
13-07-2003, 02:10
Cái này thì phải dùng khóa kép :
Khóa kép gồm 2 trường : trường một là type Date, trường hai là type Autonumber.
Xong để tạo khóa kép gồm hai trường đó, bạn dùng CTRL+chuột nhấp vào đầu trường một và trường hai (bạn sẽ thấy hai trường được select), xong click cái chìa khóa.
Xin lỗi bạn, bây giờ đọc lại kỹ các bài mới hiểu ý bạn.
Chúc thành công.
Thân

lttnttn
13-07-2003, 15:09
vậy vừa là Date vừa là Autonumber thì phải làm sao?

nguyenthu
14-07-2003, 14:18
Bạn lttnttn,
Không có trường nào vừa là Date mà vừa là Autonumber, bạn có xem lại phần Help không ? Access không có type mà bạn muốn.
Nếu bạn muốn thì bạn phải tự viết code lấy trong một chương-trình.
Thân

lttnttn
16-07-2003, 19:40
Thì mình biết là trong bảng thì chỉ được chọn 1 kiểu dữ liệu thôi, nhưng trong query thì có thể ghép dữ liệu của hai trường lại với nhau.
Nghĩa là mình đã tạo được 20030715 trong query (mình tự tạo hai field stt(autonumber) và ngày (Date) rồi trong query mình tạo field makh=ngày+stt,) Nhưng mình không biết cách làm cho field makh trong query trở thành khoá chính như trong bảng được. Vậy phải làm sao? Mong chỉ giáo.

nguyenthu
17-07-2003, 16:47
Tôi đã làm và Query đã chạy mà bạn không làm được.
Theo tôi nghĩ thì chắc khó mà chỉ cho bạn bằng những câu Question-Response của diễn đàn được.
Vậy bạn gởi cho tôi file database của bạn ($.mdb) và Query dưới dạng Text file, tôi sẽ xem lại.
Bạn có thể xóa bớt dữ liệu và compact cái này lại trước khi gởi nếu bạn muốn.
E-mail: nguyenvanthu@swing.be
Thân

thutran1997
28-04-2016, 21:00
Cho mình hỏi nếu mình tạo 3 key thì mình có cần nói relatipnship hết cho 3 key này không?