Vµi nÐt vÒ Access 2000
Xem bai viet bang font Unicode

PCWorld VN 5/99

    Tõ ®Çu 1999, Microsoft giíi thiÖu b¶n beta 3 cña Office 2000, trong ®ã chiÕm vÞ trÝ xøng ®¸ng lµ Access 2000 hay cßn gäi lµ Access 9. Nh÷ng tin tøc ®Çu tiªn vÒ c«ng cô ph¸t triÓn øng dông kh¸ch/chñ nµy chñ yÕu tËp trung vµo 2 c«ng nghÖ míi víi tªn kh¸ gièng nhau lµ Microsoft Access Data Projects (ADPs) vµ Data Access Pages (DAPs). C¬ së d÷ liÖu client/server dùng b»ng Access b©y giê cã thÓ ®­îc l­u trong tËp tin víi d¹ng thøc kiÓu míi gäi lµ .ADP (ng­êi dïng muèn dïng d¹ng thøc .MDB còng vÉn ®­îc). TËp tin ADP chøa c¸c mÉu biÓu (form), b¸o biÓu (report) vµ c¸c thµnh phÇn kh¸c cña giao diÖn, trong khi b¶ng vµ query (cßn gäi lµ c©u hái hoÆc b¶ng truy vÊn) ®­îc ®­a vµo tËp tin d÷ liÖu cña SQL Server 7. NÕu nh­ tr­íc kia, Access dïng Jet engine ®Ó truy xuÊt d÷ liÖu, th× nay cã thÓ thay c¬ cÊu nµy b»ng SQL Server 7, mét c¬ cÊu CSDL míi, rÊt m¹nh cña Microsoft. TÊt nhiªn, vÉn cã thÓ dïng Jet engine, nh­ng c¬ cÊu nµy còng ®­îc n©ng cÊp (phiªn b¶n míi cã sè hiÖu 4.x): ng«n ng÷ SQL theo chuÈn ANSI 92, thªm kh¸i niÖm VIEW (khung nh×n), Procedure (thñ tôc l­u s½n), kh¸i niÖm giao t¸c phÝa Server, råi mét lo¹t kiÓu d÷ liÖu míi nh­ cña SQL Server nh­ Decimal,... Access 2000 hç trî bé ký tù Unicode mµ kh«ng cÇn ®Õn c¸c phÇn mÒm bæ trî (add-on). C«ng cô Access Upsizing Wizard næi tiÕng nay ®· trë thµnh bé phËn cÊu thµnh Access 2000 mµ kh«ng cÇn ph¶i t¶i xuèng (download) tõ c¬ së Web cña Microsoft (®©y lµ c«ng cô dïng ®Ó n©ng cÊp CSDL Jet hiÖn cã lªn SQL Server). TËp tin .MDB cña Access 2000 kh«ng ®äc ®­îc trong c¸c phiªn b¶n cò cña Access. B¹n cã thÓ chuyÓn ®æi tËp tin .MDB thµnh .ADP mét c¸ch dÔ dµng, tuy nhiªn ng­îc l¹i th× kh«ng ®­îc. TËp tin .ADP cho phÐp vËn hµnh Access nh­ mét øng dông mÆt tr­íc (front-end) trong khi SQL Server 7.0 dïng lµm back-end (mÆt sau, hËu tr­êng). Kh«ng cÇn ph¶i n¹p c¬ cÊu Jet khi thùc hiÖn ADP.

    Cßn DAP (Data Access Pages) th× sao? Nã cho phÐp dïng Access ®Ó t¹o c¸c øng dông Web ®éng trªn nÒn ASP (Active Server Pages). Truy xuÊt d÷ liÖu b©y giê chñ yÕu thùc hiÖn qua giao diÖn míi lµ ADO (Active Data Object). Cã thÓ coi ®©y lµ m« h×nh ®èi t­îng ®­îc sö dông ®Ó lµm viÖc víi d÷ liÖu qua c«ng nghÖ OLE DB cña Microsoft.

    Bµi b¸o nµy ®Ò cËp ®Õn nh÷ng tÝnh n¨ng míi ®­îc coi lµ thó vÞ nhÊt cña Access 2000.

§Æc tÝnh Dirty

    Ch¾c b¹n ®· lµm quen víi ®Æc tÝnh Dirty cña mÉu biÓu Access (chØ cã tõ Access 97). Nã cho phÐp tõ ch­¬ng tr×nh viÕt b»ng VBA (Visual Basic for Applications) cã thÓ x¸c ®Þnh ®­îc d÷ liÖu trong b¶n ghi hiÖn thêi (g¾n víi mÉu biÓu) cã thay ®æi vµ ®· ®­îc ghi ch­a. B¹n cã thÓ söa ®Æc tÝnh nµy thµnh gi¸ trÞ False tõ m· VBA ®Ó ghi b¶n ghi ®ã ra ®Üa. ThÕ nh­ng nÕu ta cÇn thùc hiÖn thao t¸c g× ®ã khi mÉu biÓu bÞ thay ®æi th× lµm thÕ nµo? Access 97 kh«ng cã sù kiÖn gäi lµ Dirty. Ch¾c b¹n ®· ®o¸n ra: Access 2000 cuèi cïng ®· cã sù kiÖn (event) nh­ vËy. Thñ tôc xö lý sù kiÖn Dirty cã tham biÕn Cancel. Khi cÇn cã thÓ thùc hiÖn lÖnh Cancel = True ®Ó th«i (undo) kh«ng lµm nh÷ng g× võa thay ®æi víi b¶n ghi hiÖn thêi n÷a. Nh­îc ®iÓm lín cña sù kiÖn Dirty lµ nã chØ x¶y ra khi ng­êi nhËp liÖu b¾t ®Çu söa néi dung mÉu biÓu, chø kh«ng x¶y ra khi ®Æc tÝnh Dirty bÞ söa thµnh False tõ ch­¬ng tr×nh. Nªn cã thªm sù kiÖn, ch¼ng h¹n víi tªn lµ Undo ®Ó xö lý t×nh huèng ®ã (b¹n cã thÓ lÊy tr×nh FrmSmp 97.exe tõ c¬ së Web cña Microsoft ®Ó tham kh¶o c¸ch m« pháng sù kiÖn After undo, nã sö dông mét ®iÒu khiÓn tÝnh to¸n víi biÓu thøc lµ mét hµm ng­êi dïng, vµ hµm nµy thùc hiÖn mçi khi ®Æc tÝnh Dirty cña Access 97 thay ®æi. Dïng kü thuËt nµy ®Ó m« pháng sù kiÖn Dirty, nh­ng kh«ng hiÖu qu¶ b»ng sù kiÖn Dirty cµi s½n trong Access 2000).

§Þnh d¹ng cã ®iÒu kiÖn

    §©y lµ mét trong nh÷ng tÝnh n¨ng mµ ng­êi lËp tr×nh Access khao kh¸t nhÊt: lµm thÕ nµo ®Ó chØ mét sè dßng nµo ®ã (vÝ dô: c¸c dßng víi doanh sè lín h¬n 10.000 USD) cña mÉu hoÆc b¸o biÓu hiÖn lªn víi d¹ng thøc theo ý muèn (vÝ dô: cã mµu ®Ëm h¬n c¸c dßng kh¸c, ®Ó dÔ ®äc, dÔ nhÊn m¹nh). Víi report th× cã thñ thuËt thªm cÊu tróc IF - Endif vµo thñ tôc xö lý sù kiÖn Format cña vïng (section) chøa hép v¨n b¶n cÇn kiÓm tra vµ nhÊn m¹nh. (NÕu tháa ®iÒu kiÖn nµo ®ã th× söa c¸c ®Æc tÝnh Font, Fontweight,... cña ®iÒu khiÓn cÇn ®Þnh d¹ng riªng.) T­¬ng tù, ®èi víi mÉu biÓu kiÓu Single (®¬n b¶n ghi) ®­a nhãm lÖnh kÓ trªn vµo thñ tôc xö lý Current. ThÕ nh­ng víi kiÓu mÉu biÓu liªn kÕ (Continuous Form, mÉu biÓu ®a b¶n ghi), lµm nh­ vËy sÏ thay ®æi d¹ng thøc cho tÊt c¶ c¸c b¶n ghi! NghÜa lµ kh«ng ®¹t ®­îc môc ®Ých ®Æt ra. V©ng, b©y giê th× nhãm Access cña Microsoft ®· l¾ng nghe nguyÖn väng cña ng­êi sö dông: cã c¸ch dÔ dµng ®Þnh d¹ng cã ®iÒu kiÖn (conditional formatting) cho tõng hép v¨n b¶n, tõng hép chän combo, tõng dßng mét. Cã thÓ x¸c lËp nhiÒu ®iÒu kiÖn ®Þnh d¹ng cho mçi ®iÒu khiÓn (d­íi d¹ng biÓu thøc luËn lý hay tr¹ng th¸i ®iÒu khiÓn ®ang trong focus hay kh«ng). NÕu cã vµi ®iÒu kiÖn ®óng, sÏ chän ®iÒu kiÖn ®óng ®Çu tiªn kÓ tõ ®Çu danh s¸ch. B¹n ®Æt ®iÒu kiÖn trong c¶ chÕ ®é Design (khi thiÕt kÕ) hoÆc chÕ ®é Form (khi më mÉu biÓu ®Ó lµm viÖc, tøc lµ ®Þnh d¹ng ®éng, trong thêi gian vµo hoÆc xem sè liÖu). H×nh 1 cho thÊy hép tho¹i Conditional Formatting më ra khi ng­êi dïng nhËp liÖu hoÆc xem form b»ng c¸ch vµo thùc ®¬n Format, sau ®ã chän Conditional Formatting.

H×nh 1. Hép tho¹i ®Þnh d¹ng cã ®iÒu kiÖn më trong Form View.

    Ng­êi lËp tr×nh VBA cã thÓ kiÓm so¸t viÖc ®Þnh d¹ng cã ®iÒu kiÖn b»ng c¸ch thªm hoÆc lo¹i bá c¸c ®èi t­îng kiÓu FormatCondition tõ s­u tËp (collection) FormatConditions, vµ ®Æt l¹i c¸c ®Æc tÝnh cña c¸c ®èi t­îng ®ã. VÝ dô, ®Ó doanh sè hµng th¸ng trë nªn ®Ëm vµ cã mµu xanh d­¬ng nÕu lín h¬n h¹n møc nµo ®ã (nhËp s½n vµo hép v¨n b¶n textMonthQuota cña mÉu biÓu), ta dïng ®o¹n m· sau:

With Forms!frmSales!txtMonthSales. FormatConditions
.Add(acFieldValue, acGreaterthan, "=[txtMonthQuota]")
.FontBold = True
.ForeColor = vbBlue
End With

G¾n mÉu biÓu víi bé b¶n ghi

    Ngay trong Access 2.0, ng­êi lËp tr×nh ®· cã nhiÒu c¸ch ®Ó kiÓm so¸t ®Æc tÝnh Record Source cña mÉu biÓu. B¹n cã thÓ göi tªn b¶ng, tªn c©u hái (query) hoÆc c¶ mét lÖnh SELECT cña SQL vµo ®Æc tÝnh nµy ®Ó ®Æc t¶ nguån b¶n ghi. Víi bé b¶n ghi (recordset) tÝnh ®­îc trong VBA th× r¾c rèi h¬n: ph¶i t¹o b¶ng trung gian hoÆc b¶ng truy vÊn chøa d÷ liÖu cÇn thiÕt. Trong Access 2000 cã thÓ g¾n recordset tÝnh ®­îc víi mÉu biÓu. Access 97 truy cËp bé b¶n ghi cña mÉu biÓu b»ng ®Æc tÝnh RecordsetClone, nh­ng vÉn ch­a cã ®Æc tÝnh Recordset ®Ó Ên ®Þnh bé b¶n ghi nguån.

    TÝnh n¨ng míi nµy cña Access 2000 rÊt linh ho¹t, nhÊt lµ khi t¹o recordset trong mét giao t¸c (transaction). Khi quay lui (roll back) toµn giao t¸c, tÊt c¶ c¸c thay ®æi lµm víi mÉu biÓu dùa trªn bé d÷ liÖu t¹o trong giao t¸c, kÓ c¶ c¸c thay ®æi t¸c ®éng ®Õn nhiÒu b¶n ghi, sÏ ®­îc hñy. Trong qu¸ khø th× cùc kú vÊt v¶: th«ng th­êng ph¶i dïng b¶ng trung gian hoÆc m¶ng d÷ liÖu.

H×nh 2: §¨ng ký chÕ ®é Compact on Close vµ tËp tin Access sÏ ®­îc nÐn tù ®éng khi ®ãng (miÔn lµ kh«ng cã ai kh¸c vÉn cßn më nã).

    Cã thÓ g¾n mét recordset víi vµi mÉu biÓu mét lóc. D÷ liÖu trong mÉu biÓu nµy sÏ tù ®éng ®ång bé víi d÷ liÖu trong form kh¸c, mµ quay lui giao t¸c còng sÏ quay lui ®èi víi d÷ liÖu trong tÊt c¶ c¸c biÓu mÉu. Ngay c¶ khi dïng c¸c recordset víi nhiÒu mÉu biÓu mµ c¸c recordset ®ã ®­îc t¹o trong mét giao t¸c, chóng còng rollback ®­îc cïng nhau.

    Trong c¸c tËp tin ADP, c¸c bé b¶n ghi ADO cã thÓ cËp nhËp (söa) ®­îc qua form nÕu c¸c ADP nµy ®­îc tèi ­u ®Ó dïng OLE DB t­¬ng t¸c víi SQL server. NÕu dïng Jet (tøc dïng tËp tin .MDB) vÉn ph¶i sö dông DAO (Data Access Object) ®Ó t¹o recordset kiÓu read/write cho mÉu biÓu, cßn dïng bé b¶n ghi ADO cho mÉu biÓu cña .MDB th× nã chØ cã tÝnh read-only mµ th«i. Cã lÏ Microsoft ph¶i kh¾c phôc nh­îc ®iÓm nµy cña ADO trong MDB khi ®­a ra phiªn b¶n cuèi cïng cña Access 2000.

Tù ®éng nÐn tËp tin

    §©y lµ tÝnh n¨ng rÊt h÷u Ých, vµ ®Ó Access lµm ®­îc ®iÒu ®ã khi ®ãng tËp tin, chØ viÖc vµo trang General cña hép tho¹i Options, sau ®ã ®¸nh dÊu chän « Compact on Close (xem h×nh 2).

    Th«ng th­êng øng dông Access ®­îc ®­a vµo MDB mÆt tr­íc (chøa query, form, report, module), d÷ liÖu t¸ch ra tËp tin MDB riªng (mÆt sau). §ãng tù ®éng ®­îc thùc hiÖn cho MDB mÆt tr­íc, vµ cÇn mét thñ thuËt nhá ®Ó ®¶m b¶o nÐn c¶ tËp tin d÷ liÖu ë mÆt sau. Access ®ßi hái tËp tin nµy ph¶i ®­îc më trong chÕ ®é Exclusive (®éc chiÕm) th× míi thùc hiÖn compact ®­îc, tuy nhiªn, Ýt nhÊt lµ tõ nay kh«ng cÇn ph¶i lo nÐn tËp tin mÆt tr­íc n÷a.

T¹i sao l¹i ph¶i th­êng xuyªn nÐn d÷ liÖu, trong khi b¹n kh«ng t¹o b¶ng t¹m thêi nµo c¶? Trªn thùc tÕ, Access t¹o rÊt nhiÒu ®èi t­îng trung gian vµ lµm cho CSDL liªn tôc ph×nh ra, do ®ã bÞ ph©n ®o¹n vµ gi¶m hiÖu n¨ng truy xuÊt.

H×nh 3. Tõ nay Access 2000 dïng chung VBE víi c¸c thµnh phÇn kh¸c cña Office 2000.

    CÇn l­u ý r»ng, nÐn tËp tin cã t¸c dông ®¸nh dÊu c¸c query cÇn ®­îc biªn dÞch l¹i trong lÇn vËn hµnh kÕ tiÕp. Khi b¶ng truy vÊn lÇn ®Çu thùc hiÖn sau khi thiÕt kÕ, c¬ cÊu Jet thiÕt lËp mét l­îc ®å truy vÊn dùa trªn c¸c sè liÖu thèng kª thu thËp ®­îc. NÕu cã Ýt sè liÖu (th­êng ban ®Çu dïng sè liÖu thö do ng­êi lËp tr×nh tù t¹o), l­îc ®å truy vÊn kh«ng sö dông c¸c chØ môc mµ trùc tiÕp quÐt c¸c b¶n ghi trong b¶ng tõ ®Çu ®Õn cuèi v× nh­ thÕ sÏ nhanh h¬n. Khi hÖ thèng ¸p dông cho sè liÖu thùc, liªn tôc biÕn ®æi t¨ng dÇn, l­îc ®å truy vÊn cò kh«ng cßn thÝch hîp n÷a. ChÝnh viÖc nÐn tËp tin cã t¸c dông thiÕt lËp l­îc ®å truy vÊn míi cho query, dùa trªn t×nh tr¹ng míi nhÊt cña sè liÖu. NÐn còng kÐo theo viÖc söa ch÷a tËp tin, do ®ã kh«ng cÇn thùc hiÖn thao t¸c repair nh­ trong Access 2.0. NÐn tù ®éng sÏ kh«ng thùc hiÖn nÕu kh«ng tiÕt kiÖm thªm Ýt nhÊt 256 KB.

Bé so¹n th¶o VBE

    Lµm viÖc víi Word, Excel ch¾c b¹n ®· quen thuéc víi Visual Basic Editor (VBE). B¶n th©n Access 95 ®· chÊp nhËn VBA nh­ng ®Õn Access 97 vÉn trung thµnh víi giao diÖn so¹n th¶o ch­¬ng tr×nh theo kiÓu riªng. KÓ tõ Office 2000, tÊt c¶ c¸c øng dông cÊu thµnh cña nã, trong ®ã cã Access, ®Òu chung VBE víi giao diÖn thèng nhÊt (H×nh 3).

D­êng nh­ ®©y lµ mét b­íc thôt lïi cña Access 2000. Trong phÇn lín c¸c phÇn mÒm dïng VBA, c¸c mÉu biÓu ®­îc thiÕt kÕ ngay trong VBE. Ng­êi lËp tr×nh Access 2000 buéc ph¶i tiÕn/lui gi÷a cöa sæ VBE vµ cöa sæ Access n¬i cã c¸c mÉu biÓu ®ang më.

NÕu lµ ng­êi lËp tr×nh tõng tr¶i, b¹n cã thÓ ®ãng cöa sæ Properties trong VBE v× nã chØ lÆp l¹i nh÷ng g× cã trong c¸c hép tho¹i Access, kh«ng cã c¶ c¸c ®Æc tÝnh cña ®iÒu khiÓn. Cöa sæ Project Explorer theo phong c¸ch treeview (d¹ng c©y) thËt h÷u Ých khi lµm viÖc víi c¸c CSDL th­ viÖn. Ngoµi ra, Project Explorer cßn cã kh¶ n¨ng më réng, cho thÊy c¶ nh÷ng g× kh«ng cã trong cöa sæ CSDL cña Access. B¹n cã thÓ lµm cho cöa sæ Immediate di ®éng tù do gièng nh­ cöa sæ Debug tr­íc kia. NÕu kh«ng thÊy c¸nh Locals hoÆc Watch, cã thÓ më chóng trong cöa sæ riªng n»m trªn phÇn cßn l¹i lµ cöa sæ so¹n th¶o m· VBA, kh«ng kh¸c g× mÊy so víi trong Access 97, ngo¹i trõ viÖc c¸c ®¬n thÓ chØ më trong khu«n khæ cña cöa sæ VBE mµ th«i. B¶n th©n VBE cã g× míi? HÊp dÉn nhÊt lµ thanh c«ng cô Edit: cã cÆp nót lÖnh cho phÐp thªm/bít c©u chó thÝch cho toµn khèi m· chØ b»ng mét thao t¸c nhÊp chuét. §iÓm míi n÷a lµ thanh Edit cho phÐp ®Æt thÎ ®¸nh dÊu (bookmark) vµo v¨n b¶n m· tr×nh. Khi cÇn thiÕt cã thÓ dÔ dµng quay l¹i nh÷ng n¬i ®· ®Æt dÊu, hoµn toµn chØ b»ng c¸ch nhÊp vµo lÖnh t­¬ng øng trong thanh c«ng cô. Thùc ra th× bookmark ®· cã tõ thêi Access 97 nh­ng thao t¸c ®Æt l¹i n»m s©u trong hÖ thèng thùc ®¬n, do ®ã nhiÒu ng­êi kh«ng ®Ó ý vµ ch¼ng bao giê dïng ®Õn.

H×nh 4. CurrentProject cho phÐp nhËn ®­îc nhiÒu th«ng tin míi, rÊt h÷u Ých.

    VBE cßn hç trî m« h×nh c¸c c«ng cô bæ trî linh ho¹t, cho phÐp tïy biÕn m«i tr­êng m· hãa cña ng­êi lËp tr×nh. B¹n tù ®éng thªm khèi chó thÝch hoÆc ®o¹n m· xö lý sù kiÖn trong thñ tôc hoÆc hµm míi? Cã thÓ tù t¹o add-in ®Ó lµm ®iÒu ®ã hoÆc dïng c¸c c«ng cô do ng­êi kh¸c cung cÊp. Dù ®o¸n sÏ cã nhiÒu ph­¬ng tiÖn bæ trî cho VBE xuÊt hiÖn trªn thÞ tr­êng.

AutoCorrect

    Gi¶ sö b¹n dïng tr­êng tªn lµ CustomerID trong mét hoÆc nhiÒu b¶ng. Mét ngµy nµo ®ã b¹n muèn ®æi tªn nã thµnh ClientID. Nh­ tr­íc kia th× thËt vÊt v¶: ph¶i rµ so¸t tÊt c¶ b¶ng truy vÊn (query) ®Ó t×m c¸c tr­êng CustomerID ®ang sö dông vµ ®æi nã thµnh tªn míi. Còng lµm nh­ vËy víi c¸c form vµ report ®Ó thay l¹i c¸c nguån ®iÒu khiÓn g¾n víi tr­êng cò. Tin tèt lµnh cho chóng ta: Access 2000 tù ®éng ®æi tªn tr­êng trong tÊt c¶ c¸c thµnh phÇn liªn quan kÓ trªn, nh­ng ®õng véi h©n hoan: hÖ ch­a mß ®­îc tíi c¸c module, c¸c ®o¹n m· lËp tr×nh vµ recordset. B¹n vÉn ph¶i söa b»ng tay nh­ th­êng lµm, do ®ã ®õng véi vøt bá SpeedFerret, mét s¶n phÈm thø ba, v× ch¾c nã vÉn cßn h÷u hiÖu cho Access 2000. Tuy nhiªn, dïng AutoCorrect cña Access 2000 mét c¸ch thËn träng còng gióp ®­îc nhiÒu viÖc.

H×nh 5: Jet 4.0 b©y giê hç trî khãa chèt ®Õn tõng b¶n ghi.

CurrentProject

    Cã mét ®èi t­îng míi trong Access 2000 gäi lµ CurrentProject.

    Nh÷ng ai tõng lËp tr×nh DAO ch¾c kh¸ quen thuéc víi hµm CurrentDb () ®Ó tham chiÕu tíi CSDL ®ang më. CurrentProject còng cã môc ®Ých t­¬ng tù nh­ng ¸p dông cho c¶ ADO, vÝ dô CurrentProject.Connection tr¶ l¹i ®èi t­îng kÕt nèi ADO. Ngoµi ra cßn cã CodeProject gÇn gièng víi hµm CodeDb () trong DAO ®Ó dïng víi c¸c add-in. Ta thùc hiÖn mét sè lÖnh sau ®Ó kiÓm tra trong cöa sæ Immediate:

?CurrentProject.FullName
D:\Temp\db1.mdb
?CurrentProject.Name
db1.mdb
?CurrentProject.Path
D:\Temp

    §èi t­îng CurrentProject cã c¸c s­u tËp (collection) chøa tÊt c¶ c¸c ®èi t­îng kh¸c cña Access, ch¼ng h¹n AllForms, AllReports, AllMacros, AllModules vµ AllDataAccessPages. Mçi s­u tËp nµy chøa c¸c ®èi t­îng kiÓu AccessObject víi nhiÒu ®Æc tÝnh (Property) rÊt h÷u Ých:

?CurrentProject.AllForms.Count
6
?CurrentProject.AllForms (5) .Name
frmQuery1
?CurrentProject.AllForms (5) .IsLoaded
False

    Cßn víi c¸c b¶ng vµ query th× sao? Cã ®èi t­îng kh¸c gäi lµ CurrentData víi ®Æc tÝnh lµ c¸c s­u tËp AllTables, AllQueries, råi c¶ AllViews, AllStoredProcedures vµ AllDatabaseDiagrams.

    Tuy CurrentProject.Connection tr¶ vÒ ®èi t­îng kÕt nèi ADO, ®Æc tÝnh ngÇm ®Þnh cña ®èi t­îng kÕt nèi nµy lµ mét chuçi kÕt nèi (Connect String):

?CurrentProject.Connection

    KÕt qu¶ lµ mét chuçi ký tù bao gåm c¸c tham trÞ chia t¸ch nhau b»ng dÊu chÊm phÈy (;). Dïng c¸c hµm míi cña Access 2000, trong ®ã cã Split() vµ Filter() ®Ó t¸ch vµ lÊy ra c¸c tham trÞ cÇn thiÕt.

C¸c hµm chuÈn míi

    Mét lo¹t hµm míi ®­îc bæ sung so víi Access 97, dïng ®Ó xö lý x©u ký tù: Replace(), InstrRev(), StrReverse(), Split(), Join() vµ Filter().

    Hµm Replace() dïng ®Ó thay x©u con cña x©u nµo ®ã b»ng x©u con míi:

?Replace ("a1a2a3a4a5", "a", "b")
b1b2b3b4b5
?Replace ("a1a2a3a4a5", "a", "b", 3)
b2b3b4b5
?Replace ("a1a2a3a4a5", "a", "b", 3, 2)
b2b3a4a5

    Trong 2 vÝ dô cuèi, sè 3 ë tham sè thø t­ dïng chØ vÞ trÝ tõ ®ã b¾t ®Çu cÇn thay thÕ (vµ kÕt qu¶ còng tõ ®ã lu«n). Tham sè thø 5 trong vÝ dô cuèi cïng ®Ó ®Æc t¶ sè lÇn ph¶i thay (x©u con cã thÓ hiÖn diÖn nhiÒu lÇn).

    Hµm StrReverse() tr¶ vÒ chuçi ký tù ®¶o ng­îc (kh«ng râ thùc tÕ øng dông CSDL cã cÇn ®Õn hµm nµy kh«ng?).

?StrReverse ("abcdef")
fedcba

    Hµm InstrRev() cã c¬ chÕ lµm viÖc nh­ Instr() nh­ng t×m kiÕm ng­îc tõ ký tù cuèi ®Õn ký tù ®Çu (hµm nµy th× thËt sù cÇn thiÕt):

?InstrRv ("C:\MyPath\MyFile.ext", "\")
10

    C¸c hµm Split(), Join() vµ Filter() còng rÊt h÷u Ých. Split() chuyÓn ®æi x©u ký tù cã chia t¸ch (bëi mét ký tù nµo ®ã, vÝ dô dÊu chÊm phÈy) thµnh m¶ng c¸c gi¸ trÞ. Join() thùc hiÖn thao t¸c ng­îc l¹i, tõ m¶ng trë vÒ x©u ký tù cã chia t¸ch. Filter() trÝch tõ m¶ng c¸c dßng tháa m·n ®iÒu kiÖn nµo ®ã.

? Filter(Split(CurrentProject.Connection, ","), _
"Data Source = ") (0)
Data Source=D:\Temp\db1.mdb

    Thªm mét b­íc n÷a th× nhËn ®­îc trÞ cña Data Source.

? Split (Filter(Split(CurrentProject .Connection, ";"), _
"Data Source = ") (0) ,"=") (1)
D:\Temp\db1.mdb

    NÕu ®· quen thuéc víi ng«n ng÷ Lisp, ch¾c b¹n rÊt hµi lßng víi bé hµm trªn vµ tù hái: t¹i sao ®Õn b©y giê VBA míi cã ®­îc kh¶ n¨ng ph©n tÝch x©u ký tù nh­ vËy?

Ngang ngöa víi VB 6

    Nh÷ng n¨m qua, ng­êi lËp tr×nh Access dïng VBA lu«n l¹c hËu so víi Visual Basic, do ®ã cã ý nghÜ cho r»ng VBA lµ mét tËp con cña VB. Sù thùc th× VBA vµ VB lu«n lµ mét, cã ®iÒu lµ ng­êi lËp tr×nh Visual Basic cã ®­îc phiªn b¶n míi h¬n mét chót. Giê ®©y Microsoft ®¶m b¶o Visual Basic vµ VBA ®ång bé víi nhau. Nh­ vËy, Office 2000 cã ng«n ng÷ lËp tr×nh hoµn toµn ngang ngöa víi VB 6.0. D­íi ®©y tãm l­îc mét sè tÝnh n¨ng n©ng cao cña VBA míi.

- Bé chuyÓn AddressOf cho phÐp truyÒn ®Þa chØ hµm gäi ng­îc cho thñ tôc kh¸c.

- LÖnh Implements ®­îc dïng víi c¸c ®¬n thÓ líp ®Ó ®Æc t¶ líp (class) thùc thi giao diÖn (tËp hîp c¸c ®Æc tÝnh vµ ph­¬ng thøc) ®Þnh nghÜa trong mét líp kh¸c. Nh­ vËy, VBA b©y giê cã tÝnh n¨ng ®a h×nh (polymorphism), nghÜa lµ giao diÖn chuÈn cã hµnh vi kh¸c trong c¸c líp kh¸c nhau.

- Víi Access 97, b¹n cã thÓ dïng khai b¸o With Events trong ®¬n thÓ líp ®Ó t¹o khoang sù kiÖn, do ®ã ®¬n thÓ líp ®ã cã thÓ b¾t ®­îc sù kiÖn ph¸t sinh trong ®èi t­îng. Tõ nay cã thÓ dïng lÖnh Event ®Ó khai b¸o sù kiÖn theo ý muèn vµ lÖnh RaiseEvent ®Ó lµm cho nã x¶y ra bÊt cø lóc nµo.

- Tõ khãa Enum cho phÐp khai b¸o c¸c h»ng liÖt kª, ch¼ng h¹n nh­ c¸c h»ng b¾t ®Çu b»ng ac, vb hoÆc db. C¸c biÕn vµ tham sè sau ®ã cã thÓ ®­îc ®¨ng ký víi kiÓu míi.

- Tõ khãa Friend thªm lùa chän thø ba vµo danh s¸ch c¸c khai b¸o (tr­íc ®ã cã Public vµ Private) khi cÇn ®Þnh nghÜa ph¹m vi cña thñ tôc trong ®¬n thÓ líp. C¸c thñ tôc cã tÝnh Friend thÊy ®­îc tõ tÊt c¶ c¸c thñ tôc kh¸c trong dù ¸n. Kh¸c víi Public, chóng kh«ng thÊy ®­îc bªn ngoµi dù ¸n. NÕu dïng VBA ®Ó dùng c¸c Com server cho c¸c tr×nh kh¸c sö dông, ph¹m vi kiÓu Friend rÊt h÷u Ých.

- §èi t­îng Debug cã thªm ph­¬ng thøc Assert dïng ®Æt ®iÓm ng¾t vµo m· tr×nh. Ng¾t sÏ x¶y ra khi t¹i ®iÓm ®ã biÓu thøc ®Æc t¶ trong Assert cho trÞ False. L¹i thªm mét c¸ch míi ®Ó gì rèi ch­¬ng tr×nh khi khã t×m ®­îc lçi.

Jet Engine 4.0

    GÇn ®©y cã nhiÒu tin ®ån vÒ giê tËn thÕ cña Jet, mét c¬ cÊu CSDL vèn dïng tõ l©u nay cho Access (ë ta hay lÉn Jet víi Access vµ mét vµi cæ ®éng viªn cßn sãt l¹i cña FoxPro for DOS ®· véi hoan hØ lµ Access s¾p chÕt - ND). Trªn thùc tÕ, ng­êi dïng ®­îc lùa chän trong 2 kh¶ n¨ng: dïng Jet Engine 4.0 hoÆc SQL Server 7.0 lµm ®éng c¬ cho Access. Phiªn b¶n 4.0 cña Jet m¹nh mÏ h¬n bao giê hÕt. NhiÒu øng dông Access cã thÓ kh«ng cÇn ®Õn c¬ cÊu SQL Server 7 qu¸ m¹nh, vµ nhãm Jet cña Microsoft vÉn nç lùc hoµn thiÖn s¶n phÈm truyÒn thèng cña m×nh.

    §éng c¬ Jet míi cho phÐp khãa chèt ®Õn tõng b¶n ghi (xem tïy chän t­¬ng øng trong trang Advanced thuéc hép tho¹i Options ë h×nh 5).

    Ng­êi dïng c¸c phÇn mÒm CSDL kh¸c th­êng chª Access (®óng h¬n: c¬ cÊu Jet cña nã) lµ chØ kho¸ chèt ®­îc toµn trang (page-level locking) khi b¶n ghi nµo trong ®ã cÇn khãa. Tõ Jet 3.x trë vÒ tr­íc mét trang CSDL cã dung l­îng 2 KB. Jet 4.0 dïng trang 4 KB do ®ã nÕu kh«ng hç trî khãa chèt ®Õn tõng b¶n ghi thay cho viÖc khãa chèt toµn trang (gÊp ®«i so víi tr­íc), nhiÒu b¶n ghi sÏ bÞ "khãa l©y". Dung l­îng trang 4 KB lµ ®Ó hç trî bé m· Unicode, v× theo bé nµy mçi ký tù sÏ chiÕm 2 byte. Giê ®©y kÝch cì tèi ®a cña tËp tin MDB ®­îc n©ng lªn 2 GB so víi 1 GB tr­íc ®©y.

    ViÖc khãa chèt theo kiÓu nµo còng ®­îc Jet x¸c ®Þnh mét c¸ch th«ng minh. NÕu cã nhiÒu b¶n ghi trong trang 4 KB nµo ®ã ®­îc khãa chèt, Jet tù ®éng khãa c¶ trang cho hiÖu qu¶, thËm chÝ nã khãa chèt c¶ b¶ng lu«n nÕu kh«ng cã ng­êi dïng nµo kh¸c trªn m¹ng truy cËp b¶ng ®ã (®óng h¬n: ®ang söa - ND)

    NhiÒu ®Æc tÝnh míi kh¸c cña Jet chñ yÕu ®Þnh h­íng cho m« h×nh ®èi t­îng ADO mµ Microsoft khuyÕn nghÞ sö dông thay cho m« h×nh DAO. M« h×nh DAO cò sÏ vÉn cßn vµ gi÷ ®­îc gi¸ trÞ sö dông, nhÊt lµ vÒ ph­¬ng diÖn b¶o mËt vµ nh©n b¶n (replication).

    Dïng ADO nghÜa lµ sö dông ng«n ng÷ SQL ®æi míi. D­íi ®©y liÖt kª mét sè ®iÓm míi cña SQL theo chuÈn ANSI-92 mµ Jet 4.0 hç trî.

- Thªm c¸c lÖnh GRANT, REVOKE cho môc ®Ých b¶o mËt

- Thªm c¸c lÖnh CREATE vµ DROP ®Ó t¹o vµ lo¹i bá c©u hái (VIEW vµ PROCEDURE)

- CASCADE dïng ®Ó ®Þnh nghÜa tÝnh toµn vÑn tham chiÕu

- Rµng buéc CHECK dïng ®Ó ®Æc t¶ biÓu thøc luËn lý mµ c¸c b¶n ghi trong mét hoÆc nhiÒu b¶n ph¶i tháa.

- C¸c lÖnh ALTER TABLE vµ ALTER COLUMN ®Ó söa cÊu tróc b¶ng mµ kh«ng ph¶i thªm cét míi, sao chÐp cét cò sang vµ lo¹i bá cét cò nh­ tr­íc kia.

- IDENTITY lµ tõ khãa ®Æc t¶ tÝnh t¨ng tù ®éng cña cét

- Thªm mét sè kiÓu cét míi ®Ó t­¬ng hîp víi SQL Server, vÝ dô kiÓu Decimal

Cã nªn n©ng cÊp?

    Khi bµi b¸o nµy ®Õn tay b¹n ®äc, vÉn cßn qu¸ sím ®Ó ph¸n xÐt vÒ phiªn b¶n míi cña Access. Mét sè tÝnh n¨ng ®Ò cËp ë trªn cã thÓ kh«ng cã trong b¶n chÝnh thøc cña Access 2000 hoÆc kh¸c ®i mét chót. ViÖc tÝch hîp VBE víi Access cßn g©y nhiÒu bµn c·i nh­ng nh÷ng b­íc tiÕp theo cã thÓ lµm cho tÝnh n¨ng nµy s¸ng gi¸ h¬n. Microsoft râ rµng lµ ®· chuyÓn h¼n sang h­íng x©y dùng phÇn mÒm tËn dông tèi ®a c¸c thµnh phÇn dïng chung, tÊt nhiªn cã lóc ph¶i tr¶ gi¸ vÒ hiÖu n¨ng.

    Ai ®· tõng tr¶i qua thêi kú lËp tr×nh trong Access 2.0 míi cµng thÊu hiÓu gi¸ trÞ cña c¸c thµnh phÇn nhiÒu mega ®ã, tuy chóng cßn ë møc s¬ khai vµ hy väng hoµn chØnh h¬n theo ®µ hoµn thiÖn m« h×nh ®èi t­îng chung cña Microsoft. S¶n phÈm míi chÞu bóa r×u d­ luËn lµ chuyÖn th­êng t×nh, vµ Access 2000 kh«ng lµ ngo¹i lÖ.

T« TuÊn

Theo Access-Office-VB Advisor 4/1999


PcLeHoan 1996 - 2002
Mirror : http://www.pclehoan.com
Mirror : http://www.lehoanpc.net

Mirror : http://www.ktlehoan.com