Bài giảng Microsoft Office Access 2010 - Chương 2: Để các Query làm phép toán

pdf 259 trang huongle 5400
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Microsoft Office Access 2010 - Chương 2: Để các Query làm phép toán", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_microsoft_office_access_2010_chuong_2_de_cac_query.pdf

Nội dung text: Bài giảng Microsoft Office Access 2010 - Chương 2: Để các Query làm phép toán

  1. Chương 2: Để các Query làm phép toán 24 7 Đễ các Ọuerụ làm phép toán Những điếm chính: * Làin các pbép tính trong các Qưery ^ > iét tríj oiổh tuiiC cho phép loun # Viỉợt rci khói sô học cơ ban 'íinb íoảìi }iQ,ay tbánii và /hơi Ịùĩ>/ K Xử ỉý texl l ởĩ các biển thức Ị • Viổ! í ả t ì)iớiị ihức fĩi!ci m ijìì]'C\' tĨỊi:ì> ^ Tạo cácparcimcter query linh hoạt ^ Tinh các lổng, tổng con, giá irị !r.ir:g binu. . B lĩm cắc rccord trùng lặp êu bạn từng nhận thấy m ình làm phép toán để biết những gì N cần đặt vào một trường thì bạn đã phạm phải m ột sai sót khi thiết kế bảng. Bảng chì cần dừ liệu thô - thông tin thật sự vốn không được tín h từ dữ liệu đã biết. V í dụ, m ột bảng có thể chứa các trường Q ty và U n it Price để biểu thị bao nhiêu món hàng - và với giá nào - m ột số sản phẩm nào đó đã được đặt mua. Nhưng có m ột trường Extended Price hoặc Subtotal trong bảng thì vô dụng, bởi vì Access đủ thông m inh để tự quyết định điều đó bằng việc nhân trường Qty vđi trường ư n it Price cho ban.
  2. 24 8 Chương 2: Để các Query làm phép toán Để Access làm phép toán thì có những ưu điểm ngoài việc tiết kiệm cho bạn thời gian tự làm phép tính. Access có thể làm bất kỳ phép toán bất kể phức tạp như thế nào nhanh hơn cú nháy m ắt của bạn và các phép tính luòn đúng. Không cần bận tâm về việc gõ nhập sai một giá trị vào m ột trường Extenđed Price hoặc quên thay đổi trường sau khi bạn thay đổi các trường Qty hoặc U nit Price. H ãy để Access làm tất cả p h é p t o á n . Làm p h ép toán trong c á c Q uery Access có thể làm phép toán cho bạn trong các query, form , repoĩt và macro. Trong nhiều trường hợp, bạn nên làm phép toán trong một query, bởi vì bằng cách đó h ấ t k ỳ form, report, hoặc macro sử dụng query sẽ tư động truy cập giá trị tinh toán. Đế làm phép toán trong m ột query, bạn tạo m ột trường tính toán {calculated ĩieỉd) bên trong query. Không giống như m ột trường thông thường trong query, tên của trường tính toán không khớp vứi bất kỳ tên trường trong các bảng. Thực tế, giá trị của nó không đến trực tiếp từ bất kỳ trường trong bất kỳ bảng. Trường tính toán hiện hữu chỉ trong query. Trường tính toán bắt đầu với một tên trường theo saul à d ấ u h a i chấm và sau đó m ột biểu thức định nghĩa nội dung của trường thtío thứ tự sau đây. íieidnarne: expression trong đó Aeldnam e là bất kỳ tên mà bạn muốn (m iễn là nó khôry trùng với tên của m ột trường trong bảng) và expression là công thức cho query biết cách làm phép toán như thế nào. H ìrh 2.] m inh hoạ một query trong khung xem Design Bón t?n trường đầu tiôn ỏ' phần trên cùng củu iưứi Quory by Exam ple - Order ID, Product Nam e, Q ty và U n it Price- là các trường thông thường nhận các giá trị của chúng từ bảng Order Details hoặc bảng Products trong khung trên cùng của cửa sổ Design View. Trường cuối cùng: * * * ‘n ỉ«llt>| ^(4 • >&i ra«»fto Prwviti<«« r.iy UMHre V9T k) lá Các trường thông thưồng từ các báng Trường tính toán Hình 2.1: Cột ExtPrỉce là một ví dụ vể trường lính toán trong query
  3. Chương 2: Để các Query làm phép toán 249 ExtPr;ce, íQlyl * [Un't Prlce) là m ột trường tính toán. Tên trường là ExtPricG (viết tắt của "ex- tended price"). Biểu thức là [Qtvl * [ưnit Price], nghía là "Qty (trường quantity) nhân với trường U nit Price. H ình 2.2 m inh hoạ cùng m ột query như hình 2.1, nhưng trong khung >3m Datasheet. Chú ý hai điều về khung xem Datasheet: # Tìitờiii' ExiPnre trông Ịiốìỉg như hẩr hi’ Irrỉờnp khắc M Ciứ lỉỊ CỈIỈỢC thể biện trong CỘI RxiPricc bảng I'ởigiá trị của tnỉờng Qty nhân túi trường Uiìií Piice Irong mỗi cột. V-. F. .1 ư M'A 5í»fỉ / R iíi sort Õ Sniff 9 ^ c ty ’ b Í A ) . Q ^ $H0 Ị ^ Otd«tO(lailỉ 13 Oid Time StocK Ticier 1 S 5 0 C .C C S5C0. I J 2 L ôw r HarTíỉrìgO i 13 Lawn fÍ3(7iingo 1 Sí9.w < ĩ SềUn»Kfti1í5 14 Lđvvrt K3fTifftgo 3 * J Siỉ(ei.ộOkjỡ 1 Scar^nercdOle : S9.'J8 Ỉ5 Á *5 :òr ie' $ ' 9 8 S*^ J V b^oi. . í 0 M I z r o \. av« ' D'V Ế r s?.25 09 SU9. < o n t 4 đ J . 2 LuCky tS^POĩ s ' 99 S‘3 * ustftcn«t lOữL,. i 12 Lu<VYRjob*t5Ppo: S7,9$ Í 7 i F k « » ồ ^ 0 9 9 S.4 \ J ỷ Orae« ỮHsiit 1 Ì 1 - . - . . Hình 2.2: Query từ hinh 2.1 trang khung xem Oatastieet. M ặ c d ũ C Ộ I ExiPrice Irong khutig x e m DaLasiieei tròng giồng như trường thông thường, nhưng nó không có hành vi chính xác như trường thông thường. Nếu bạn cố thay đổi nội dung cùa trường ExtPrice, Access sẽ khòng cho bạn làm điều này. Nội dung của trường ExtPrice trong query này luôn thể hiện sô” lượng (quantity) nhân với giá đơn vị (unit price) và không thể hiện bất cứ điều gì khác, bdi vì nó là một trường tính toán. Tuy nhiên, nếu bạn thay đổi trường Qty hoặc trường ư nit Price trong bất kỳ record, trường ExtPrice ngay tức thì và tự động thay đối để thể hiện đúng kết quả dựa vào thay đổi của bạn. Nếu (ví dụ) bạn thay đổi trường Q ty trong record đầu tiên trong hình 2.1 từ 1 thành 2, trường ExtPrice cho record đó hiển thị $200.00.
  4. 250___ Chường 2: Để các Query làm phép toán Làm theo các bước sau đây để tạo các trường tính toán trong các q u e r y : 1. Tạo m ột select query bình thường như bất kỳ select query được m inh hoạ trong chương 1 của phần này. 2. Thêm bất kỳ trường m à bạn muốh query hiển thị vào hàng Field của lưới QBE. 3. Để thêm m ột trường tính toán, chọn bất kỳ cột rỗng, gõ nhập tên trường m ới duy nhất vào hàng Field, theo sau là dấu hai chấm (:) và biểu thức thực thi phép tính. Những gi bạn có được sẽ trông giống như trường tính toán ExtPrice đượo n in h hoạ trong b ìrh 2.1 Phóng to các biếu thức ^ Không gian bé nhỏ được cho trong hàng Fieỉd của lưới Q BE không hẳn làm cho việc gõ nhập các biểu thức dài trở nên dễ dàng. Thực tế text có thể rất nhỏ, bạn khó thây thậm chí khi gõ nhập m ột biểu' thức n g ắ n . Để thấy những gì bạn đang gõ nhập, nhấn Shift+ F2 trong khi cursor nằm trong trường tính toán hoặc nhấp phải trường tính toán và chọn tuỳ chọn Zoom từ menu tắt. Hộp thoại Zoom m ở ra cho thấy những g". bạn đã gõ nhập vào trường (nếu có). Bạn có thể sử dụng tất cả phím và kỹ thuật biên tập text chuẩn của W indows để gõ nhập biểu thức. V í dụ nhấn phím End đế di chuyển nhanh cursor đến cuối biểu thức. Để làm cho texl dễ đọc hơn, nhấp nút Pont. Trong hộp thoại Pont, vừa m ở ra, chọn m ột kích cờ font lớn hơn và sau đó nhấp O K tróng họp thoại Foíit đe châp nhận sự thay đổi. Gõ nhập biểu tliức và sau đó nháp O K trong hộp thoại Zoom để sao chép biểu thức vào trường tính toán trong lưới QBE. Query có thể chứa bất kỳ số trường tính toán- bạn không giới hạn chỉ có m ột hoặc hai trường tính toán. D ĩ nhiên, vấn đề quan trọng là biết cách viết biểu thức. K h i viết các biểu thức, các khả năng hấu như vô tận. Nhưng có m ột số^ công cụ cơ bản và quy tắc nhằm giúp bạn tạo bất kỳ biểu thức như được thảo luận tiếp theo. Viết các biểu thức trong Access M ột biểu thức (expression) cho Access biết cách thực thi m ột số phép tính như thế nào. M ột biểu thức có thể chứa các toán tử tên trường, text trực kiện (literal) hoặc tất cả chúng ■ và cũng có thể sử dụng bất kỳ hàm cài săn của Access. Các hàm cài sẵn có thể gây kinh ngạc, nhưng nếu bạn thực thi chúng m ỗi lần m ột bước, bạn sẽ sớm tao chúng m ột cách chuyên nghiệp.
  5. Chương 2: Đểc á c I ỉu e r y là m phép t o á n ___ 25 1 QỆX U ỷ 1 - Tponq tkii^l nqơ Ac ss, Icxl trực kiĩ?fì nqkla lò Ỉ€>ct vẾn kfiồnq pkòi lên riio m^l ỈPƯỎnq nào ẩó kocỊc ắối lượniỊ l^kác. Tron hoỉ- (.uầcife i/iộ ,í-ô''êii ỉ'-''ì \ r i v l :'5 một luỹ thừa xác định) ■*', P hép nhân, phép clũa 5*6/3 tr ả về 10 + • P h é p c ộ n g , phép trừ 6+6-2 trả về 10 Ohép chuỗi ( i’õi các CỊini "HííUo" & "Tbere" trả tcxt lai với nhau) về HplloThoro Thứ tự ưii tiên m à các toán tử tuân theo có thế là m ột "vấn đề" thật sự nốu bạnkhỏng cẩn thận. ílảy xem biốuthức ílơn giản sau đây bao gỏm môt toán tử cộng (+) và một toán tử nhân í*). 5+3'2 Khi làm phép toán này, bạn có đươc 16 hay 11? Nếu bạn làm phép cộng trươc tiên (5+3 -=8) rồi đến pháp nhán (2 8), kết quả bạn có 16. Nhưng nếu bạn làm phép nhân trước tiên (3*2 =6) rồi đến phép cộng (6 -I- 5) thi kết quá bạn có 11. Vặy thì dảu la iời giải đảp đúng, 11 hay 16? Chịu thua? 11 là lời giải đáp đúng (và ỉà lời giải đáp m à Access đưa ra) bởi vì các quy tắc thứ tự ưu tiên phát biểu rằng phép nhân và phép chia luôn được thực thi trước phép cộng hoặc phép trừ. Phép nhân và phép chia có cùng một thứ tự ưu tiên. N ế u m ột biểu thức bao gồm cả hai phép toán này, chúng được thực thi theo thứ tự từ trái sang phải. Trong biểu thức sau đây, phép chia xảy ra trước tiên, bởi vì nó nằm bên trái phép nhân: 10/5’ 3
  6. 252___ Chơúng 2: Để các Query làm phép toán K ết quả của biểu thức là 6, bởi vì 10 chia cho 5 là 2, và 2 nhân 3 bằng 6. Phép cộng và phép trừ làm việc cùng một cách. Nếu m ột biểu thức bao gồm cả phép cộng và phép trừ, các phép tính xảy ra theo thứ từ từ trái sang phải. Bạn có thể điều khiển thứ tự ưu tiên bằng cách sử dụng các dấu ngoặc đơn. Access luôn làm việc từ các dâu ngoặc đơn tận cùng bên trong sang các dâu ngoặc đơn tận cùng bên ngoài. Biểu thức sau đây là m ộ t v í d ụ . 5^2+ ((5-1) ' 3) K hi do’i rrặt \ ớ i b’ểii tbứn nèy, Access di vào bên trcn^r các dấu ngoặc đơn tận cùng bên trong trước tiên (5-1) và làm phép tính đó. Dơ đó biểu thức trở thành 5^2+ (4*3) Tiếp theo Access tính cặp dấu ngoặc đơn còn lại trong biểu thức (4*3). Trong giây lát biểu thức trở thành 5''2+12 Bôi vì không còn các dấu ngoặc đơn nữa, Access sử dụng thứ tự ưu tiên binh thường để làm phép tính còn lại. Phép m ũ hoá có m ột thứ tự ưu tiên cao hơn phép cộng, do đó trong giây lát biểu thức trở thành 25+12 Sau đó Access làm phép tính cuôl cùng và trả về kết quả 37. THÔNG TIN KỶ THUẬT Nếu bạn là một chuyên gia toán học thật sự, bạn sẽ dáiìh giá cno rồng th ê m ha i toán tử có cùng thứ cự líu tiên như p h é p nhân và phép chirì. Một là toán tử \, trả về chỉ phần sô' nguyên của mộc thương và mộr toán tử ỉà MOD (cho moduỉo), trá về chỉ số dư sau khi chia. Ví dụ, trong khi 16/3 (phép chia bình thường) trả về 5.3333, 16\3 trả về 5, và 16 M OD 3 trả về I. Các tên trường trong các biểu thức Nếu bạn đang nghĩ "Có lẽ tôi có thể làm các phép tính trước dó trên m áy tính $2.00 của m ình", điều đó chắc chắn đúng. Nhưng các biểu thức Access không giới hạn chỉ trong các số và toán tử. Bạn có thể sử dụng các tên trường trong các biểu thức để làm phép toán trên dữ liệu được lưu trữ trong các trường. Query mẫu được m inh hoạở đầu chương nắy sử dụng các tên trường [Qty] * [ưnit Price] để nhân giá trị trong trường ư n it Price với giá trị trong trường Qty.
  7. Chướng 2: Để các Query làm phép toán___ ___ 253 Vế m ặt kỹ thuật, bạn chỉ cần đặt các tên trường trong các dấu ngoặc vuông khi tên trường chứa một khoảng ti'ống như trong [U nit Price]. Nliưng bạn có thể đặt các dâu ngoặc vuóng xung quanh bâ^t kỳ tên trường, để phòng hờ. Để đạt được tính nhâ^t quán và để làm cho các tèn trường trong các biểu thức nổi bật - chúng sẽ luôn được đật trong các c^ấu ngoặc vuông qua suô”t sách nàv. Biểu thức mẫu được m inh hoa trong query đầu tiên ở đầu chương nay, [Qt} ] * íư rát Price] là niột ví dụ cơ bản cùa việc sử dụng các tên trường trong các biểu thức. Biếu thức đơn giản có nghĩa là "nội dung của trường Qty trong record này nhân với nội dung của trường ư nit Price trong cùng một record nàv”. Sử dụng các hàm trong các biếu thức M ột biểu thức Access cũng có thế chứa bất kỳ sô hàm. M ột hàm (íur.ction; hơi giồng như một toán từ trong (tó nó thực thi một phép tính nào đó và sau đó trở về mọt giá trị nào đó. Nhưng cách bạn sử ]ụng niột hàm t.hì khác. M ọi hàm có một tên theo sau là một cặp dâu rgoặ'- 'lc'n dụ, hàin Date() luún trẩ về ngày tháng hiện bành. N hiều hàm châp nhận các đối số (argument) được đặt bên trong các dấu ngoặc đơn. Đé’ tíiih cảii bậc hai cùa Hiộu số, bạn sư dụng m ột hàm Sqr{). H àm Sqrí) chấp nhận m ột tham số’ - m ột sô”, tên của m ột trường hoặc m ột biểu thức chứa m ột số. Hàm Sqr() trả về cãn bậc hai của bất Kỳ giá trị nào chuyến đến nó dưới dạng m ột đô”i sô'. '•'í iu , biêu th.ĩc s lu đâ" tn l \ ề 9 bởi v'. că1 'oậc h ai cùa 81 ’à 9 (tớ- \ì 9 nliùn 9 bằng 8 ĩ). Trong ví diỊ náy, chùng ca sử dụng một. số làm đối sỏ” cho hàm SqrO' S q r (8 1 ) Chu ý ràng trong ví dụ. chúng La sử dụng 81 làm dối áo cbo hàm SqrO- M ột cách khác để phát biểu răng là chúng ta chuyền số 81 đến Jối số. Nó» cách khác, từ "cbuvển" trong ng’jf cảnh nàv có Dghĩa là sử .ìụng làm m ột đô”i số^ trong m ột hàm. Hàm Sqr{) sau đây sử dụng m ôt biểu thức 5*20 làm đô'i số’ của nó: S q r (5*20) Bời vì biểu thức 5*20 nằm bên trong các dấu ngoặc đơn, phép nhân xảy ra trước tiên. Trong giây lát, hàm trở thành Sqr(lOO). Sau đó Sqr(lOO) trả về 10, bdi vì 10 là căn bậc hai của 100. Bạn cũng có thể sử dụng các tên trường trong các hàm . G iả sử bạn có m ột bảng chứa m ột trường số có tên là bigNum ber. Hàm SqrO sau đây trả về căn bậc hai của bất kỳ giá trị nào được lưu trữ trong trường b ig N u m b e r :
  8. 254 Chưđng 2: Để các Query làm phép toán Sqr((bỉgNumber]) H àng chục hàm được cài sẵn vào Access. Thực tế, nhớ tất cả hàm thì gần như không thể được. Bạn nên dò tìm các hàm khi cần, sử dụng Expression Builder làm hướng dẫn. Expression Builder là gì? Hây tiếp tục đọc và khám phá. Sử dụng Expressioxi Builder Expression Builder là m ột cồng cụ giúp bạn viết các biểu thức có ý nghĩa, sử dụng bất kỳ tổ hợp toán tử, tên trường và hàm. Để sử dụng Expression Builder trong khi tạo một trường tính toán trong một query, làm theo những bước sau đây: 1. Nếu bạn chưa liủa query hiện hành, hãy làm bây giờ để đặt tôji cho nó (nhấn Ctrl+ S, gõ nhập m ột tên cho query trong hộp thoại Save và nhấp OK). 2. Gõ nhập m ột tên trường mới theo sau là dấu hai chấm (;) trong- hàng Field của một cột rỗng trong lưới QBE. Lưới Query by Exam ple còn được gọi là lưới Q BE nằm ở khung đáy của cửa sổ Design View. Để biết thêm chi tiết về lưới Q BE (và ngôi nhà yêu dâu của nó, cửa sổ Design View ), xem chươiig 1 của phần này. 3. Nhấp phải không gian trống nằm bên phải dấu hai chấm m à bạn vừa gõ nhập và chọn tuỳ chọn Build từ menu tắt hoặc nhấp nút Builđ trên tab Design trên Ribbon. Expression Builder mờ ra, trông giống như hình 2.3. B át kỹ text mà bạn đà gõ nhập vào lưới QBE đã nằm trong Expression B u i l d e r . Expfe$$ion BuKtUr Cancel Ị Hình 2.3: Expression Builder. /*&[■> | And QrNotLfttf ( ) | P a ste ^ I (S Tabíẻv Qưerieí ịo ty i U r A P r k v t£3F(xms •ExtPrice Ị±] ReporCỉ ( ă F g n c tw s Q Coo5tafrt$ i C]Operdtori i 1 C2 Common £xpre$siỡn$ ì ÌL.ì
  9. Chương 2: Để các Ouery làm phép toán 255 Bên trong Expression Bviilder. 'V-Ùng tràng ló'n ở trên cùng là nơi bạn soạn biểu thức như được m inh hoạ trong hình2 A . Bạn có thể gõ nhập và biên tập trong vùng lớn đó sử dụng bàn phím và tất cả kỹ thuật biên tập W indows chuẩn. Hoặc sừ dụng các hàm và folder bên dưới vùng trắng để xây dựng m ột biểu thức mà không cần gõ nhập. Polđer tên query Biểu thức Cac nút tửán tử ExpreMloii Builcter E x ì P ĩ K t i ^ f i c e ] | ( -1 Ur>ỉo -CjQuéíy2 A Abs S ] Tỉbỉes Arrâv5 .Aln ÍÌÌCỳM^i Conv«r$hjn ịco s : t X Q Ê } F-5rfr.í O ^iệỊĩìíĩ^ R x AọQregỉỉe ĩnt Gj Fírtr»íjf. Er ộr -ỉ^ ^ -g l í<2 Pnârm id -Ê ịQ S B n s s g G tnerd ftoun<d IrispeíU^n Sgn rAaih AbUnunbciỉ Các hàm càỉ sẳn I Các hàm toán học 'đirợr chọn) I Các hạng m ực hàm (mâth đưỢc chọn) H ĩnh 2.^: Cac ;uy tlì^n chỉn.i dể tạo bỉỄu ;hưc trcny cát. tiưcng t.nlì ỉoátì củj một query. KìiOng phải m ọi thử cho Expression Builder đều hướng đến việc tạo các biểu thức cho các query. M ột số^ tính năng của Expression Builder thícb hợp hơn cho việc tạo các biểu thức trong các form và repcrt. K hi bạn làm việc với query, những điều chính mà bạn muốn tập trung vào n h ư s a u : * Các mít toán tử Nhấp bất kỳ ììútnàvđểchèn một toán tử vào biểií thức. 9 Tên query: Hiển thị tên của qtiery đang mờ. Khi bạn nhấp tên query, các trííờng từ qiiery đó xiiất hiện trong cột giữa. Việc nhấp một tên tníờng trong cột giữa đó sẽ Ihêm lên vào biềii tbĩỉc.
  10. 256 Chương 2; Để các Query làm phép toán trong cột giữa để thấy tất cả hàm trong cột thứ ba). Các hàm cho hạng mục đó xuât hiện trong cột thứ ba. 4. Trong cột thứ ba, nhấp tên của hàm mà bạn muốn tìm hiểu t h ê m . 5. Nhâ'p nút Help ô bên phải trên cùng Expression Builder. Cửa sổ Help cho hàm đó mở ra. Nếu bạn không thấy sự trợ giúp cụ thể cho hàm, gõ nhập tên hàm vào hộp search của Access Help. Các hàm được liệt kê theo loại trong hệ thống Help, do đó
  11. Chơdng 2: Để các Query làm phép toán___ ___ 25 7 n ế u D ạ n c ầ n cìm m ột hani trorig h.ệ thcng Help, bạ^i sé ^hấy nhaiih hơn nếu bạn biết nó là một hàm Pinancial (tài chính), c h ẳ n g h ạ n V í dụ, chọn hạng mục Financial của hàm ở cột giừa, nháp hàm PV trong cột thứ ba và sau đó nhấp nút Help. Trang H elp m ờ ra không chỉ mô tả chức năng của hàm PV mà còn mô tả cú pháp cần thiêt để sử dụng hàm . Cú pháp (syntax) của một hàm mô tả thông tin nào mà bạn cắn cíiuyỉỉn (cung cấp) cho hàin đê iiàm lárn phép tính của Íi6 \ à ti ả vè m ột kết quả. Cú pháp cho m ột hàm trông như sau: functionName(arg1, arg2, [argS]) trong đó functionNam e là tên của hàm và argl, arg2, và arg3 tượng trưng cho các dối số mà hàm chấp nhận. Số đôi sô^ mà m ột hàm chấp nhận thay đối. M ột sõ hàm không đòi hói các đối số, những hàm khác đòi hỏi nhiều đối số. Nếu một hàm chấp nhận hai hoặc nhiều đố’i sồ”, chún^í pbảj được tách biệt bằng một dâu phẩy. 3 í't ky tên đò'i số tr:>r.g các dấu j)goặc vuông thi ';uỳ chọn, nghĩa ].à ban có thê bô qua toàn bộ đôi sô" nếu muôn. C/tio Jù ixjn sử duri<^ một Ỉối SỂ fui) rliQii [iaij kL^nq, kkônq kuo qiò CỊÕ Iiíiộp cóc Jđu ngotỊc vuônq vòo hàm. M ột hàm luôr. (tượr thí.o sau bằJig các đấu ngoặc đcín - thậm chí nếu hãm không chấp nhận các đối sô. Now(), Sqr(81), và PV(apr, TotPm ts, Incorací.t là các ví dụ về cú pháp ham tií/p !ệ. Cũng chu ý ràng khi gó nhập mội; đối số, bạn có thể sử dụng một giá trị trực kiện (như tên ' Sm itl;" hoặc sú i.0), ìTiội tên ưườa^, ÍÌ(Ạ‘ inụt biểa thức Lun đối sô. 3& biểu thức sau đây đêu chuyển các giá tĩ'ị trực kiện (literal) đên các hàm '.■ỏa c h ú n g : Sqr{100) PV(.035,120,250) UCase("howdy’') Ba đôì số thứ ba đều chuyển dữ ỉiệu từ các trường đến hàm (m iễn là Hypot, Apr, M onths, Am ount và Com pany là tên của các trường trong query hiện hành): Sqr([Hypot]) PV([Apr],[Months],[Amount])
  12. 258 Chương 2: Để các Query làm phép toán UCase([Company]) Trong các ví dụ tiếp theo, bạn sử dụng các biểu thức làm đôl số: Sqr(227 ' [Hypũt]) PV([Apr]/12,[Moíiths]*12,-r[Amount]) UCase([First Name] & " " Ẵ [Last WameỊ) Khả năng chuyển giá trị trực kiện, các tên trường và/hoặc biểu thứr đến các hàm sẽ m ang đến cho bạn nhiều sự lin h hoạt. Bàn về text trong các dấu ngoộc K h i sử dung các nút á nửa dưới của Expression Builder ôể chèn text vào biểu thức, text đó thường bao gồm các placeholđer - text trong các dâu ngoặc góc ( ). Bạn có thể thâV các placeholder, chẳng hạn nhu' , , , hoặc m ọt thứ gì đó kỳ quặc trong Ẽxpres- sion Builder. Tùìig thứ có dấu ngoặc này la m ột placehõlder cho m^ọt đối số m à bạn cần gõ nhập vào. Nếu một placeholder tượng trưng cho m ột đối số tuỳ chọn và ban không dự định sử đụng đôl sô" đó, bạn chỉ việc xoá placehoỉder. Nhưng nếu placeholder tựợng trưiig cho một đối số bắt buộc thì bạn cần thay thế placeholder bằng giá trị hợp lệ. Sử dụng thường xuyên tính năng Help khi làm việc với các hàm thì rất quan trọng. xếp lồng các hàm ^ Bạn có thể xêp lồng (nest)các hàxn, nghĩa là bạn có thế’đật m ộ t h à m bên trong m ột hàm khác. Bởi vì Access luôn làm 'việc từ các dấu ngoậc đơn tậr cùng bên trong hướng ra hên ngoài, hàm bên trong luôn đươ!l tính trước tiên. V í dụ, hàm DateO luôn trả về ngày tháng hiện hành (Nó không đòi hỏi các đối số). Hàm W eekDay() chấp nhận bat kỳ ngay tháng là m ột đôi số, nghĩa là cú pháp của nó trông như sau: WeekDay(date) Bởi vì hàm DateO luôn trả về m ột ngày tháng, bạn có thể sử dung nó làm đối sô' cho hàm W eekDay(). Biểu thức hoá ra ià WeekDay(Date{)) M ột số giữa 1 và 7 trả về, biểu thị ngày hôm nay trong tuần là ngày mấy. V í dụ nếu ngày tháng hiện hành là thứ 23 và ngày đó là ngày thứ ba (Tuesday), hàm W eekDay() trả về số 3. (Ngày ĩ là Sunday (chu nhật), ngày 2 là thứ hai (Monday),,,.)
  13. Chương 2: Để các Query iàm phép toán 259 Vưọrỉ ngoài ra khỏi sò học ctf bản Phần đầu của chương này đã nói về cách sử dụng các toán tử +, * và / trong các biểu thức đê thực thi số học đơn giản. Như bạn biêt, không phải tất cả phép toán đều đơn giản như thế. M ột số phép toán đòi hỏi nhiều hơn cả phép cộng, phép trừ. phép nhân và phép chia. Access cung cấp nhiều hàm toán học và tài chính để giúp bạn xử lý phóp tnán phức tạp hơn. Những- hàm này fĩều thao tác trên các số. V í dụ, các hàm phép toán bao gồra CosO {cosineA TanO (tangent), và Atn(; (arctangent), phòng hờ bạn cần làm phép lượng giác học trong các query. Các hàm tài chính bao gồm nhừng thứ chẳng hạn như IRRO (tỉ saất lợi nhuận nội tại), Fv() {giá trị tương lai), DdbO (khấu hao gấp đôi tỉ lệ số dư giảm ). Có thể bạn không cần các hàm tài chính trừ phi công việc của bạn cụ thể đòi hỏi các loại phép tính đó. Thay vì liệt kê tất cả hàm cho phép bạn làm phép toán sỏ’ học, bảng 2.2 liệ t kê m ột vài ví dụ để giúp Dạn cảm nhận được chúng làm việc như thế nào. Bảng 2.2 Các ví lỉụ vể các hàm toán liọu và hàm tài chính cài sẩn H im ' à C'í jháp Trả về Ví dụ Ajs(number) Giá trị tuyệt đối (các số âmAbs(-l) trả về chuyến đồi íhãnn các sô’ dương). ín t (Qumber) Phần số nguyên của một số Int (99.9) trả về 99 Round(nuraber G iá t r ị sô nuinber được Roundd.56789, 2) trả về 1.57 í,il !CÌniil.‘' 1.' làn tròr thènh inị t hàng' chữ .‘jố tliập i-hầrỉ xic địnli (decimals). pjnt{rau-., Iiper, Kĩioán tnanh toán treii i^mU.05S/12, 3u*i2. -bOOOO) pv[, fvl , typeJ1) một klioản vay hoặc trả về 293.3763 (khoảii thanh U K -n k - ir . toan trần niộ: kh'jà-i /ay $50.000 trồn 30 năm vơi lãi suất 5.8%). Mế»j iđ n oư ó'l kiị íìòiT» froi>9 [ÌApiesỉkn B u iM c r, hõ4 nliớ ix^n C Ế \ịìể tìm Iđ l cồ cki tiếf mồ c ầ r ì Ircnq liệ iíiỂnq Help. Định dạng các số tính toán trong các query Khi bạn tạo một bảng và định nghĩa một trường là loại dữ liệu Num ber, bạn có thể chọn một định dạng, chẳng hạn như Currency để hiển thị số đó. Trong m ột query, bạn không định nghĩa sẵn loại dữ liệu của m ột trường. Số xuất hiện như là kết quả của phép tính thường được hiển thị dưới dạng m ột sô” General- không dâu đôla, không số hàng chữ số thập phân cô^ định.
  14. 260 Chướng 2; Để các Query làm phép toán H ình 2.5 m inh hoạ m ột query dựa vào m ột bảng giả thuyết có tên là Loan Scenarios. Bên trong bảng Loan Scenarios, A PR (annual per- centage rate - tỉ lệ phân trảm hàng năm) là một trường Num ber với thuộc tính Porm at của nó được xác lập sang Percent. Trường LoanAm out là m ột trường Num ber với thuộc tính Form at của nó được xác lập sang Currency. Những định dạng này mang sang trong các kết quả của query (khung xem Datasheet của query). Nhưng kết quả của trường M onthlyPaym ent tính toán hiển thị dưới dạng một số General không có dấu tiền tệ, không có các dấu phẩy và nhiều số^ nằm bên phải dếu thập phân, như bạn thấy ở nửa dưới cùa hình 2.5. Định dạng tỉển tệ (currency) t r o n g bènọ Định dạny phẩn trảm (percent) trong bàng Trường tính toán Mi! „ rttiộ g g Lo «vAf\» J1J M.) rttM » 1) n t r t ỉTìi i J {tcft'íj *J ĩ i Ti&k' .8áfi s j - k^J CArp-u c r !<r APR • Yeơỉs LoứnArnoíim • |s.s% 15 SlOO-000 871.107365297366 7.0% 30 $100.000 6.3H lit $150.000 1306.66104794605 7.0% 30 S150.00C 957.95374276S774 6,5% 15 $200.000 1742.21473059473 7.0% 30 $200,000 J330.60*199035S36 Hình 2.5: Các trường tínỉi toán thường hiển thị bằng dịnh dạng sa' General. Bạn có thể định dạng một trường tính toán sao cho kết quả xuất hiện trong định dạng Currency bằng hai cách. Nếu bạn dự định tạo bất kỳ form hoặc report dựa vào query này, bạn chỉ việc ìưu query và quên đi việc định dạng trường. Sau đó khi thiết kế mọt form hoặc report dựa vào query, bạn tạo một control cho trường tính toán như ban thường làm với bất kỳ trường khác trong query. Sau đó xác lập thuộc tính Form at của control đó sang định dạng Currency trong form hoặc
  15. Chương 2: Để các Query làm phép toán ___ ___ 261 report- Dũ ]íệu trông gióng n;.iL. Iihửiig gi oạn m ong .nuôn tiong foim hoặc report. và bạn không cần phải vọc sửa querj' nữa. Tham kháo chéo Xem chương 1 của phần IV ẩ ể biếc clìi tiết về việc tạo các fonn và report. Xem phần về việc xác lập các thuộc tính control trong chương 2 của phần IV để biết chi tiết về việc định dạng các controỉ. (Tuv ý'., nếu bạn kỉiông có ý định tạo bấi k}' íorm hoặc report dựa vào query thì bạn có thể sử dụng một trong các hàm chuyển đổi để định dạng dữ liệu. Các hàm chuyển đổi được liệt kê trong bảng 2.3. Chúng đều có thể truy cập được qua hạng mục Conversion của íolder Built-In Punctions trong Expression Builder. Như thường lệ, bạn có thè nhấp một tên hàm chuyển đổi Lrong cột thứ ba của Expression Builder, và sau đó nhấp nút Help để biết thêm thông tin về hàm. Bảng 2.3 Các hàm chuyển đấi cài săn chính H à m Loại biểu thức Loại trả về có thể rhâ'p nhặn CBocI(oxpression) String hoặc number B o o le a n c N a n ib e r vù 0 đ o n 2í35 B y te CCưr(expression) N u m b e r C u r r e n c y CDate(tìxpression) D a te /T in * e D a te CDbl(expression) N u m b e r D o u b le C D i c(axpie:.s:Oi*) Sun.hv.r D « ;cim al CiiiUtỉX]>rossionj Số nguyêiỉ cố tù -32,768 in t e g e r đến 32 7fi7 CLng(expiessiou) S ố n g u y ê n L o n g C:’ìUq:( Ỉx^)r ?s5i*>r. > Num ber Rir.g)e c Slr( expr»^s s io n ) B ấ t k ỳ S t r in g CVaAexpression; B ấ t k ỳ V a r ia iit fíẵy nghĩ về chữ đẩuc trong tên của m ố i hàm chuyển đối là đại diện cho "Convert to” (chuyển đổi thành). V í dụ, CCur có nghia là "Convert to Currency". lo n * ' 4 M đ ij r.đn ik ộ n Liii Siỉ li iođn. Xđc liịp ểịnli dọng cJa Ipưdng iính loón tponq mệt íoPiTỉ koộc P€pOỉ*t iịìOiẬ vl ipực liếp i^cn q quePkị 1Ỉ)Ì líiư ònq dề kcn. Mẹo quan trọng là đặt toàn bộ biểu thức (bất cứ những gì nằm bên phải tên trường và dấu hai chấm ) bên trong các dâu ngoặc đơn của hàm
  16. 26 2 Chương 2: Dể các Query làm phép toán chuyển đổi trong lưới Q BE. V í dụ, để hiển thị trường M onthlyPaym ent từ query Loan Scenarios m ầu dưới dạng dữ liệu Currency, toàn bộ biểu thức phải chứa bên trong dấu ngoặc đơn CCurO như trong biểu thức s a u đ â y ; MonthlyPaymeíit: CCur( Pmt([APR]/12. [Years]’ 12, - [LoanAmount])) H ình 2.6 m inh hoạ kết quả của việc sử dụng CCurO trong control tính toán M onthlyPaym ent để hiển thị kết quẩ cua biểu thức bằng đinh dạng Currency. Trường tính toán 162. riekt voị V 'lim Ị C I 0 Mf>r í . W í w i i h > í cí./iHraiydỉii/i •;»ị/ . » ( ctHỊi f«cir :«ifi ictr>*ne I l0Ar&fmi'i9 > Ị"! S2DO.OOC Sl.330.61 L Monthly payment (khoản thanh toán hàng tháng) trong khung xem datasheeỉ Hình 2.6; Các phép tính Monthíy Paytìienỉ ỡưực thể hiện bằng định dạng Currency. Tránh các vân đề với những giá trị rỗng ^ Đôi^khi m ột trường trong một record có thể rỗng bởi vì không ai tưng go nhạp bât kỳ thông tin nào vào trường đó. Tên chính thức được sử dụng để mô tả giá trị của m ột trường trống là null. Nếu m ọt trường không chứa gì cả, chúng ta nói rằng nó chứa một giá trị rỗng (null) Các phép toán không tự động xem m ột giá trị rỗng là 0 {zero) Nếu bất kỳ trường trong raột trường tính toán chứa m ột giá trị rong thì ban thân biểu thức cũng trả về giá trị rỗng. Trong hình 2.7, trường tm h toán SubTotal nhân nội dung của trường HowM any với trường Price.
  17. Chướng 2: Để các Ouery làm phép toán 263 Trong cãc kếi; quj quer> cược m inh hod 3 cuô"i hình 2.7, bât kỹ' trường có m ột giá trị rỗ-ig trong trường HowM any hoặc Príce cũng kêt thúc với m ột giá trị rồng trong trường SubTotal. Sừ dụng hàm Nz() đế chuyển đổi một giá trị rỗng thành m ột giá trị zero. Những gì Nz() thật sự có nghĩa là "nếu trường chứa m ột giá trị rỗng thì hăj’ làm cho giá trị đó trở thành m ột giá trị zero và làm phép tinh sử dụng zero đó". Đê’ sử đụng hàm Nz(), đật toàn bộ tên trường bên tror.g cãc dồJ ngoặc don câa lià.n. Tio)ig l.ìuh 2.8, trưừng tính tcán được chỉnh sửa sử dụng biểu thức sau đây; SubTotal: Nz( [HowManyj ) * Nz( [Price] Trường tính toán / ìũ HowKfa'iy Pt:c« Ho ví/ari. t4l 1di T dtle; NuliNull v»lu« D«moD V«1UC Otmo Sorti Shộ.y. ị p ] or. í. ^ 3 Siao.oo IX 1 S30.00 10 ỉ MlO.ỈO ÍÌO.QQ * Kết quá tính toán rống Hình 2.7; Các trường rỗng Irong mộỉ bảng làm cho các ptiép tinh trên các trường dó cũng rồng. Trong khung xem Datasheet của cùng m ột query đó được m inh hoạ ở cuối hình 2.8, các record chứa m ột trường How M any hoặc Price rỗng dẫn đến m ột kết quả zero thay vì rỗng trong trường SubTotal. Đól à d o control tính toán được chỉnh sửa yêu cầu Access sử dụng một giá trị zero thay vì không ^ cả (một giá trị rỗng) để làm phép toán khi một trường rỗng.
  18. 264 Chương 2: Để các Query làtn phép toán Trường tinh toán đưỢc chinh sửa Nvil O^RÌÍi V ro Hi)wM«ny P r ic « fielđ* H o w M ỉ n y P t t ĩ t SubToUk MzịỉHov.M&ny]i*N24Pfic«í) .T. Tabf«: NgH v«(ue D ề 14, bởi vì có 14 ngày giữa 15 tháng giêng m 1 thảng giêng. ^ Nếu bạn cộng một số với hoặc lãỳ một ngày tháng trừ cho một 5^ bạn có đtỉỢc m ột ngày tháng m ớit h a y vì m ột số. Ngày tháng
  19. Chương 2: Đê’ các Oụery làm phép toán 265 mới ứó là ìip/iy cách n tư nịày ibdng goc 0 í5ft/'ệ<n "ỈM Tỉ& le P9r<Tin)eC Sosị iriữw: □ ĨE n C n t « n a o r £nố • yâv!3e: Ịl/ 1/2007 A 1/’1V ?007 u Ự 3C /Ỉ007 X/ÌC/2CC7 1/2C/:0C7 10 Ỉ/Í/2 0 C 7 L/2:/2CC<i ư 3 : / : o a ? n c ổ 2/15/20C7 in ỉ2 0 C 7 S/ỈC/20C7 210 9/14/2007 1, ĩ / : c c s ì :/31/2CCS 1/15/2CC9 1/1/2CC5 l/i/2 0 1 0 ỉ€5 l/ie/2 Ũ iC * Khung xem Datasheet Hình 2.9 Các trường tính toán mẫu với các hàm Date trong một query Irong khung xem Design và khung xem Datasheet
  20. 266 Chương 2: Để các Query làm phép toán Sử dụng các ngày tháng và thời gian trực kiện trong các biểu thức K h i viết các biểu thức bao gồm các ngày tháng, bạn có thể sử dụng các ngày tháng trực kiện trái với tên của trường chứa m ột giá trị Date/ Time. Ngày tháng trực kiện là ngày tháng không đưỢc \ư u trữ trong một trường nào đó - nó chỉ là m ột trường riêng biệt m à bạn vẫn muôn sử dụng trong biểu thức. Nhưng bạn không thể chỉ việc gõ nhập ngày tháng sử dụng m ột định dạng hàng ngày như 12/21/2005 bdi vì Access hiểu ngày tháng đó là "12 chia cho 31, chia 2005". Bạn không thể sử dụng các dấu ngoặc kép bởi vì các dấu ngoặc kép đó được sử dụng để định nghĩa text trực kiện. Thay vào đó bạn phải sử dụiig ký tự # để phân cách (bao quanh) m ột ngày tháng trực kiện. V ì dụ, #C1/01/2005# thật sụ là cháng giêng, ngày O í, 2005. Biểu thức #01/01/200õ# + 14 vrả về i/i5/2005, ngày tháng vôn là 14 ngày sau tháng giêng ngày 1, 2005. biểu thức #3/31/2005# - # l/l/2005# trả về 89 bdi vì tháng 3 ngày 31, 2005 là 89 ngày sau tháng giêng ngày 1, 2005. Để biểu diễn m ột thời gian trực kiện, sử dụng các dấu hai chấm (:) tách biệt các giờ, phút và giây giữa các dấu phân cách #. Bạn cũng có thể thêm m ột khoảng trống theo sau là A M hoặc PM . V í dụ, #7: 30ÍOO# thật sự là 7:30 AM như #7: 30; 00 AM#. Thời gian trực kiện #7' 30' OOPM# ám chỉ đến 7: 30 đêm. Bạn cũng có thể sử đụng thời gian quán sự: thời gian trực kiện là #19: 30; oo# cung là 7:30 P M Sử dụng các hàm ngày tháng/thời gian B ạ n k h ô n g g iớ i hạn chỉ trong số học ngày tháng cơ bản trong Ac­ cess. Có rất nhiều hàm ngày tháng/thời gian Q ate/Tim e) cài săn tron?>- Access mà bạn có thể sử dụng để xử ìý các ngày tháng và thời gian băng những cách kliác. Như vói Lất cả hàm cãi sẵn, bạn có thể tìm thây các hàm Date/Tim e trong Expression Builder. Lần nữa nếu íolder Punc- tion trong cột trái có m ột dâu + kế bên nó, nhấp dấu + đó để m ở rông danh sách. Sau đó nhấp folder con Built-In Punction trong cột trai va hạng mục Date/Tim e trong cột giữa. Sau đó nhấp tên của bất kỳ hàm từ cột phải và nhấp nút Help để biết chi tiết về hàm. Bảng 2.4 liệt kê một số hàm Date/Tim e thường được sử dung và trình bày các ví đụ về việc sử dụng chúng.
  21. Chương 2: Để các Query làm phép toán 26 7 Bảng 2.4 Cáu v i Uụ vè cách jiT < Access OateTime Hàm và cú pháp Trảvề V í d ụ D ateí') Ngày tháng hiện 1 inh Trả về ngày tháng hiện hành theo đồng hồ cùa m áy tín h TimeO Thời gian hiện hàiih Trả về thời gian hiện hành theo Jồng hồ oủa máy tứ;h Now{) Ngày tháng và thời gian Trả về ngày ứiáng và thời hiện hành gian hiện hành theo đồng hồ của máy tính Cdate (expression) Chuyển dổi expression CDate ("Mar 31, 2004) trả vốn có thể lả bất kỳ chuỗi vồ 3/31/2004 trong giông như một ngày tháng thành một giá trị Dat&Time thật sự Date/.dd ;iiiterval num- Ngàv tháiig vô'a là aô’ DateAdd ("ni", 14, #1/1/ ter, date) (number; ngay, tuần, 2004#) trá về 3/1/2005, théniT ^ipior''al) từ Bgày ngàv tháng vốn lồ 14 tháng (date) tháng sau tháng giéng ngày 1, 2004 DateDifT(interval, datel, Sô'giờ, tuần, ngày (inter- DateiíT ("w", #l/l/200$#, i fir.«tdayof'Vfek viltgÃữ^ihai r’g;\y tbáng #l/’l/^006#)trả’'ề52bdivì r.rirPtweokofyearl]) có 52 tuần giữa hai ngày tháng. D .iy(date; Ngày của tliáng dưứi dạjig Day (#1'15/2004#) trá về 15 một sô'piữa 1 và 31 bởi vì 1/15/2004 rơi vào ngày lí i5 cùa tháiig. Hour (time) Giờ của một thời girm Hour (Now()) trả vế một số tượng trưíig cho giờ hiện hành của ngày. MonthNaine^montíxNum- Tháng cùa một ngày thíúig MonthName (12, Falsf) ber,abbreviate) được viết ra dầy đù (nếu trả về December abbreviate là false), được MonthNarne (12, True) trả viết tắt (nếu abbreviate là về Dec (bdi vì tháng 12 là true). tháng thứ 12 của năm). Như bạn thấy trong bảng 2.4, các hàm DateAddO và DateiíĩD cho phép bạn xác định m ột đối sô' interval. Đô"i sô' đó định nghĩa khoảng thời gian được sử dụng cho phép tính. V í dụ, nếu bạn chỉ sử dụng số học ngày tháng đơn giản để trừ hai ngày tháng, hiệu giữa các ngày tháng tự động hiển thị dưới dạng số
  22. 26 8 ___ Chương 2: Để các Query ỉàm phép toán ngày giữa hai ngày tháng đó. Sử dụng hàm DateAddO hoậc Dateifft), bạn có thể thay đổi điều đó sao cho hiệu giữa các ngày tháng được biểu thị bằng giây, phút, giờ, tuần, tháng hoặc năm - phụ thuộc vào cái nào m ang lại tính chính xác mà bạn cần. Để xác định đối số khoảng thời gian trong một hàm DateAddO hoặc Dateiff{), bạn sử đụng m ột trong các xác lập (được đặt trong các dấu ngoặc kép) được liệt ké trong cột trái của bảng 2.5. Bảng 2.5 Các xác iập trong ứõ'í sô' ínterval cho các hàm Daỉe/ĩime vô'n dốỉ hỏi một khoảng thời gian (interval) X á c lậ p M ô t ả "đ" D a y "b" 'm ' M o n th "n" M in u te "q" Q u a rte r "s" S e c o n d "\vw'' W e e k d a y "w w " W e e k M M Day of year "y"yyyy" y y y " YearY e a r Xem m ột ví dụ sử dụng m ột khoảng thời gian trong m ột hàm Dateifíl), Nếu không sử đụng hàm Dateifỉ(), biểu thức #12/25/2007# - #12/24' 2007# trả về 1, bởi vì có một ngày giữa hai ngày tháng đó "day" là khoảng thời gian m ặc định khi trừ các ngày tháng. M ặt khác biểu thức D ateiá:’'h". #12/24/2007#, #]2/25/2007#-( trá về 24, bởi 'à ''h’’ xác đỊnh các giờ, và có 24 giờ giữa hai ngây tháng đó. Xử lý Text b ằ n g c á c b iểu thúc Bạn có thể sử dụng nội đung của các trường Text (còn được gọi là các chuỗi (string), dạng viết tắt của "m ột chuỗi ký tự") trong các biểu thức. K hi cộng, trừ, nhân hoặc chia với các chuỗi không hợp lý. Sau cùng Sm ith tim es Jones hoặc Sm oth divides by Jones không có nghĩa gì cả. Tuy nhiên, bạn có thể sử dụng toán tử (&) để ghép (nối lại) các chuỗi. V í dụ, biểu thức [First Name] & [Last Name] nôi nội dung của các trường Last Nam e và Pirst Nam e lại với nhau. Nếu trường Last Name chứa Pines và trường First Nam e chứa Tori thì biểu thức [First name] & [Last Name] trả về ToriPines. Thêm các khoảng trống vào các biểu thức text Bạn nói "Tori Pines có khoảng trống d giữa hay không?". Đối với bạn thì nên. Nhưng đó không phải là những gì biểu thức nói. Biểu thức
  23. Chướng 2: Để các Query làm phép toán___ 269 nòi rÀng ' Gắn g;á trị Pirst ]\aTi3 vè gia trị Last Nam e lạiv c i n h a u ' . Biểu ihiíc không PÓi "và đặt một khoáng trông giữa chúng". Các máy tính có V thức về trực kiện; bạn v”ó thể dễ dàng giải quyết vấn đề này bằng việc sử dụng text trực kiện. Text trực kiện "literal’' là bât kỳ text không tham chiếu đến m ột tên trường hoặc hàm hoặc bất cứ thứ gì khác vô'n cỏ ý nghĩa đặc biệt đô'i với text. Để sứ dụng text trực kiện trong một biểu thức trường tính toán, đạt text, ti-cng các dau ngoặv; kf p M ót klioáng troaí, là n^ột ký tụ' • m ột cụm text trực kiện. D o đó hãy lưu V điều gì xây ra nếu viết lại biểu thức mẫu trước như sau: Rrst Name] & “ “ & [Last Name Kết quả ỉà Tori Pines có một khoàng trông ở giữa. Biếu thức nói rằng "nội dung của trường First Name theo sau là m ộ t khoảng trông rồi đến nội dung c ư a trường Last Nair.e". I^ỉíllll lliio è. Cđ Dản ỉủ c^.Do õố tXũK^ iỉRi ^ & "" & f'.aĩt tui c i wộ: ;-^ì vĩó RỈ-Í Tõiis ^tcAS, tiếí; tHức E íiẰ S t^ tó ] & "" & [Lost KQitó.] íid ứí mộị tHíl qì đó ndu TbxiPtnes (tón ưâ Họ 'ek>*Ể{ cứ Qịi ồqiaa), G iầ sứ m ột bảng chứa các trường City, State và Zip. Biểu thức sau (lây h ’OT trị tt'n thènh phò theo SÍ'U Ic- c’â'j obây VỀ n ẹ t khoâng t"õif, theo *^au !à tôn. tip j bang. hai. khoang i;rông rui đèn raà ZIP iCit,'] s ", r* :S‘at3) [:iFl M ột ví du v l biểu thức trên có thè’ iròng như sau. LũS Anyeies, CA 91234 Sử dụng cát’ hàm Text của Access Access cung cấp m ột sô' hàm để làm việc. Bạn tìm thấy chúng trong hạng mạc Textở cột giữa của ExpreHsion Buildor Phần này tập trung vào m ột số hàm thường được sử dụng hơn và trìn h bày các ví dụ về việc sử dụng chúng. Để biết thêm thông tin về các hàm text và để biết thêm chi tiết, sử dụng nút Help trong Exprossion Builder. Bảng 2.6 liệt kê các hàm Text phổ biến hơn.
  24. 270___ Chưdng 2: Để các Query làm 3hép toán Bảng 2.6 Các ví dụ vể các hàm text cài sấn Hàm và cú pháp Trả về Ví dụ LCase(string) string được chuyển đổi LCase(“AbcdEíU”) trả về thành chữ thường ABCDEFG UCase(string) string được chuyển đổi UCase(‘‘AbCdEíG”)trảvề thành chữ'hoa ABCDEPG LeíUstring,n) n ký tự tận cùng bên trái Left(“abcdefg'’, 3) trả VP của string (chuỗi) abc Right{string,n) n ký tự tận cùng bên phải Right(“abcdefg’', 2) trả về của strlng (:;hjỗi) fg Miđ(string, startí, length]) Các ký tự có chiều dài Mid(“abcmnys”, 4,2Urả VP. (length) vừa của chuỗi bắt mn đầu tại start Len(string) chiều dài của string Len(“Howdy”) trả về 5 Trim(string) string với bất kỳ khoảng Trim(“abc”) trả về abc trống dứng trước và đứng sau được xén đi InStr([start,] stringl, Vị trí cùa String2 trong InSlr ("abcxđef, "x") trả String2) stringl bắt đầu tại start về 4 (bởi vì X là ký tự thứ 4 trong stringl), V iết c á c b iểu thức đưa ra quyết định M ột trong những hàm hữu dụng nhất trong Access là hàm Imm edi- ate If, iiíO chấp nhận ba đối số như được m inh hnạ như ?au: \\t(conditionalExpression, ơoThis, elseDoThis) t r o n g đ ó : # conditionaỉ Expression là một biền thức dãn đến £íà trị Tnie hoặc False ẫt doTbis là những gì mà hàm trả I)ề nổu condilionalExpression chứng minh tà Tme. elseDoThis là những gì hàm trả về ìiếii conditionaỉExpression chứng m inh là False G iá trị của hàm iif() là khả năng nó đưa ra m ột quyết định về những gì cần trả về dựa vào tình huống hiện tại. V í dụ doanh nghiệp của bân đòi hỏi tính thuế bán hàng 7.25% cho nhiững cư dân N ew york và khong thuế bán hàng cho m ọi người khác. Trường State trong bảng bên dưới chứa tiêu bang m à đơn đặt hàng được chuyển đến. Biểu thức sau đây
  25. Chương 2: Để các Query làm phép toán 271 nói rang 'nếu trJcng State chứa N V thì trả Vtì 0.7.25%, nêu knóng trả về 0 ízero)": ;if{[State]="l\IY’', 0.0725, 0) C h ú V, trong biểu thức trước rằng 0.0725 chỉ là m ột cách để biểu diễn 7.25% là m ột sô' thập phân thông thường (xóa dấu phần trăm và dịch chuyến dâu thập phân sang bên trái hai hàng chữ sô). Mọt VI riụ khác, củd nám ũf la một truờiig ]-’aid trong một bảng là một trường Yes/No. M ột trường Yes/No chỉ có thể chứa một giá trị True hoặc một giá trị False. Chỉ riêng tên trường là m ột biểu thức có điều kiện đầy đủ trong m ột hàm iif() như trong biểu thức mẫu sau đây: iif([Paid], "Receipt”, “Invoice”) Biểu thức nói rằng "Nếu trường Paicl chưa True (hoặc Yes), trả về từ Receipt. Nếu không (nếu trường Paid chứa Palse), trá về từ Invoice". Thực hiện cá c p h ép so sánh trong líf() Vcf-ss cung câp m ột số’ toán tử so sánh được sử dụng để định nghía c KJiông bằng với Không bằng với Bet\vecn Betwpfìn Trong ^ãy M ột vi dụ vồ m ột hàm iff() sử dụng toán tử so sánh >= để đưa ra quyêt định về nội dung của m ột trường có tên là Q ty như sau: iif([Qty]>=1ũ, "Dỉscount", "No discount") Biểu thức này nói rằng "Nếu trường Qty chứa m ột giá trị lớn hơn hoặc băng 10 thì trả về Discount. Nếu không trả về No discount". Kết họỊ) các phép so sánh Bạn có thể sử dụng các toán tử logic cài sẵn với Access để kết hợp m ột số phép so sánh thành m ột biểu thức vốn dẫn đến m ột giá trị True hoặc False. Các toán tử logic được liệt kê trong bảng 2.8.
  26. 272___ Chưdng 2: Dế các Query làm phép toán Bảng 2.8 Các ỉoán tử logic càí sẩn Toán tử logic Ý ngbĩa And Cả hai diều kiệnlà T r u e Or Một hoặc cả hai điều kiện đều là true Xor Loại trừ "or" - một điều kiện, nhưng không phải cả hai điều kiện dều ỉà True, Not Không phải True V í dụ xem hàm iíK) sau đây sử dụng m ột toán tử And: iif([Last Name]='’Pines" And [Fitst Name]=’Tori’',"No Charge",’'Charge") Biều thức có điều kiộn [Tvast nam el = "Pines And [First Nnme] = "Tori" nci rằng "Nếu trườr.g Last Nam e chứa Pines và trường First Name chứa Tori". Do đó một điều kiện ỉà trường Last Name chứa Pines. Điều kiện kia là trường Last Nam e chứa Tori. Nếu cả hai đióu kiện đó là True, biểu thức trả về No Charge. Nếu hoặc m ột hoặc cả hai điều kiện đó là False thì biểu thức trả về Charge. M ột ví dụ khác sử dụng toán tử O r là biểu thức sau đây: iif([State]="NY” Or [State]=”NJ", "Tax", “No Tax") Trong ví dụ trước, điều kiện thứ nhâ't là trường State chứa Ny. Điều kiện thứ hai là trường State chứa N J. Toán tử O r nói rằng hoặc 1 (hoặc cả hai) điều kiện phải được đáp Cừig để đồng bộ biểu thức có điều kiện trả về True. Nếu trường State chứa N Y hoặc N J, biểu thức trả về Taí. Nếu trường State chứa bất cứ thứ gì ngoại trừ N Y hoặc N J thì biểu tiiức trả về No Tax. Đánh thuê hoặc không đánh thuế M ột ví dụ thực tế về việc sử dụng m ột hàm ifĩ() trong các biểu thức trường tính toán là việc có đánh thuế hay không. V í dụ, bạn có một query như trong hình 2.10, doanh nghiệp của bạn đòi hỏi bạn tính thuế 7.25% vào tất cả đơn đặt hàng được gởi trong tiểu bang New York. Bạn không tính thuế bán hàng trên các đơn đặt hàng được gởi bên ngoài New York. Trường StateProv trong query chứa tiểu bang m à đơn đặt hàng được gởi đến. Rõ ràng, bạn không thể thấy tất cả biểu thức trong query - lưới Q BE không đủ rộng để thể hiện tất cả điều đó. Sau đây là một tóm tắt nhanh về những gì m à m ọi trường trong query đã duyệt: * StateProv: Một tníờng text tho6ngt híiờìig từ bảng Address Book này, tĩtợng irìítig cho tiểu bang mà đơn đật hàng được chuyển đến. K Qty: Một tntòng Nnmber thôtĩg thường ỉữ bảng Order Detaiỉs U(Ợiig tnừig cho số bíợng món hàng được đặt mỉia.
  27. Chương 2: Để các Query làm phép toán 27 3 Vnit Príce ìAọt m(òny> Cj:nenc^' .hòhíi thương lù bảng CroOì Dứ- taiis tượng trưng cho các dơn r / của niậ! bàng được đặt mìiú. m E xtPríce . Một trường Ihih loàn ExtPricứ: ÍQtyì 8 [Vnit Priceì, nbãu nội ciitug của tnỉờng Qty 1’ới nội dung của infờ)ig Unit Price. K Sales Tax R ate: Một tn(ờng líìih toán, SalcsTaxRateAi/((StateProi)] = " íV y , 0.725.0), có nghĩa là tneờng SlaieProv chứa NY, thì đật 0.7250 rào tìKờng này. Nếìi kbông, đặt o (zero) i'ào ínỉờng nàỵ. 9 SalesTetAmt: Một tr ư ờ n g lính :oá}i, SaỉesTaxAmt. Ccttr í[SaỉesTaxRate! * [ExtPrìceD, >ìbân giá mở rộng với mức thĩiế bán bàng. Hàm CairO ỉàm cho kếl quả Muii hiện íheo định dạng Ciir- re ìic v thay rì diíới dạng một số General. » TotalW itbTax: Một írtíờng tinh toán, Total\VithTax: ịExtPrice} + ÍSnỉesTaxAmt]. cỘHQgiá mở rông với li(ợn% thiiế bán hàng. •in u*r aeM«'e«H ỈT « H :c ^ ỉ i 'i i >1 ^ * 'ù'%' ^ K XCtKU 7*' ‘ tí-n i .1' HÌIỆI II I|I>I HÌIIIỆI Í>III|» >J M "tli * iị ^ » ín í i ỉ ỉ i - i : i f jỉ '.la t' • Qm.i 1 i t c « *'*« n c V v i t k í d rd H 0> "ỹ ;iM'i>UKQri !.*»( r« ri« lM t* 'ìỉ 2 Ỉ4 »14 KiM ^ Hinn ỉ 10 ũiery 'Ma cic tường tnõnp ỉhưcng và ỉá : irucTng ỉínli toán (các trưòng tính toán được che giấu). H ìiih 2.l i n;ii\h họa các kôt quả củaquery, Các record có N Y trong trường StriteProv thể hiện m ột mức thuế bán hàng là 7.25% (0.0725). Các record không có N Y trong trường StatoProv thể hiện 0 fzpro) là mức thuế bán hàng. Các trường SalesTaxAm t và TotalW ithTax thể hiện kết quả của việc cộng thuế bán hàng. {Bởi vì giá trị SalesTaxRate là zero bên ngoài N Y, các record đó không được cộng thuế bán hàng).
  28. 274 Chương 2: Để các Query làm phép toán ^j»Uỉ;iit('Vc«rsYýữĩ rSHSỊ)' MKr3i&A iXc*Bỉ o««t( A • íl •!&»*. c >»HÌ1 ỉi Ổi ^ u>r*»»0 ỉl ' p*it« 8 ỉ iUdMn ^ p« b« ặ 0'itr &(!» (•I(wini«r> *(•«- n.nts t Hình 2.11 Các kết quả (khung xem Dalasgeet) của queiy được minh họa trong hình 2.10. Test để tìm các trưàng rỗng Đôi khi việc làm cho m ột biểu thức liệu m ột trường có rỗng (null) hay không thì hũu ích. Access có m ột hàm IsN ull 0 m a bạn co the sử dụng để test xem m ột trường có rỗng hay không. Cú pháp của hàm khá đ ơ n g iả n ; ìsUưì\{fielơname]) trong đó ĩieldnam e lầ tên của trường mà bạn m uốn test. Nếu trường xác định rỗng. IsNulỉ 0 trả về m ột giá trị True. Nếu trường xác định không rỗng thì IsNullO trả về m ột gĩá trị False. Ph£n tiếp theo trình bày m ột ví dụ về IsNullO trong m ột biểu thức. • •••••• Thà thuật Để xem một trường rỗng là một zero trong các biểu thức toán học, sử dụng hàm Nz() được mô tả trong phần trước "tránh các vấn đề với các gia tri rỗng" trong chương này. Phân loại theo tên hoặc công ty ^ M ột vấn đề khá phổ biến xuất hiện trong các bảng vốn lưu trữ các tên và địa chỉ. M ột số record trong m ột bảng như vậy có thể liẹt ke t^en của một người nhưng không phải tên công ty. M ọt số record có th i chứa m ột tên công ty, nhưng không chứa tên người. Nếu bạn phân loại các record trong m ột bảng như vậy theo các trường Last Nam e Pirst Name và Corapany như trong hình 2.12, record có các trường Last Nam e và First Nam e rỗng được liệt kê trứớc tiên.
  29. Chương 2: Để các Query làm phép toán 275 Các trường í-ast Nam e, Firsl Name, C o m p a n y Q vtiyỉ \ ' V V : Ằ- Ỷ ^ _ * i _ « er. '4a c 1 1 D ► . * : r satie j,w Tìùtt- *rrr*' v n 'ì'irt bù ĩá J L c'»*•»; tdce^ E•^â^^n. C a rljs C itru s M ic n đ e l Coĩteỉo ► a re n f f L ỉ h * ir KifT^erf)ly Qoerr M o n ica t*C(. v ậ 1o H9r nn các kốl rucry,. {'ch in 3 ) ern r'atas'ie5t' c ic reĩo-đ cc' cac trưởng lâstnam e rông được liệt kê trưdc tìcn. H'nfi 2,12 Phên loai Ihso các trường tên và cống Iv sẽ đ ỉl 5á5 trưSng íêr rãnq i phấn IrỄn cùng. G iá sử bạn thích thấv các tên được liệt ké theo vần chử cái têr» ngíiời hoặc tên công cy hơn néu không có tén người. Trong trường hợp đó tạo inột trường tính toán trong khung xem Design. Bạn có thể đặt cho trường này bât kỳ tèn nào bạn muôn, nhưng trong hình 2.13, trường được đặt tên là CustLookup. Biểu thức cho trường đó là: CustLookup: ỉif(lsNưll([Last Name]),[Company],[Last Name] & “ “ Ẳ (First NameỊ) Biểu thức iíĩt) nói rằng "Nếu trường Last Nam e rỗng, hãy đặt tên công ty trong trường này. Nếu không, đặt họ của người theo sau íà một dấu phẩy, khoảng trống và tên của người (ví dụ Pines, Tori) vào trường này. Việc xác lập hàng Sort cho trường tính toán đó sang thứ tự As-
  30. 27 6 Chương 2: Để cấc Query làm phép toán cending sè đặt các record vào thứ tự theo vần chư cái họ hoặc công ty (nếu không có họ) như được m inh họa trong hình 2.13. Trường tính toán *c4f<Sĩ i i »nlattU) f f í i h&m< ItA ^ỉ«'ne í Ằddr«tl Ỹ ìt t í f n ỉ N irrie Ỉvi'i94ni 50C'. Cưìr^f. 1('M ĩỉ?t ÍV Sf».t Atr«rem9 í\r»n:irỊ a Aq v ỉd v; hí Crit«rÌA «r CuULÕokõp • Last Name * Fii*st Name C o m p a n y ABC Productions Creâtive ũestgi Creative Oesigrts Gadgets Inc. Gađg^ts Inc. Visíonary SysU Visronary Systems, Inc. W il«v Wiơg€ts W ílẹy v.^idgets Angslrgm, Mar AngsUom Mdrgâr^i Bebop, Stacey Bebop stacev Biasini, C3fl05 Biâsíni C a rlo s Cỉtrus, Michdôl Citrus Micn^eỉ Costello, Karer CosteUo Kdren Crusher, Kimer Crưsher K irn e rb iy ooerr. Monica Ooerr M O H Ỉ C d Í%CCV6Ó0, Qao cKữvedo C^eorge Hárkíns, Tíffân* Harkins^ T iffá rìv Phân loại theo vắn chữ cál tẻn hoặc công ty Hình 2.13 PhãR loại theo trường lính toán sẽ phân loại Iheo tên hoặc công ty nếu họ rỗng. Tạo các Parameter Query linh hoạt Param eter query là m ột query có chủ đích thiếu m ột mẩu thông tin cần thiết, sao cho bạn có thể nhrập nhanh thông tin khi bạn m ở query trong khung xem Datasheet. V í dụ, bạn tạo m ột query hiển thị các đơn đặt hàng từ tất cả record trong một bảng (hoặc các bảng) từ tât cả record trong cơ sở dữ liệu. Bạn cũng thích có các query hiển thị các đơn đặt hàng từ m ỗi tháng. Thay vì tạo 12 query khác nhau (một query cho m ỗi tháng), bạn có thể tạo m ột param eter hỏi số tháng. Sau đó ngay khi bạn nhập số tháng, query hiển thị các đơn đặt hàng cho chỉ tháng m à bạn xác định.
  31. Chương 2: Để các' .íuery làm phép toán 27 7 N u i cé.cìí khác s< ih ir.g Hià bạii quaii -â.n t-*ỏ' thành tLam số irà bạr. định nghĩa và ch jyển (cung cap) đến query ngay trước khi query mở. Đê tạo m ột pỉ.ram eter querv bắt đẩu bằng cách tạo chỉ m ột select query bình thường (như được nêu chi tiết trong chương trước). Bạn có thế thêm các bảng và các tôn trường như bạn thường làm đôl với bất kỳ query khác. Sau đó làm theo những bước sau đây để làm cho query trở tnành m ột param eter query: 1, Troiig cờa sổ Design View, iihàV Paríoĩieters tconịị nhóin Show/ Hide cùa tab Design trên Ribbon. Hộp thoại Querv Param eters xuất hiện 2. Nhập một tên tham số và Data Type của nó trong các cột thích h ợ p . Tên tham số’ có thế là bất kỳ tên bạn thích, m iễn là nó không trùng vứi tên của một trường thông thường hoặc trường tính toán đã được đưa vào báng, Loại dừ liệu trùng với loại dữ liệu mà tharn số sẽ hỏi. chẳng hạn như Text cho text, Currency cho m ột ỉ'v i ir-Ị <ỉô la hoặc Date/Tirac cho m ột ngày tháng hoặc thời gian. Bạn có thể lặp lại bước nầy để tạo bao nhiêu tham sô' tùy thích. ‘đ. Nhấp O K để đóng hộp thoại Query Param eters. • •••••• Thủ thuật Trong lưới QBE, bạn có thể xử lý tên tham số như bạn xử lý một giá trị từ một irường. Thực lẽ . bạn dạt tên aía tham số trong rác dấu cigoậc vuông như bạn thường lám đối với tnột lên trường. Troiig h\nh 2.14, một, tham số M onrh Num oer được tạo chứa m ột số níĩiỉvên. Trong hàng Criteria cho trưò'njĩ Order Date trong lưới QBE, u''.n tham số được sử dụng trong biòu Inúe đây như đưọc m inh họh trong hình 2.14. Tiéu chuẩn yêu cáu query hiển thi chì các record nào mò thổng hoặc ngàv băng vó'i bất cứ những được gõ nhập dưới dạng tham số M onth Number: Month([Order DateỊ) = ỊMontí’ Number]
  32. 278 Chương 2: Dể các Query íàm ohép toán Tham số số tháng đưộc đinh nghĩa >'9»* CrcMc ữ9>*ì»\»ri9 Pé$« Yictrc ũ r . đ T ra •— r lù —l ♦ V? • >t •°“!r H{ĐJcte V)r« Mit4 •>9«nif Al Aí /ềf^ Ợy I r r n ^ i ' ^ r « 5 « s 'ăi CiCtH 0««U'3lĩ Cĩhit '2^ iQwi«y J ị i« H i i n 9 > i > , !'^UI ^ Qir •> Ịjl »94 «^alp^ỉ >/ O a « C»I. * (bv((C Ui Qui'yi ’ Ĩ9&Oi Hi7'y ^Ị| lUeA '''ìrLLíKíkt Số tháng được sử dụng trong tiêu chuẩn Hình 2.14 Định nghĩa và S Ừ dụng một tham sõ query. Sau khi định nghĩa tham số và sử dụng nó trong lưới Q BE bạn có thể lưu query như bạn lưu bất kỳ query khác. Tham số kbbng’thật sư thực thi cho đến khi bạn mở query trong khung xem Datasheet. kh bạn làm như vậy, một hộp thoại Enter Param eter Value như được họa ở phần trên cùng của hình 2.15 mô trên màn hình. Bạn gc nhạp m ột giá trị cho tham sô^ và nhấp O K. Đôi với ví dụ già sử bạn gõ nhặp 9 dể xem chỉ các đơn đặt hàng của tháng chín. Trưđc khl m ột query mô, bạn cung cấp m ột giá trf thâm số •tm i II. - , y _ í Ẹn^ỉr Parameter Valuẹ Numbẽr 91-1 0»c Cđncel 1
  33. Chương 2: Để các Query làm phép toán 27 9 . »«- ĩ> “ . - j - CyrứvOM -• cirdpráí * Prrdurtỉ.i . S®!ỉn3ífifộ^ 'ị/77/?W 13 17 1 $$.00 •}/22/zy>ỉ 17 NeY# Coíđe-Ì whjj-l i CrjQ.oo S/22/2COÕ 17 Ể ^dgct MP3 1 ẸÍG.{kD ;|7 v-innprcsM^ I < 3 0 .c n /Ỉfự2^ì7 : J v/a^rív:! V A rrar J 5^50. J \ ' o v v ’j Sear<h Ouery ỚƯỢc m ò hiển thị các đơrt đặt hàng cho chl tháng 9 (thảng d) Hir.h 2 15 Kết quả của việc mở mội parameỉer query và xác định 9 là sô'tháng (Month number) Kh; bạn nha’p núu O K trong hộp ’,hoại Param ettr \aìue, querv mứ trong khung xem Datsheet, sử dụng giá trị tham số mà bạn đã xác đxnh. Trong ví dụ này, query hiển thị chỉ các recorđ có 9 là sô' tháng Uong trường O rder Date như được m inh họa ở nửa dưới của hình 2.15. Thủ thuâlI Bạn cũng sẽ thấv hộp thoại Enter Parameter Vdluc nếu bạn có một lồỉ gõ nhập hoệc một lổỉ khác mà Accesỉv không nhận bỉét một tên trường trong thiết kê query. Các tổng, tổng con, giá trị trung bình Cho đến bây giờ, tâ^t cả phép tính trong các query thao tác trên các trường rièng le bên trong các record, Giả sử bạn m uốn m ột loại tổng khác chảng hạn như tổng lượng đồ la của tất cả doanh số, trong tấ^t cả record? Bạn có thế thực hiện các phép tính như vậy bằng hai cách. Cách tốt nhất và có lẽ dễ nhất là sử dụng một report thay vì một query. Report m ang lại thêm sự linh hoạt và cho phép bạn hiển thị thông tin bằng nhiều cách ý nghĩa hơn các query. Phương pháp khác là sử dụng một totals query. M ột totals query không cho bạn sự linh hoạt hoặc kết quả khá đẹp m à m ột report m ang lại. Nhưng một totals query hữu dụng khi bạn chỉ muôn thực hiện nhanh một sô" phép tính mà không cần định dạng m ột report đẹp mắt.
  34. 28 0 Chướng 2: Để các Query làm phép toán Nếu bạn chỉ muôn làm nhanh m ột sô' phép tính tổng con, tổng hoặc phép tính nhiều record khác và không thật sự quan tâm dừ liệu trông như thệ nào trên m àn hình hoặc trên bảng in, bạn có thể sử đụng một query dể làm phép toán. Nhưng đối với các phép tính nhiều record khác vừa được đề cập, bảng 2.9 liệt kê tất cả phép tính m à bạn có thể làm trong m ột totals query. Bảng 2.9 Các phép tính có sẵn trong một Totals Query L ự a c h ọ n T r ả v ề A v g Trung bình các record trong m ột trường C o u n t Bao nhiêu record F ir s t G iá trỊ đ’iỢc hft' t r ữ t r o n g rocord đầu tiê'i G r o u p b y Kiicng có gì -lựa chọn nà> chỉ đượcsử dụixg trong việc kết nhóm L a s t G iá trị được lưu trữ trong rec&rcl cuối cùng M a x Giá trị cao nhất trong tất cả record M in G iá trị thấp nhất trong tất cả record S tD e v Độ lệch chuẩn S u m Tổng các record trong trường V a r P h ư ơ n g s a i Để tạo m ột query thực thi các phép tính trên nhiều record, bắt đầu với m ột select query thông thường có chứa bảng (hoặc các bảng) m à bạn muôn thực thi các phép tính trên đó. Sau đó làm m ột trong hai điề s a u đ â y : » Nhấp nút ĩbtaìs /rong nbóm Sbow/Hide của tabDesiqn trên Rihboỉi. N h ấ p phải lưới qì:e;yvù chọn TolaỈj từ menn tất. ^ iá ự thay đổi duy nhất mà bạn thấy là m ột hàng m ới có tiêu đề là Total trong lưới QBE. Bước tiếp theo là rê bất kỳ lên trường m à bạn muôn làm phép tính xuông đến hàng Field của T o tals lưới. Bạn có thể tùy ý tạo m ột trường tín h toán và sau đó thực thi m ột phép tính trên giá trị đó. Sau khi trường nằm đâu vào đấy, nhấp hàng Totals và sau đó chọn m ột danh sách xổ xuống như được m inh họa trong hình 2.16. Lặp lại tiến trình này cho m ỗi trường mà bạn m uôn thực thi m ột Dhéữ tính trên đó.
  35. hưdng 2; Để các Query làm phép toán 281 Oeitc ỉ»*.ein>« &M4 C^AUbỉtc r« c4i4n *• ér I: • " L _ i . B / u SẼ ^ « '• Í3’ V s írt e«c&»4i . ^ '^•' • •: \ ^ ■’ ' ' f(í7» ft " I ĩ - * Ì í *^5í^rtỉ 4Jpr»8 Q|> ' ÍD Ị ẹ J % 1 ^ y S* 7 Fi9 4 u a ỉ v®í'Piir»íd'Ịĩv lotM; Citxao Ễv ỉijp 5u»^ %* ^Mt; Or^UC 6v / f ưpM t. Ub(iA.«it«iJ Sl«}w: E Cn»«rl» vg ^ rkiS' l >c«* Jp cr Km- ♦ K ta . '««nvi«s^ Uvitlock ■íevrti ỉtDn v»f F»u U ỉ ( &crel)i ể thấy m ột giá trị sản phấm , tổng' thu nhập cho tâ't cà sản phẩm, xóa trưởng ProductlD ra khỏi bản thiết kế query. Tính toán các tổng con trong một query Để tính các tổng con, sử dụng ư'ột, trường khác trong query vôn nhận dạng trường m à các tổng con sẽ được đưa vào. Xác lập hàng Total cho trường đó sang m ột giá trị Group by. ơ nửa trên của hình 2.16, trường ProđuctlD từ bảng Orđer Details được thêm vào lưới Q BE và hàng Toial của nó được xác lập sang m ột giá trị Group By.
  36. 282 Chương 2: Để các Query làm phép toán ,ỈJ Ịị'Ã — : i T I ụ'\S 9 ^- ' ‘ S i Viiỉt P t it t ' f*t t Ì F»t flv » prodvđỉ A|pnj QrY P r o d u c U D • ỉ u m O ỉ d y 2 ỈỈOO.OO Qu«»yl Vỉdco Ciineri 2 $ 2 , 0 0 0 . 0 0 Q«fỵ2 8udgelM PỈPl»f«r 3 $ s o . M ỉcroyitv« 6low OfY«F ĩ $ U 9 . » ỉ ĩn CiicuiM en Qiy _ Ị u * y M b i i s ^ O Q t 1 1 ^ Sttnple Sỉles T n CiiiculsUon. íSữ-pkPloppy t)i»k& . 26 $ 1 . 0 3 9 . 7 4 ^ S4A(4t«QMrr _ịw ayCoôl 5cann«f a $ 2 6 9 . 9 7 I «r*f ueaM«ỉi^v« =1000. Trong khung xem Datasheet, chỉ các sản phẩm có các kết quả tổng bán hàng > = 1000 mới xuất hiện trên màn hình.
  37. Chương 3: Làm nhưng điều tiện lợi bằng các 283 Làm những điều tiện lợi bồng các fìction ỌuerụVQ Ọuerụ UUizQrd Nbửniĩ điếm ch’'nh * bủ dụìtg a ic acỉiOỉt iỊiiery mọtcúch iin tù in 9 cl'iì'iị CÌ^C U/KỈUÍ'? '/;'(?;•>’ 'U' ỉ'ìcy iể i 'tí'I-'ệì' I b ờ ì ỉ b :rc 'x^'ìì'’ 9 'lạo các /xinq Vìóì bằníị các make tciblư qncry » 7 '-H'Uí i.ù !u'i. rà p'.'i.tí ijiic-r,. * 'l'âp hợp Iiuùinị Ibứ rải rác bằng Piỉhl {.'nmaiched \Vizard 9 \^IIỊ rữfìg ì-inci D.'i/>licnĩes \X'izard h ương 1 của phần này t ậ p tning v.ìc \'iệc tạo c á c í?e]ei't query vốn là loại query phổ biến nhất đưỢc tạo ra bởi những người dùngC Access. Dù vậy có thể bạn không nhận ra rằng Access có các loại query khác. Sử dụng các action query để thực hiện các thay đổi đối với dữ liệu - ví dụ, bạn có thể thiết lập query để thực hiện một thay đổi đôl với tất cả recorđ khớp với tiêu chuẩn. Và hai query wizand - Find Duplicates Query Wizard và Find ưnmatched Query Wizard giúp bạn làm sạch dữ liệu trong cơ sở dữ liệu.
  38. 284 Chương 3: Làm những điểu tiện lợi bằng các Tạo cá c A ction Q u ery Các action query là một cách để thực hiện những hiệu chỉnh tổng thể đối với cơ sở dữ liệu. Chúngrất mạnb, nghĩa là chúng có thể hữu dụng đáng kể và tiết kiệm cho bạn nhiều thời gian. Chúng cũng có thể làm hư hỏng đáng kể cơ sở dữ liệu nếu được sử dụng không đúng. Các action query rất khác với các select query. Một select query hiển thị dữ liệu đáp ứng các tiêu chuẩn, một action query tìm dữ liệu đáp ứng các tiêu chuẩn và sau đó làm một điều ^ đó với nó chẳng hạn như thực hiện các thay đổi dữ l i ệ u hoặc di chuyển các record đến mộc bảng mới. Bôn loại action query tương ứng với bô”n tác vụ rất riêng biệt. Bạn cố thể tháy ràng tạo một action query sẽ tiết kiệm cho bạn vô sô thời gian nếu bạn muôn iàm bât kỳ điều sau đây: * Xóa mô! số recurd (deỉete qiieĩy) * Sí/O chép dữ liệu từ hảng 7ỉàỵsang một bàng khác (appciìd qneìy) íf Cập nhật (thay đổi) thông tin trong m ột số reconi (ĩipdate cỊiieiy) n Tạo một bảng mới từ dứ liệu được ỉưii trữ trong các bảng khác (nuike tabỉe qiterỵ) Thủ thuật Sao luU trước khi chạy một action query. Các action qucry có thể thực hiộn những thay đổi rất lớn đôi với cơ sờ dữ liệu, thặm chí nếu bạn cấn thận, bạn ró thê phạnt một sai sóỉ. Tạo một bản sao lu\j không mất nhiều thời gian đặc biệt so với thời gian dành cho việt sửa chữa những gì mà một action query đã l«ìm. cỏ thể bạn muôV) sao luU loàn bộ cơ sở dừ liệu hoặf chí các bảng mà querv ảnh hưởng đến. Cách thòng thường để tạo một query là nhâp nút Query Wizard hoặc Query Design trên tab Create của Ribbon. Khi bạn tạo một query sử dụng một trong hai phương pháp này, Access tự động tạo một select query. Bạn có thể thay đổi loại query của bâ't kỳ query cho dù nó mới hoặc cũ. Đê sử đụng loại query, chọn loại query mà bạn muốn từ nhóm Query Type của tab Design trên Ribbon (khi query hiển thị trong khung xem Design). Bạn có thể chọn Make Table, Append, ưpdate hoặc Delete Query để tạo một query). Những rủi ro của nút Run Như có thể bạn nhận ra bây giờ, các action query thực hiện các thay đổi; chúng không chỉ hiển thị dữ liệu. Bạn cần biết làm thế nào tạo an toàn một action query mà không chạy nó trước khi bạn định nghĩa xong chính xác những gì bạn muốn query làm việc. Điều cô^t yếu là khi bạn sử dụng các nút View và Run và cách bạn mở query:
  39. Chướng 3: Làm những diều tiện lợi bằng các 285 K Khi ỌỢÌỈ làrn riờc Ị'ỡì n:ột sek’(" cỊi'e>y cức iìúí Vieu. nà Ritii làm củng tnộl IHỘC. !Ê Kbi bạn làm I’iẻc i-ới tìiộ! adivỉi (Ịỉícry. các nút Vieiv ĩ’à Rini làm nbữno, côìiíị v i ệ c hoàỉi loàn khác nhau. i\iíi Vieu’ hiển thị khiiiiq xe»ì Ikitasììcet I'ới tất cả record khớp I'ới I c í ’.c tiéh cbtiẩìì chọn, cíâv là một cách lốt đổ xem trước các record nào sẽ thav đổi khi bạii cbạv aclion qiieiy. Nút Viciv là một cách an :\ĩ'r loai. đ ể xem DaUísbeet Ciici 7)IỘ. ccíion qtiery đỏ ihiíy qtic r)' s ỉ :àm việc theo cách bạn miiốỉi hay không. 'tr .\úỉ Run thực thi hành độn^ - xóã hoặc thay đồi dữ liộìi tìvng cơ sở clữ liệii. Bạn không íhổ Iiíỉdo bành dộng s a i t khi bạn nhấp nút Run íronq m ộl ciction query. do dó b â ỵ rcì! cán thận. Bạiì íhiét ỉập (Ịiiứìy một cách chinh xác ínỉớc khi chạy nó -fà hãy bảo đâm lưit các báng Pun hị ảnh hưởno phòiiq bờ >'ự cố.xàv yo. Để úm biểìi th&ìn rề 1’iộc tạo các hán soo Iưìi cùa ctôi tiỉợng Ciisở liữ Ììộn, XCHÌ chiíơìig 2 của phần 7) liáo '6’ọii CỎKCẩn tíộn lWi C-đtH bỌH I«3 iKỘt acíion queẰi| nRu tRế Kào. CMaH CỚC aC.tiOK q u o q tuỗK IIqo iilc . muốn bđt đàu. KHì bọK Mổ actioti queUị til Cila s ổ 'Databasa bỏK^ CÚCẰ KỈáp đ ứ t 1Ỗ.K quot| ÍIdộC CÚC.H cilọH*ố Oò KÍđp wit OpfcH. Hễ.u cảu^tciss cilộL( quíiii pRải tHỉ Hiển ^ilị Kó). Acc&ss cỏkR. bóoiA*Sị bỌK sáp cllpq I«ột odtio* quêJa| ƯỔK tÍQií ổ i i t c s ĩ c'ji ìiíU Uiộc 2ỘP tR íí c ic u c c td X-M CÍ^C ^&rojid. Ỉ£X'.C “íố* l2L( KÍílAq q ĩ tó C-ío Oộ* Cũ ỉlộ: líílLi đổil\ đjnH. j/ế lk (dt nHjnq qỉ fr'ỌM MUổk ỉứ»i ià làm w«.c. U£íi bdn tHiết teq cíláa c.íán nltóp pltói queJa| Wi tHọK D r'í :ìỉiô tór íưcnq mà cóc scUtt quepi^ c6 - lố i cá lư ợnq OLÌíon q ( ỉ e p i j có mộỉ cJốỉj ckốm llion. • •••••• Thủ thuật Theo mặc định, Access tắt tất cả action query trừ khi cơ sở dữ liệu nằm ở một vị trí tin cậy hoặc trừ khi bán thân cơ S I Í dữ liệu được tạo chữ ký và được lin cậy. Có thể khi bạn cố chạy một action query, không có gì sẽ xảy ra ngoại trừ một thông báo trong thanh thông báo hoặc thanh trạng t h á i hiển thị This action or event has been blocked by Disabled Mode. Đây là cách dễ nhất để thuyết phục Access chạy một action query như sau:
  40. 286 Chướng 3: Làm những điều tiện lợi bằng các 1. Nếu bạn không thấy thanh thông báo, hiển thị nó bằng cách chọn hộp kiểm Message Bar trong nhóm Show/Hide của tab Database Tools của Ribbon. Thanh thông báo xuất hiện bên dưới Ribbon. 2. Nhấp nút Options trên thanh thông báo để hiển thị hộp thoại Microsoft Office Security Options. 3. Nhâp Enable This Content để cho phép các macro, mã và action query chạy. Sự thay đổi này chỉ kéo dài cho đến khi bạn đóng cơ sở dữ liệu. Lân kế tiếp bạn md cơ sở dừ liệu, bạn sẽ phải lặp lai những bước này. • •••••• Thủ thuật Sau khi bạn nhâp nút Options, tùy chọn Message Bar trên tab Database Tools được tắt. Nó sẽ được bật (enable) lần kè tiếp bạn mỡ cơ sở dử liệu. Tạo an toàn các action query Bạn cần làm hoàn hảo một action query trước khi chạy nó sao cho bạn không làm hỏng dữ liệu. {Dĩ nhiên, nếu phạm sai sót, bạn có mội bân sao lưu rồi đúng Ichông)? Bạn tạo nó, xem nó, có thể test nó trên vài record trong một bản thử nghiệm rồi cuôl cùng chạy nó. Tiến trình tạo một action query như sau: 1. Sao lưu cơ sứ dữ liệu hoặc tạo các bản sao của các bảng mí action query sẽ thay đổi. ■ ị Ậ é ' Bổì vì cóc ocỉion qu€P4 có ikế Idm Pốỉ níiiểu cổnq việc (tốf U ộc xđu) liõ<j sao lưu Ipước ỉ^ỉij cliọL| quepi^. 2. Tạo query dưới dạng một select query. Trong cửa sổ Database, nhấp nút Queries và nhấp một trong các biểu tượng wizard. Thêm cac bảng (hoặc query) và các trường vào lưới thiết kế. Định nghĩa các tiêu chuẩn và thứ tự phân loảỉ khi cần thiết. Vân đề là tạo một query hiển thị các record mà action query tác động vào. 3. Xem các record mà query sẽ tác động vào bằng cách nhấp nút View.
  41. Chương 3: Làm những điều tiện iợi bằng các 287 ban t}iây cac record mà query 3ẽ tác (lộng iên. Rày chắc chắn bạn thấv dừ liệu mà bạn cần. 4. Sử dụng các nút Query Type dể chọn loại action query mà bạn cần - Make Table, Update, Append hoặc Delete. 5. Thêm thông tin vào những gì bạn muốn query thực hiện - cập nhật dừ liệu, thêm dữ liệu, tạo một bảng hoặc xóa dữ liệu. Các clii tiếl. ciưực ổề cạp ở pỉiar. tiêp the j về mồi loại cucry. Có thể bạn muôn sử dụng lại nút View để thấy các record mà query sẽ tác động đến. 6. Nhấp nút Run để chạy querv. Access cảnh báo rằng bạn sắp thực hiện các thay đổi mà ban không thổ undo. Nếu bạn thấy một thông báo nói rằng hành động đà bị ngãn chặn, tham khảo các bước ở cuối phần trước. 7. Mhiíp nút Yes đè’ chạ^' query. Access chạv query. 8. Kiểm tra các kết quả Kiểm tra các kết quả trong các bảng nền tảng là một ý hay. Nếu action query tác động lên một trường mà bạn sử dụng trong một t'é:i ch.uẩỉi, có ‘•.h-3 khôrg thấy các r3C0jd thíy đSi sai. khi gjf>ry Jà chạ\ - có Lhể bụn khúng xem bảng hoặc tạo một query mới để xem các kết quả. Q d i U ó ' A p p c n J , qucnẬ vò rr.olNG tg o rj» : l>ản 9 ;nới, XtiTi c ó c ÌẾ \ qiid đó I pont) íõí [cỉtnj ònli iiưi3nc) clnJ f/lifìi quepi) doiosỉieel. 9. Nếu bạn sẽ không sử dụng lại action query, hãy xóa nó. Chúng là những thứ nguy hiểm nằm quanh quẩn. ••••••• Thủ thuật Sau khi thêm một action query, mỗí lần bạn mở cơ sở dữ liệu bạn sẽ thấy một cảnh báo an ninh cho biết rằng nội dung nhâ't định trong cơ sở dữ liệu đà được tắt. Trừkhl bạn nghi ngờ một virus có thể thật sự hiện hĂj, nhấp Options, nhap Enable thls Conlent.
  42. 288 ___ Chưđng 3: Làm những điểu liện lợi bằng các Thay đổi dữ ỉiệu bằng các Update Query Bạn có thể sử dụng một update query để thay đổi một chồng dừ liệu cùng lúc - ví dụ để nâng giá lên 10% hoặc để thay thế một số sản phẩm bằng m ột sô' sản phẩm mới. Ví dụ, có thể bạn tạo một query để tìm các đơn đặt hàng đã chưa được gởi bao gồm một Golden Whistle, một mặt hàng bị gián đoạn, nhưng có một mặt hàng thay thế. Sau đó bạn sử dụng update query để thay đổi sô” mặt hàng trong các record đáp ứng các tiêu chuẩn đó thành New Golden Whistìe, mặt hàng thay thế. Sử dụng update query khi bạn làm việc trên nhiều dữ liệu hoặc khi bạn muốn cập nhật nhiều trường là điều hợp lý. Nhưng trước khi bạn đi sâu vào những điểm phức tạp cùa một action querv, hãy xem xét liệu bạn có thể sử dụng hộp thoại Find and Replace đơn giản hơn nhiều đổ tìm kiếm và thay thế dữ liệu thay vào đó hay không. (Xem chương '2 của phần II để biết thêm thông tin về hộp thoại Find and Replace). Bạn có thể sử dụng hộp thoại Find and Replace trong một datasheet được tạo bởi một query. Nếu bạn thay đổi dữ liệu trong một query, bảng chứa dữ liệu nền tảng phản ánh sự thay đổi. Để tạo một update query, ỉàm theo những bước sau đây: 1. Sao IuXj c ơ s ởdữ liệu và/hoặc tạo các bản sao của các bảng vôn sẽ bị ảnh hưởng bởi việc cập nhật. Các update query có thể khó có được ngay đúng, đo đó hãy chắ' chắn phòng hờ bạn cần đưa dừ liệu trở về trạng thái ban đầu trưức khi bạn đã chạy update query. 2. Tạo TTiột s-ìl^ìct query mớ; trong khung xem De.ìign. Xem chương 1 của phần này đế biết thêm thông tin về việc tạo m ột query. Bao hàm các bảng mà bạn dự định cập nhật hoặc bạn cần sử dụng các trường để thiết lập tiêu chuẩn update. 3. Đặt các trường trong lưới thiết kế. Thêm các trường mà bạn muốn thấy trong datasheet, các trường mà bạn muốn sử dụng với tiêu chuẩn để cho Access biết những ^ cần cập nhật và các trường mà bạn muốn thay đổi bằng việc sử dụng update query. Xem chương 1 của phần này để biết thêm chi tiết về việc sử dụng lưới thiết kế. 4. Thêm tiêu chuấn đê cho Access biết cách chọn các record mà bạn muôn cập nhật.
  43. Chưdng 3: Làm những điểu tiện lợi bằng các 289 Hình 3.1 minh họa select qaerv tim tấ'; c.ả đứn ủặi hàng chja gởi cho Golđen Whistle. Bạn thấy hai trường được bao hàm trong query - trường Shipped bởi vì chúng ta đang tìm các đơn đặt hàng đả không được gởi (đây là một trường Yes/No mà chúng ta đang tìm các giá trị No), và trường Product ID. Bởi vì chúng ta đang tìm các đơn đặt hàng chứa sản phẩm Golden Whistle. •I Ỉ^rtrỉ r/4Ỉ4i'4tr T«»H 0«í «f> .? r9-|'*Ỹ n tTj J *. „ - n , a IH - khi cần íh iết jho đrn kh. líỊ.i - hây i h ' lá.; ie.: 0'-ò rnà bạn muốn cập nhật trong datashoet. líình 3.2 minh họiì datashcet cho query được minh họa trong hình 3.1. Nếu bạn sử dụng một biểu thức để định nghĩa cách một record được cạp nhật như thế nào, có thế' bây giờ bạn muốn tạo một trường thử nghiệm đế viết biểu thức và hãy bâo đám rằng nó làm việc theo cách mà bạn muốn. Ví dụ, bạn muốn tăng giá lên 10%, bạn có thể tạo một trường mới: [New Price]: [Selling Price] * 1.10. Trường thử nghiệm xuất hiện trong cìatasheet khi bạn xem nó và có thể kiểm tra tính chính xác ciia nó. Để biết thêm thông tin về việc viết biểu thức, xem chương 2 cùa phần này. 6. Nhấp nút ưpđate Query trong nhóm Query Type của tab Design trên Ribbon để thay đổi query thành một update query. Access thêm một hàng update To trong lưới thiết kế.
  44. 290 Chưong 3: Làm những đỉểu tiện lợi bằng các. Creju fHM5ỉr0i* 'X llli- I AI) ư casi Còttcts "jP ưpđ*»» Piodud l«blei P ro d g ơ io ^ A0flr«ueook aEaMRis ^ Cctnỉ« n W^iỉYle Ooid^n (ỉolđem iVni^tl; J ỉmMMesr«0»ỉU6'( J lMn$««n«ri9 ,tj K 0 Ot4e<Oet«4ii Dot0ncft Vins ỉ«umlđct: Hình 3.2 Datasheet cho query trong hình 3.1 thể hiện các fl(ín flât hàng Golden Whíslle chưa đưực gởi. 7. Sư dụng hàng ưpdate To để cho Access biê”t cập nhật trường như thế nào. Sự cập^nhật dề nhất là thay đổi một giá trị thành một giá Irị khác băng việc đơn giản ị;Õ nhập giá trị mới trong hộp Updatẽ To cho trường thích hợp. C;ic cập nhật phức tạp hơn bao gồm cac biêu thức cho Access biết c [lính xác cách cập nhật trường như thê nào. Ví dụ, để tăng truơng Selling Price cho một bảng lên 10%. bạn sử dụng biểu thức Selling Price]* 1.10. Bạn có thể sử dụng một Expression Builde.- để giúp bạn xây dựng một biểu thức cliọ hàng ưdpate To; chỉ việc nhấp nó trong hộp va sau đó nhảp nút Build. (Xem chương L' của phần này để biết'thêm thông tin về việc sử dụng Expressioi; Builder để tạo các biểu thức). Nếu bạn đã tạo một trường thừ nghiệm ở bước 5, di chuyển biểu thức đên hàng Update To cho trường vôn đã được cập nhât và xóa trường mà bạn đã tạo để test bieu thức. Chú' ý rằng ban di chuyển biểu thức sao cho nó xuất hiện sau dấu hai châm Hình 3.3 minh họa query update tìm tất cả đơn đăt hàng cho Golđen Whistlẹ và thay đổi chúng thành các đơn đặt hànỉ cho New Golden Whistle. 8. Nhấp nút New. Access hiển thị datasheet với các record mà query thay đổi khi bạn chạy nó Nếu dữ liệu không đúng, quay trở về khung xem Desìgn đe^sửa các trường và tiêu chuẩn. Đáy là cùng dữ liẹu mà bạn đă hiển thị ở bước 5. Bạn hiển thị lại nó để bao đảm ban
  45. Chương 3: Làm những điều tiện lợi bằng các 291 thực hiện các tnay đối mà bạii :.nuôn. (/ẩn th ận kiểm tia khung xem Design để bảo ilám rằng hàng update To chính xác. •Co'ỏ'3i5 ÌT l .íi'*-. ■ io*Ịve ÌKiU Ịá«rf>t:ứit9 ùtiatae^ữeH ceng'^ •. Ir«»»*'aiu^-n ^STjperiySíi :‘Jỉrt‘iCt inow h:d» P i ‘ L r , ^y«f> í.ce ■ !■ iu r» i tN X * ' À • iii tr;e^/S O ỉy« ts t « b i « 1 ■ - ' k ’ » • 5 9 0 k ) JJ ^OMíds k 1 Ỉ»|('Te> Pé'» áp I pvoauctCO in\p J'ế _ 5 Q t> C'>4Tj( * ư p - p » ' 'p i ' _J ỉn>aiK'«t»)e( T«M* , 0 ”! t l l K Cid« d(i: "ỉ. ii Hình 3 3 Q ieíY này íìm tất cẻ ecír đặt hếno chc Goiden VVhistles ípí^oduct ÍD 2) chưa dược gởi và thay flối chúng thành New Golden VVhistle (Product 10 19). Bạn có thê' hiển thị chỉ các trường trong datasheet mà update querv đang cập nhật. Nếu bạn muôn có một bức tranh đầy đủ ’á(;n \ ề c.ic rỉCDid n.à bạr. đanị,- tập -ihật 'v' (lụ X9ia drr 'iệu cho rất cả trường), bạn có chề' chay dổi query trở ỉại thành mộc seìect querv bổ supg thêm các trường và xem datasheet mà tiêu chuẩn cúa bạn tạo ra. líhi bẹn thay đối query trứ lại thành một update query các t,ùv chọn X3t)Hcìt.g To mà ban dà thom vào viỉn nằm ở dó. Bạn cầu loại bo Lhõin hất. ky irưõng rn khui lưới quory trước khi bạn chạy upđate. Q đ i U c ' C h i <ác frư<^nq c^ưcc 'ộ o rAìỉỳị lic<íc áư ợr Sìì Jgnq cko cóc liêu cLuỐo m éi đưục pỉiép tponq các Iipclglc (ỊuePM. Hãy lưu V rằng datasheet thể hiển dừ liệu sè được thay đổi. Bạn không thể thấy những gì được tliay đối cho đến khi bạn chạy query. Khi bạn sử dụng một biểu thức trong hàng Update To, kiểm tra để bảo đảm rằng biếu thức tạo các bảng mong muốn bằng việc tạo các trường tính toán trong một select query là điều quan trọ n g (xem bước 5). 9. Nhấp nút Run để chạy update.
  46. 292 Chường 3: Làm những diều tiện lợi bằng các Access cẩnh báo bạn rằng sau khi các record cập nhật bạn không thể undo các thay dổi như được minh họa trong hình 3.4 10. Nhấp nút Yes để cập nhật dữ liệu. You are about t o run ân updale qưery t u n m o d i ế y d à t ă i n y o u r K õ b i e . Ị \ A»e yotd sưe Ỹ 0 ‘J to run thfs ỉype of è í i v x i q u e r y > F ú r r t f o i m àtiôn ũft h o w to p i ê v « % t Ì K t f t o m á s p \ * y , n ỉ Ị «v# fy hm^ you run ATt *cĩ|&n ® j«rv ck*. H e t p > > L N) M e lp Hình 3.4 Khỉ ban nhấp núl Run dể chạy mộ! update query, bạn Ihây .nột :ả;ih báo như cảnh báo này. 11. Kiểm tra các bảng có các trường bị ảnh hướng để xem update query có làm việc chính xác hay không. Hình 3.5 minh họa bảng Orders với bảng con Order Details. Goldẹn Whistle trong các đơn đặt hàng chưa được gởi đượcthay thế bằng New Golden Whistles. 12. Xóa query nếu bạn sẽ không sử dụng nó lại; nhấn Ctrl + s đế ỉưu nó nếu bạn sẽ cần nó lại. 4*— 4,'ĩ '?•' . OrderíD • OrđèrDaie • C o n U c ĩ l O . Shlpp&d • PÌỹmẹnĨMí' CCTypV • CCNumbVc* • C(-^ 6 4 / /9 9 /2 / 2 0 0 0 0 7 7 333 3 n Pv'Chflí« Ordg . _ PrOduciỉO oty • ] 1 VV hlsth V 3 W 3 y T o o ' $C ^nr'*r 1 : LTbrcak.^sbir PDA 1 1 7 4/15/2007 ỈO 0 Cash ProQuctiO • 0?y . C c id d o W h if lf « J N ^ w O o ỉa ^ n w h is tl& 1 MagiC Inkvvell 1 BudgetMPỈPÌâvef i 1 s 4/23/2007 s □ CréditCarđ MasĩsrCâPđ 45651B743733 ProdurtlD - Qỉy • Nevv Gold«n W ^istli V 1 P tav«^ 1 unbreakdbỉe PDA 1 *. t Sc&r<h Hình 3.5 ĐI đến các bảng nển tảng để thấy các thay aổi được thực hiện bởi update queiV.
  47. Chương 3: Làm những điều tiện lợi bằng các 293 Tạo các bàng mói bằng các Make Table Query Một make table querv hữu dụng nếu bạn cân tạo một báng mới để xuât hoặc để sử dụng làm bản sao lưu. Bạn có thể sử dụng bảng make table query đê’ tạo bảng mới chứa một bản sao cơ sở dữ liệu trong một bảng hoặc query. Bảng mới có thể chứa một số^, tất cả trường và record tù một. bâng hiện có, kết hợp các trường từ một hoặc nhiều bảng - tương tự như các kết ouả ciia một select querv. Vi dụ, bạn có thế sử dụng một make table query để tạo bảng hàng đà mua Golden Whistle - bạn quyết định chia sẻ các địa chỉ của họ với một trường học vốn đưa ra các bài giảng về mặt hàng này. Để tạo một bang bằng một make table query. làm theo những bước sau đ'ly: 1. Tạo một select qiiery vôn tạo các recorri mà bạn muôn trong một báng mới. Xem chương 1 của phần này để biết thêm thông tin về việc tạo niộr select querv. Rình 3.6 minh họa một select query tìm thông tin liẽn lạc cho tấ t zề. khách hà;ig đã từng đặt rr.ua Gdlden Whlstl(\ Chú ý rằng' mặc dù chúng ta chỉ cần các trường tử bảng Address Book và bảng Order Detaiis, nhưng bảng Orders cũng được đưa vào trong query để định nghĩa mối quan hệ giữa bảng Ordor Details và bái'g Address Book. - y «•3 V . __ __ r i t . .H :: 'i c y i ^ >- ' ' > t, • » V I'jl it«t »D >I| 0'4erratf _^| «*«! tui'* Co Tieu: t04tíiĩ gđ«k Aa4'«ỉ 99&K Aoatệti ĩ:ỏj z ỉort 0 B Í?J S3 0 ỉ k V u •trt.r 'V'" Hình 3.6 Select query tìm các ktiách hàng đã đặt mua Golden VVhistle (sô* mặt hàng 2) và liệt kê các ỉên và địa chỉ của họ. 2. Nhấp nút View trên thanh công cụ để xem các kết quả.
  48. 29 4 Chương 3: Làm nhưng điều tiện lợi bằng các Hình 3.7 minh họa datasheet cho query. 3. Nhấp nút View trên thanh công cụ để hiển thị khung xem Design. Chúng ta không muôn bao hàm trường ProductlD trong bảng mà make table query tạo, do đó chúng ta quay trở về khung xem Design và hủy chọn dâu kiểm trong hàng Show cho trường ProductlD . 4. Thay đổi loại query bằng một make table query bằng cách nhè’p Make Table trong nhóm Query Type của tab Design trên Rib- bon. Ngay lập tức Access hiển thị hộp thoại Make Table được minh họa trong hình 3.8. T7T i 11» «l> • & r o d « x t * D • ị i t i ì • L j s N d r r 0 £ d ữ ’ « s U * C it y ỳsiUĨ V ĩ o n P n . W icgc»5 íTC eSĩírtĩỉy, N d t h u a Q G « ỡ T £ e fc » : o v i c M « C « .% V 6 O l Ạ T C c r i l A A lế' visionỉr> Jrtf. 1 i:irw riy Noar N i ị A n K ) l { 'ti P -C ^ -ÍV ÌI C i r i^ v d lc A * f 3 Cdjđ«^S\Kls;l« í i ị v b K \ ỉ23ỉhirel4r» ỉk « e d « ớ k e < » T 4*9 I »1 » ■ ^ d ! » Hình 3.7 Datasheet hiển thị các khách hàng và thông tin liên lạc của những người mua Golden Whíslle. Mak« New Tabỉe T ^ le Name: ; Golden Whistle Customersị V i ® Currenỉ Dâ(âha«e Cancel O ^nother Dâtôbase: He. UrXùr:íi Hình 3.8 Hộp thoại Make Table.
  49. Chưctng 3: Làm những điều tiện lợi bằng các ___295 5. ìro n f hộp 1'able Name, gò nhập tên của bang mà bạn dang tạo. Mặc dù bạn được đưa ra một danh sách xố xuông, nhung có lẽ bạn muốn tạo một bảng mới tinh với tên mới tinh, do đó gõ nhập một tên cho bảng vôn không phải là tên của bất kỳ bảng hiện có trong cơ sở dữ liệu. 6. Chọn tạo bảiig mói trong cơ sở dừ liệu hiện hãnh hay trong một sẻ dữ liệu khác. Nếu bạn chọn tùy chọn Another Database, bạn có thể duyệt tìm một cơ sở dữ liệu hiện có. (3^11 k k ô n q ik ế tg o co ỉ nq mội cosỗ dứ liệu liiêri có. 7. Nhấp OK để đóng hộp thoại. Nếu bạn cần thay đổi các xác lập trong hộp thoại Make Table, Iihẵ’) lại n tt Make T'able đ»'ỉ hiiỉn thị hộo thoại Makc- Table. 8 Nl'.â”p nút để th ấ y c;lc record sõ n ằir trr-ng brlng mới. Có thế bạn cần quay trd về khung xem Design để biên tập query cho đến khi tất cả query mà bạn muôn trong bảng mới xuất hiện irong datasheet khi bạn nhấp nút View. 9. Mhâp mit Rua -lc’ lạ<< 'oảng ^nứi Access hỏi bạn có chắc chắn hay không - bôi vì bạn sẽ không thể iMclo các th u \ ciổ^. 10. N hấp P Ú t Yos để tạo bản g inới. Act-ess lặng ló tạo bàng mới. 1J. Kiểm tra bảng mới và bảng cũ để bảo đảm rằng bạn có được nhiíiig gì trong bảng niới. Có thể bạn muôn chỉnh sửa thiết kế hảng - các bảng mứi không thừa kế các thuộc tính trường hoặc xác lập khóa chính (primary) từ bảng gốc. (Xem chương 1 của phần II để biết thêm thông tin về thiết kế bảng). Di chuyển dữ liệu từ bảng này sang bảng khác bằng các Append Query Một append query sao chép dữ liệu từ một hoặc nhiều bảng hoặc query trong cơ sở dữ liệu và thêm dữ liệu được chọn bởi query dưới dạng các record mới vào một bảng hiện có. Như với các query khác, bạn
  50. 296 Chương 3: Làm nhưng điều tiện lợi bằng các có thể sử dụng tiêu chuẩn để cho Access biết chính xác dữ liệu nào để thêm . Các append query được sử dụng để lưu trữ thông tin, di chuyển dữ liệu giừa các cơ sở dữ liệu cũng như các công việc hữu dụng khác. • •••••• Thủ thuật cát và dán là một cách dễ dàng hơn để thêm các record từ bảng này sang bảng khác nếu bạn chí thêm vài record. (Xem chương 4 của phần II để biết thêm thông tin). Access trở nên hơi kén chọn về dữ liệu mà bạn thêm sử dụng một. append query đặc biệt vứi các trường khóa chính. Bạn phải tuân the< Iihữiig quy tắc sau đây kíii tném các record vào một bang khác. #Dữ liệu mà bạti muốn thêm, có các giá trị duy nhất trong rnỉờ/n khóa chính. Một giá trị trong tnỉờng khóa cbínb. duy nhất trong bản ‘ mà dữ liệu cĩược thêm bởi vì theo định nghĩa, giá trị không thể lập lai trong một trường khóa chính, hoặc nến tníờiìg tfốỉig hoặc nến củn,^ một giá trị hiện bữn ỉrong bảng. Access không thêm các record. ^ Nén một trường AĩitoNiimber ỉiằm trong bảng mà dừỉiệu đìíợc thêm vào. không tbêm d ữ ỉiệìi tivìig tntòng đó - Access Uỉ độìỉỉị tạo các số mới trong tntòng AỉitoNìimber cho các record mời; các giá trị cũ không Ihể điíợc tbêm íủo. ^ Loại d ữ liệìi của mỗi trường mà bạn thêm phải khớp ĩứi loại dữ liệu của các trường Irong bảng mà chúng đì(ợc thêm vào. Để tạo một nppend query, làm theo những bướe sau đây: 1. Tạo một select query vốn tạo các record mà bạn muốn thêm vuo mọt bảng khác. Hiển thj query trong khung xem Desigm. Xem chương 1 của phần này để biết chi tiết về việc tao môt select query. Bạn có thể kiểm tra tiêu chuẩn bằng cách xem datasheet để thấy liệu query chọn dữ liệu mà bạn muốn xuất hiện hay không. Nhấp nút View trên thanh công cụ để hiển thị datasheet va nhấp lại nút View để quay trở về khung xem Design. 2. Thay đổi loại query thành một append query bằng cách nhấp nút Query Type. Nhấp nút Append trong nhóm Query Type của tab Design trên Ribbon. Ngay lập tức Access hiển thị hộp thoại Append được minh hoa trong hình 3.9.
  51. Chương 3: Làm những điều tiện lợi bằng các 29 7 A?c»erid To 1. ĩ ablc N 3ír«: 'Atjoỉ le Cuvtíiiier 5 Cảncé>l C n rrâ T it Another Dât4b«se: Hình 3.9 Hộp tlìoại Append ctio Access biết nơi bạn muôn thêm dữ liệu. 3. Chọn bảng mà bạn muốn thêm các record trong hộp Table Name. Bạn có thể hiển thị tùn của tấí i-ả bảng trong cơ sở dữ liệu mở bằng cách hiển thi danh sách xổ xuống trong Table Name. Bạn cỏ thể thêm các i’ecofd \'ào một bảng trong một cơ sor dữ liệu khác - tìm cơ sở dữ liệu bàng cách nhấp nút Browse. 4 N hấp OK ^Vccess thêm một hàng nữa vào lưứi thiết kế: Append To. Nếu các têu irường Kliớp voi tén cùa các trường inà bạn đang thêm, Access tự động điền vào hàng Append To tên của các trường mà bạn tự động thêm các record vào. 5. Cẩn thận kiểm tra hàng Appond To của lưới query và thực hiện b ít kỳtìi&y đổi cảr; Ihiếỉ. Các hàng Field và Tablii cho thấy trường xuât phát từ đâu và haiig Apptn-i Tv) oho tì.ây dú' jiậj được xen. ó dâj. Nếu môt số trườníĩ khôngr cõ các tên trường tronp: hàng Append ĩo, hion thị dann sách xố Xiiõng irong hang' Appond và cnọn tện cda trường mà bạn muốn théra vào. Khi hoàii tất, kiểm tra môi cột để bảo đảm rằn? • Field chứa tên cãa Inỉòiiíi chứa dữ liệu mà bạn muốn ibêtn rào inội hảng khác. 9 Hàng Tabỉe chứa tên của bảniỉ chưa diì HỘIỈ. M Hàng Append To chứa lớn củữ irườnụ nià d ữ liệíi sẽ điỉợc thêm vào. u Ttiỉờiig không Xìuii hiộn }ihiền ìắn irong hàng Appctid To. 6. Nhấp nút Run để chạy append query. Access cho biết rằng bạn sắp thêm các hàng và bạn sẽ không undo các thay đổi. Cẩn thận về việc chạy query này. Nếu bạn chạy nó hai lần, bạn thêm các record hai lần.
  52. 298 Chương 3: Làm những điều tiộn lợi bằng các 7. Nhấp nút Yes để chạy query. Access thêm các recorđ vào bảng mà bạn dã xác định. Bây giờ bạn có cùng một thông tin trong hai bảng. 8. Lưu query bằng cách nhấn Ctrl + s nếu bạn nghĩ bạn sẽ sử dụng lại nó. Nếu không, đóng nó mà không lưu. 9. Kiểm tra các kết quả. Kiểm tra bảng mà bạn đã thêm vào cũng như bẳng mà bạn đã thêm từ đó để bảo đảm rằng Access sao chép tất ca record mà bạn muốn được sao chép. Xóa nhiều Record bằng cóc Deleie Query Một delete query xóa toàn bộ các record ra khỏi các bảng thường dựa vào tiêu chuẩn mà bạn cung cấp (mặc dù bạn cũng có thể sử dụng các delete query để xóa tất cả recorđ trong một bảng trong khi giữ nguyên vẹn các thuộc tính trường và bảng). Rõ ràng các delete query là một tính năng mạnh và nên được đôi xử tôn trọng. Các delete query thì nguy hiểm - chúng xóa vĩnh viễn ra khỏi các bảng trong cơ sở dữ liẹu. Hăy chắc chắn bạn có một bản sao lưu trước khi chạy một delete query. Có thể bạn muốn sao lưu toàn bộ cơ sở dữ liệu hoặc chỉ các bảiĩg bị ảnh hưởng bởi delete query. ^ Bdi vì các delete query có thể gây thiệt hại như vậy vúi cơ sô dữ liệu có thể bạn muôn xem xét xem có nèn xóa bằng tay các riicord có d á ò ưng những nhu câu của bạn hay không. Bạn có thể xóa một record bằng cácb chọn nó (nhấp recorđ selector), hộp xáin nằm bên trái record) và nhân phím delete trên bán phím hoặc nhấp nút delete record trôn thanh công cụ. Bạn ■;ó thể chọn một nhóm record bằng cách nháp đôi record selector đâu tiên và rê đến cuôì trong nhóm hoặc bằng cách chọn record đâu tiên và sau đó Shiíl + nhấp record cuôì cùng tronơ nhóm. €niili Ikiu ĩũ iđ c bHi tỌK cHọq iHộtàeXtit queUỊ, bỌK CÌK bìiị bdnq tó tJọK xóa dfl liệu tó feỉ6i đổ có đuọc tộo quan l ị W3i bốH bRác co 2(3 da ỉiệu kRuiĩ£ tóo. MỘt só ttuởnq ÍỢp, một deỉete qufijaj cứ ú i XÓQ c4c. liCoul các bỏK^ đuợc tọo quQK Jíí\iflẬ. tỏitỂỊ nứ bỌK xóa dfl ỉiệu tữ feRỏi đố pllía Một của w5i qua* ÍẬ I«ột đối nHilu w CQSCadíR^ cUỉete đuợc bẠí tío I«5i quan Kậ, Ac£a 2s tìtn da ỉiệu đuọt tộo (ỊUOK đlÍẶ xóa. CVí dụ, bảusị Pbducts (ưốK cHứQ tlìỏn^iiA (>|}o tót cỏ SỎK ptótt đõ Mk) được fọoquQK ịị Oới OidsA 'DttóiỄs (tói cứt I«ặt đa đột đuợc feê). Mối quan ÍẬ ía đói Dới PbduM (txia pHía KHi bọn
  53. Chưởng 3: Làm những diều tiện lợi bàng các ___299 đở (ọo Mối quQn Hậ ^iao k i tỏnq sử i'.ỉ ạn dỗ £ m{jO)lí'^ ỉ?ê.tfeẰeKtiQt ĨKÍÊ^- Iũt(| ưủ CcscacU. 'De.ktt ỉ?6ỉciítd f?fcCoiids, ■tllì Oĩậc.ròữ cứG líũotá ÍO íỉRỏi bỏK^ P k x iu c ts dồKỖÉ*. uiịC. Ả tí& s s XỐQ CÓC tiẾCũid na feHỏi DỖKI^ O d a Detaiis. ồác kHúcH Rànq cóiU fellôiiq KÍỘK đuọc. cđa sân pRiỉirt »ứ Họ đa đột ơà íiCoxd rò fcọ đột «ởt ỉàíi^ dó felỉỏK^ Hau tionq Cđ sô da íiậu. TÌOK^ tiuídiiq fc?p tóiị tíi-K Một tuỉởiiqDiscoiitinuecl ửởo itót bỏK^ Pkxlucts có iHI ỉủ «(ộí QkỒ' ptứp Í6Ỉ tnií W ịt x£si ÌÁC ẰiOCiul. (c)é b,éi tỉàM tỉán*^ t;* í.>è iá c itóiquQầ I*ộ ức ' i v n h h c à 'i r h h ĩ b h( jf là các giá tìỊ từ các I ĨI'Ợ( ÌXÌ'* !'ả'ìc Iriríỉ 'lỉ íi Ihic' 1'C >X''ị!iũ‘i •'.huãĩ! - ĩh''iy t’ì toàn lẬ> rccord )nả cỉelele .'jiieiỵ i'C ' Ihậl .sự xóci khi hạn chạy nó. Làm theo những bước saj đáy để tạo một delete qưery; 1. Troiig khung xem Deáign, tạo ưiột select query vốn tạo một record mà bạn muôn xóa. Xcm chương 1 của phần này để biêt chi tiết về cách tạo một select query. Hãy chắc chắn bạn thèm vào query tất cả bảng chứa các record mà bạn muôn xóa. 2. Rê tùy chọn * từ mỗi danh sách trường ở nữa trên của khung xem Design đến lưới thiết kể để hiển thị tất cả trường từ bảng hoặc bảng vôn chứa các record mà bạn muôn xóa. Sử dụng tùy chọn * sẽ cho phép bạn thấy tất cả trường trong bảng. Khi bạn thay đổi query thành delete query, chỉ * cho phép bạn hiển thị các trường không được sử dụng cho tiêu chuẩn.
  54. 300 Chương 3: Làm những điéu tiện lợi bằng các 3. Thêm các trường vào lưới thiết kế mà bạn có tiêu chuẩn và sau đó định nghĩa tiêu chuẩn đó. 4. Nhâ’p nút View trên thanh công cụ để xem các datasheet. Các record bạn thấy là các record mà bạn muôn nếu query xóa. 5. Nhấp lại nút View để quay trở về khung xem Design. Thực hiện bât kỳ thay đổi cần thiết sao cho query chọn chỉ các record mà bạn muốn xóa. 6. Thay đổi loại query thành một delete query bằng cách nhấp nút Delete trong nhóm Query Type của tab Home trên Ribbon. Klii bạn thay ủổi loại query tư select tnànỉi delete, Access thav đói các hàng trong lưới thiết kế. Các hàng Sort và Show dược loại bỏ và hàng Delete được thêm. 7. Chọn một giá trị cho hàng Delete (nếu nó không được xác lập từ đầu) từ danh sách xổ xuống bằng cách sau đây: xác lập các trường mà bạn muốn xem trong tùy chọn form; xác lập các trường định nghĩa tiêu chuẩn sang tùy chọn Where. Hình 3.10 minh họa một ví dụ về một đelete queryvốn sẽ xóa các record vứi giá trị Product ID là 35 ra khỏi các bảng Order Details và Products. Chú ý rằng khi bạn xem Datasheet, bạn thấy dữ liệu từ hai bảng khác nhau. Tất cả dữ liệu đó sè bị xóa và do đó dữ liệu sẽ bị xóa ra khỏi cả hai bảng. { ^ 3 Qgiiylíoll HMBr tìaỉ* ‘ (T^ưniữi v ' a i V í í — *• * • • J — ^ ^ 'C«IU:1IPỈ TtDiẽ hMn«i 5 h « r . - • T4o:e ^ ith.i j í:' - '■* ^P»rdire;«r} Re.ưt. ^ V ^ Ii •_ ỉ.ia .i ; Q oy e c r r tí* i n s ^ Ị , s ~ « « _ _ ® . 1 • • u . I Cont»d Leolup Qry Qry V ProducCỈO ' ^— OtđerlDO tđ erlD * * , . _ . I rl' Oưr OưcProôuữíD Produữ iD 4 9 N— ^ ProducSO ProdvcCO Cuit«m«r IdOkup QívQíy Lj ^ ^ I P«oclMftN*(n«PiodMct N*m« QfyQ íy ^ D»t«Tifw p*nj Sort Qry Ct4ti Dtuits C i0ct Ocli«tj D fgệQiy Cnt i>Qry er oraer D«lỉip| iSL AeaOy ',n Hình 3.10 Delele query này xóa các record có giá trị Prođuct ID là 35 ra khòi bảng Order Details và bảng Products.