Thñ thuËt trong Access
Xem bai viet bang font Unicode

PCWorld VN 6/99

Option Group th«ng minh (Access 97/95/2.0)

    Th«ng th­ßng khi b¹n nhãm c¸c nót Option vµo trong mét Option group, th× mçi nót Option nµy sÏ kh«ng nhËn ®­îc sù kiÖn nhÊn ®óp vµo mét nót Option nµo ®ã·. §iÒu nµy g©y khã chÞu cho ng­êi dïng cã thãi quen nhÊn kÐp chuét vµo Option ®­îc chän ®Ó ®ång thêi x¸c nhËn l­¹ chän Option vµ ®ãng l¹i Dialog box, (th«ng th­êng th× trong Dialog box kiÓu chän lùa mét trong nhiÒu Option, ta ph¶i chän bÊm nót Option, råi bÊm tiÕp nót OK).

    Chóng ta lîi dông sù kiÖn DblClick cña ®èi t­îng Option group ®Ó gi¶i quyÕt vÊn ®Ò trªn. Khi Êy sù kiÖn DblClick lªn mét nót Option bÊt kú trong Option group sÏ kÝch nót OK (hoÆc nót lÖnh t­¬ng øng víi nót Option Êy), vµ sau ®©y lµ ®o¹n m· minh häa:

Sub grpOpt_DblClick (Cancel As Integer)
‘ Fire the OK Command Button
Call cmdOK_Click
End Sub

§o¹n m· trong nót lÖnh OK nh­ sau:

Sub cmdOK_Click ()
If grpOpt.Value = 1 Then
<More code here>
<Ca’c ma~ u+’ng vo+’i nu’t Option 1>
Else
<More code here>
<Ca’c ma~ u+’ng vo+’i nu’t Option kha’c>
End If
End Sub

Gi÷ cho c¸c tiÕn tr×nh DOS tiÕp tôc bÞ che

(Access 97/95 - Visual Basic (32-bit)

    Trong khi lµm viÖc, cã nhiÒu khi chóng ta cÇn thùc thi mét lÖnh Dos nµo ®ã hay ph¶i gäi ®Õn Shell Command tõ trong øng dông cña m×nh. §Ó kh«ng bÞ gi¸n ®o¹n ®iÒu khiÓn mµn h×nh hiÖn hµnh cña ch­¬ng tr×nh ®ang ch¹y, b¹n muèn ng¨n kh«ng cho hÖ ®iÒu hµnh trao "®iÒu khiÓn" tõ tiÕn tr×nh ®ang thi hµnh nµy cho mét tiÕn tr×nh Dos hay Windows kh¸c ®ang ®­îc thùc thi trong chÕ ®é nÒn.

    §o¹n m· sau cã thÓ gióp b¹n gi÷ cho tiÕn tr×nh ®ang thùc thi tiÕp tôc ch¹y ë chÕ ®é foreground vµ buéc c¸c tiÕn tr×nh Dos hay Windows ®­îc gäi ®Õn vÉn ch¹y ë chÕ ®é background:

Declare Function SetFocus Lib "user32" _
(ByVal hWnd As Long) As Long
Declare Function GetTopWindow Lib_ "user32" (ByVal hWnd As Long) As Long
Sub Main()
On Error Resume Next
Dim Ret As Variant
Dim lngAct As Long
Dim lngRet As Long
lngAct = GetTopWindow
Ret = Shell(Command, vbMinimizedNoFocus)
lngRet = SetFocus(lngAct)
End Sub

Gi¶i ph¸p cho mét Combo box cã qu¸ nhiÒu môc chän

(Access 97/95/2.0)

    ThËt lµ khã nhäc khi muèn chän mét môc trong Combo box cã hµng tr¨m dßng, nhÊt lµ trong tr­ßng hîp b¹n thuéc lo¹i "bèn m¾t". Nh»m gi¶i quyÕt vÊn ®Ò nµy, t¹i sao chóng ta kh«ng "chia ®Ó trÞ" b»ng c¸ch t¹o ra nhiÒu Combo box nhá h¬n, mµ mçi Combo box nµy chØ chøa mét phÇn d÷ liÖu cña Combo box ban ®Çu ®Ó b¹n lµm viÖc tho¶i m¸i h¬n.

Sau ®©y lµ ®o¹n m· t¹o ra sù ph©n phèi d÷ liÖu gi÷a c¸c Combo box.

§©y lµ dßng lÖnh SQL trong RowSource cña Combo box nguyªn thñy:

SELECT DISTINCTROW [tblUnits].[ID], _
[tblUnits].[UnitName] FROM [tblUnits] ;

Trong Combo box con thø nhÊt ta thay RowSource cña nã nh­ sau:

SELECT DISTINCTROW [tblUnits].[ID], _
[tblUnits].[UnitName] FROM [tblUnits] _
WHERE [UnitName] BETWEEN "A" AND "D";

    Dßng lÖnh SQL nµy chØ cho phÐp c¸c dßng cã UnitName tõ A ®Õn D xuÊt hiÖn trong Combo box thø nhÊt. Thùc hiÖn t­¬ng t­ víi c¸c Combo box cßn l¹iÈ. Lóc ®ã sÏ kh«ng cßn Combo box "voi" nöa mµ b¹n sÏ cã mét sè Combo box con dÔ qu¶n lý h¬n.

DuyÖt String

(VBA - Visual Basic 5.0/4.0 - Access 97/95/2.0 - Excel)

    RÊt nhiÒu khi chóng ta cÇn trÝch mét String ra nhiÒu phÇn nhá, vÝ dô nh­ trÝ·ch String ngµy th¸ng thµnh nh÷ng tr­êng riªng biÖt: ngµy, th¸ng, n¨m.

    Chóng ta gi¶i quyÕt vÊn ®Ò nµy b»ng mét hµm cã ba th«ng sè: th«ng sè thø nhÊt lµ String cÇn duyÖt, th«ng sè thø hai lµ thø tù cña phÇn muèn trÝch ra (String con), th«ng sè thø ba lµ ký tù ph©n c¸ch ®­äc dïng trong String. VÝ dô:

? FieldSplit("3/14/97",2,"/")
14
? FieldSplit("2-3-96",3,"-")
96
? FieldSplit("124.1244.123434.",1,".")
124

Vµ ®©y lµ m· nguån cña hµm FieldSplit:

Function FieldSplit(FullString As_
Variant, FieldNum As Integer,_
SplitChar As String) As Variant
Dim MyArray As Variant
Dim j As Integer, k As Integer
Dim x As Integer, z As Integer
Dim TempString As String
‘Count the fields within FullString
z = 1
For k = 1 To Len(FullString) - 1
If Mid$(FullString, k, 1) = SplitChar _
Then
z = z + 1
End If
Next k
‘Check if user requested a field number
‘greater than fields in FullString
If FieldNum > z Then
FieldSplit = Null
Exit Function
End If
‘Set array to the correct number of fields
ReDim MyArray(z)
TempString = ""
j = 0
For x = 1 To Len(FullString)
If Mid$(FullString, x, 1) = SplitChar _
Then
MyArray(j) = TempString
TempString = ""
j = j + 1
End If
If Mid$(FullString, x, 1) <>_
SplitChar Then
TempString = TempString & _
Mid$(FullString, x, 1)
End If
Next x
MyArray(j) = TempString
FieldSplit = MyArray(FieldNum - 1)
End Function

    Mét khi b¹n ®· s¸ng t¹o cho m×nh ®­äc mét hµm nh­ vËy, b¹n cã thÓ gi÷ cho m×nh hay "ban ph¸t" cho b¹n bÌ; nã dïng ®­îc trong c¶ Excel, Access vµ Visual Basic.

H÷u Hoan

Theo Advisor VB


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

Mirror : http://www.ktlehoan.com