Thủ thuật trong Access

  • Thread starter htqtn
  • Ngày gửi
H

htqtn

Thành viên sơ cấp
21/8/05
32
0
0
39
Thais Nguyeen
#1
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.
 

Thành viên trực tuyến

  • canhtran98
  • Thuygiang1

Xem nhiều