Thủ thuật trong Access

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi htqtn, 29 Tháng tám 2005.

7,733 lượt xem

  1. htqtn

    htqtn Thành viên sơ cấp

    Bài viết:
    32
    Đã được thích:
    0
    Nơi ở:
    Thais Nguyeen
    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.
     
    #1

Chia sẻ trang này