Sự kiện (event) và các thủ tục sự kiện (event procedure)

Thảo luận trong 'Access và VBA' bắt đầu bởi phatnq2002, 19/10/07.

  1. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Để "tạ lỗi" với mọi người, kể từ hôm nay tôi sẽ post lên một loạt bài về cách điều khiển các sự kiện xảy ra khi thoa tác trên form hoặc khi thi hành một report.

    CÁC KHÁI NIỆM

    Sự kiện là gì?
    Sự kiện (event) là một hành động xác định xảy ra trên hoặc với một đối tượng nào đó. MS Access có thể đáp lại nhiều sự kiện: nhấn chuột, thay đổi dữ liệu, mở hoặc đóng form, ... Sự kiện thường là kết quả tạo ra bởi một hành động của người sử dụng.

    Thủ tục là gì?
    Thủ tục (procedure) là một đơn vị code của VB. Một thủ tục bao gồm một dãy các lệnh (statement) hoặc các phương thức (method) để thực thi một hành động hoặc tính toán một giá trị.

    Thủ tục sự kiện là gì?

    Thủ tục sự kiện (event procedure) là một thủ tục tự động thực thi để đáp lại một sự kiện được khởi xướng từ một hành động của người dùng hoặc từ code của chương trình.
    VD: Thủ tục sự kiện sau đây sẽ thực thi một lệnh mở câu thông báo chào khi form được mở ra:
    Private Sub Form_Load()
    MsgBox "Xin chào các bạn."
    End Sub


    MỘT SỐ SỰ KIỆN THƯỜNG GẶP VÀ CÁCH ĐIỀU KHIỂN SỰ KIỆN

    Các sự kiện xảy ra với đối tượng Form:

    1. Sự kiện Open:
    Sự kiện xảy ra khi form được mở, nhưng trước khi record đầu tiên được hiển thị.
    (Ghi chú: ở đối tượng Report cũng có sự kiện Open, trong report sự kện Open xảy ra trước khi report được preview hoặc được in)

    Từ khi gọi form cho đến khi form xuất hiện lần đầu trên màn hình, một loạt các sự kiện xảy ra, trong đó sự kiện Open là sự kiện được xảy ra đầu tiên. Các sự kiện này và thời điểm xảy ra của nó được thể hiện bằng chuỗi sau:
    Open --> Load --> Resize --> Activate --> Current
    Thuộc tính gắn với sự kiện Open có tên là OnOpen. (Các bạn lưu ý: với những thuộc tính bắt đầu bằng On có nghĩa là sự kiện đó đang diễn tiến,Before là trước khi sự kiện xảy ra, After là sau khi sự kiện xảy ra).
    Thủ tục sự kiện gắn với sự kiện này là Form_Open. Sự kiện có một tham số có tên là Cancel kiểu Integer (thực chất nó chỉ nhận hai giá trị True và False). Tham số này các bạn có thể định lại giá trị cho nó.
    Nếu định là True, sự kiện sẽ bị hoãn, nghĩa là sự kiện sẽ không hoàn tất, nhưng không xảy ra lỗi. Mặc nhiên là False.
    VD: Bạn muốn rằng khi form A mở ra thì form B sẽ mở ra nếu người sử dụng đồng ý, bạn có thể code cho thủ tục sự kiện như sau:
    Private Sub Form_Open(Cancel As Integer)
    If MsgBox("Ban co muon form B mo ra dong th oi luon khong?", vbYesNo) = vbYes Then
    DoCmd.OpenForm "form B"
    Else
    Cancel = True
    End If
    End Sub

    Ghi chú: Bất kỳ một thủ tục sự kiện nào nó thông số là Cancel, thì sự kiện tương ứng đều có thể cho ngưng không cho hoàn tất. Trong trường hợp bạn sử dụng một macro hoặc một phương thức của DoCmd thì nếu hoãn một sự kiện, sẽ có một error trả về. Để tránh xuất hiện lỗi thì nế dùng macro, bạn có thể đặt trước macro đó một macro SetWarnings và gán cho thuộc tính WarningOn là No, dùng DoCmd trong code thì trước đó bạn đặt câu On Error Resume Next.

    Còn tiếp ...
     
    Chỉnh sửa cuối: 19/10/07
                   
  2. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    2. Sự kiện Load:
    Sự kiện Load xảy ra bởi tác động của người dùng như:
    - Bắt đầu một ứng dụng.
    - Mở một form bằng cách nhắp vào Open trên cửa sổ Database.
    - Thực thi một hành động OpenForm trong macro.
    - Gọi form bằng DoCmd.OpenForm trong thủ tục.

    Thuộc tính sự kiện tương ứng có tên là OnLoad.

    Thủ tục sự kiện tương ứng có tên là Form_Load, không có tham số.
    Khi điều khiển sự kiện này, bạn có thể thực hiện những công việc sau:
    Thiết lập các giá trị mặc định cho các control hoặc thể hiện các giá trị tính toán tùy thuộc vào dữ liệu có trên form.

    VD: Trong public module bạn có một biến language. Nếu biến này là "V" thì bạn cho hiển thị các caption của các Label là tiếng Việt, "E" thì hiển thị là tiếng Anh. Biến này sẽ tùy thuộc vào việc người ta chọn trong một thủ tục nào đó trước khi form bạn được gọi vào.
    Trước tiên, khi thiết kế form, ở các label, bạn đặt các từ "ính lịt" tương ứng ở property Tag của nó.
    Sau đó bạn thiết kế thủ tục Form_Load như sau:
    Private Sub Form_Load ()
    Dim ctl As Control
    For Each ctl In Detail.Controls ' or FormHeader.Controls, FormFooter.Controls
    If TypeOf ctl Is Label Then
    x = ctl.Caption
    ctl.Caption = ctl.Tag
    ctl.Tag = x
    End If
    Next
    End Sub


    3. Sự kiện Resize:
    Sự kiện xảy ra khi form được gọi và bất cứ khi nào kích thước của form thay đổi.

    Thuộc tính sự kiện tương ứng có tên là OnResize.

    Thủ tục sự kiện tương ứng có tên là Form_Resize. Thủ tục này không có tham số.

    Khi điều khiển sự kiện này, bạn có thể:
    - Di chuyển hoặc định lại kích thước của một control.
    - Tính toán lại các biến.
    - Reset lại các thuộc tính có liên quan đến kích thước của form.

    VD: Khi có sự thay đổi kích thước của form sẽ cho hoàn tất những cập nhật màn hình còn đang treo hoặc những tính toán chưa thực hiện xong trên các control bằng phương thức Repaint.
    Private Sub Form_Resize()
    Me.Repaint
    End Sub


    4. Sự kiện Activate:
    Sự kiện xảy ra khi một form (cũng đúng với report) nhận một focus (cái này không dám dịch ra tiếng việt, bởi dịch ra thì hổng ai hiểu, còn để nguyên thì ai cũng hiểu !!! :sifone:) và trở thành cửa sổ hoạt động.

    Thuộc tính sự kiện tương ứng có tên là OnActivate.

    Thủ tục sự kiện tương ứng có tên là Form_Activate. Thủ tục không có tham số.

    VD: Bây giờ bạn có thiết kế một cái toolbar chỉ dành riêng cho form A. Như vậy nếu form A được kích hoạt thì mới hiện toolbar này (ví dụ toolbar này có tên là FormA_Toolbar).
    Private Sub Form_Activate()
    DoCmd.ShowToolbar "FormA_Toolbar", acToolbarYes
    End Sub


    5. Sự kiện Current:
    Sự kiện xảy ra khi một focus được di chuyển đến một record, làm cho nó trở thành record hiện hành, hoặc khi form được "làm tươi mát" (refresh) hoặc được gán lại source (requery).

    Thuộc tính sự kiện tương ứng có tên là OnCurrent.

    Thủ tục sự kiện tương ứng có tên là Form_Current. Thủ tục này không có tham số.

    VD: Bạn có một form hiển thị một số thông tin của một table, trong đó có 3 textbox ứng với 3 field(tạm là text1, text2, text3) và một checkbox cũng ứng với một field Yes/No(check1).
    Yêu cầu đặt ra là nếu check1 bằng True thì không cho thay đổi nội dung trong 3 textbox.
    Private Sub Form_Current ()
    text1.Locked = check1
    text3.Locked = check1
    text3.Locked = check1
    End Sub
     
    Chỉnh sửa cuối: 19/10/07
  3. binhpx

    binhpx New Member Hội viên mới

    Phatnq2002 ơi cho mình hỏi sao khi mình gõ msgbox " Chữ tiếng việt có dấu" trong khung soạn thảo code. Nhưng khi chạy lại bị lỗi font. Làm sao để gõ tiếng việt trong khung code vậy bạn? Cám ơn trước nhé :cheers2::cheers2:
     
  4. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Cái này là do font hệ thống của máy bạn thôi. Bạn thử định dạng trong Display Property trên máy bạn là MS Sans Serif, và trong VBA Editor cũng vậy xem.
     
  5. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    6. Sự kiện UnLoad:
    Sự kiện Unload xảy ra khi:
    - Người sử dụng nhấn nút Close trên cửa sổ Form.
    - Người sử dụng gọi menu File - Close.
    - Gọi một macro Close một cửa sổ có thuộc tính Form.
    - Gọi một lệnh DoCmd.Close với kiểu cửa sổ là acForm.
    - Đóng Windows trong khi ứng dụng Access đang chạy.

    Unload là sự kiện đầu tiên của chuỗi sự kiện sau:
    Unload --> DeActivate --> Close

    Thuộc tính sự kiện tương ứng là OnUnload.

    Thủ tục sự kiện tương ứng là Form_Unload. Thủ tục này có một thuộc tính Cancel. Như ở bài trước, bạn đã biết nếu Cancel = True thì có nghĩa gì rồi phải không?

    VD: Giả sử trong Form bạn có một biến tên là danglam kiểu Boolean. Nếu biến là True thì có nghĩa bạn đang nhập liệu và đang có thay đổi dữ liệu. Bạn muốn rằng khi đóng form, nó sẽ hỏi lưu thay đổi không, nếu có thì trước khi đóng, bạn cho lưu. (Code dưới đây chỉ là dàn ý, bạn phải tùy biến để cho phù hợp với ứng dụng mà bạn thiết kế).

    Private Sub Form_Unload (Cancel As Integer)
    If danglam Then
    If MsgBox ("Du lieu da co thay doi. Co muon luu truoc khi dong khong?", vbYesNo) = vbYes then
    DoCmd.SaveRecord
    Else
    DoCmd.Undo
    End If
    End Sub


    7. Sự kiện DeActivate:
    Sự kiện xảy ra khi bạn rời focus ra khỏi form (hoặc report). Nó cũng xảy ra sau khi form (report) được Unload.

    Thuộc tính sự kiện tương ứng có tên OnDeactivate.

    Thủ tục sự kiện tương ứng có tên Form_Deactivate. Không có tham số.

    VD: Tiếp theo ví dụ của mục 4 phía trên (bài trước), khi chuyển focus ra khỏi form A, bạn cho ẩn tool box đi.

    Private Sub Form_Deactivate()
    DoCmd.ShowToolbar "FormA_Toolbar", acToolbarNo
    End Sub


    8. Sự kiện Close:
    Sự kiện xảy ra khi form đã thực sự được đóng lại nhưng chưa rời hỏi màn hình. Về cơ bản xem như nó đã được đóng lại, nhưng nếu bạn có "lưu luyến" gì với người dùng, bạn có thể gửi một thông điệp gì đó ở đây đại loại như ... xem ví dụ bên dưới.

    Tên thuộc tính sự kiện tương ứng là OnClose.

    Tên thủ tục sự kiện là Form_Close. Không có tham số.

    VD: Gửi một thông điệp "lưu luyến"

    Private Sub Form_Close ()
    MsgBox "See you soon."
    End Sub


    ... Mỗi lần ăn một chút, mỗi ngày ăn nhiều lần, no lâu ... :smilielol5:
     
  6. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    9. Sự kiện BeforeInsert:
    Sự kiện này xảy ra khi người sử dụng gõ vào ký tự đầu tiên trong record mới, nhưng trước khi record ấy thực sự được tạo.

    Sự kiện này bắt đầu một dãy sự kiện sau đây:
    BeforeInsert --> BeforeUpdate --> AfterUpdate --> AfterInsert

    Thuộc tính sự kiện có tên là BeforeInsert.

    Thủ tục sự kiện có tên là Form_BeforeInsert. Có một tham số quen thuộc là Cancel.

    VD: Giả sử bạn là người rất cẩn thận. Bạn muốn rằng khi một người sử dụng gõ một ký tự bất kỳ vào record mới, bạn sẽ lưu ý họ liền, sợ rằng họ vô tình nhấn phím mà thôi. Bạn có thể code nhẹ nhàng như sau:

    Private Sub Form_BeforeInsert(Cancel As Integer)
    If MsgBox("Them record moi ha ban?", vbOKCancel) = vbCancel Then
    MsgBox "Lan sau nho can than khi su dung ban phim nghen !!!"
    Cancel = True
    End If
    End Sub


    10. Sự kiện BeforeUpdate:
    Sự kiện xảy ra khi có một sự thay đổi dữ liệu trong một control thuộc form hoặc khi record được cập nhật (update).
    Đúng ra đây đang liệt kê các sự kiện của Form, nhưng sự kiện này cũng ảnh hưởng đến một control, vậy có nên nói luôn ở đây không ta? Thôi chơi luôn há?

    Đối với form, sự kiện này sẽ xảy ra khi bạn dời focus từ record hiện hành sang một record khác nhưng chưa dời thật sự, hoặc bạn đã gọi lệnh Save Record trong menu Records, hoặc bạn gọi macro SaveRecord hoặc bạn dùng lệnh DoCmd.RunCommand acCmdSaveRecord.
    Đối với control, sự kiện này sẽ xảy ra khi bạn dời focus từ control đó sang một control khác mà ở control hiện hành bạn có thay đổi dữ liệu.
    Sự kiện BeforeUpdate của form xảy ra sau sự kiện BeforeUpdate của control. Bạn nên chú ý điều này để việc điều khiển bằng thủ tục sự kiện cho phù hợp.

    Thuộc tính sự kiện có tên là BeforeUpdate.

    Thủ tục sự kiện có tên là:
    Form_BeforeUpdate đối với form
    controlname_BeforeUpdate đối với một control

    Cả hai đều có tham số quen thuộc Cancel. Với form, khi Cancel = True, nó sẽ không cho bạn rời khỏi record đó, trừ khi bạn nhấn ESC để hủy thay đổi (hoặc một macro hay lệnh tương ứng) hay nhập liệu cho chính xác với yêu cầu.
    Đối với control, khi Cancel = True, nó sẽ không cho bạn rời khỏi control đó trừ khi bạn cũng nhấn ESC để hủy bỏ thay đổi (hoặc nhập dữ liệu phù hợp).

    VD: Giả sử bạn nhập dữ liệu điểm thi 3 môn học A, B, C cho các thí sinh. Trong đó nếu khối của thí sinh là 1 thì môn A nhân hệ số 3, khối của thí sinh là 2 thì môn B nhân hệ số 3, khối của thí sinh là 3 thì môn C nhân hệ số 3.
    Điểm trung bình là tổng điểm 3 môn sau khi đã nhân với hệ số chia cho 5. Các điểm chỉ được từ 0 đến 10. Điểm trung bình sẽ tính ngay sau khi 3 môn được nhập. Điểm từng môn sẽ kiểm sau khi nhập xong điểm môn đó.
    Giả sử các control của bạn là: mahs, hotenhs, khoi, monA, monB, monC, dtb
    Bây giờ bạn sẽ "chế" 2 cái thủ tục BeforeUpdate cho form và cho các control điểm như sau:

    Làm một cái cho điểm môn A, điểm môn B và môn C tương tự:
    Private Sub monA_BeforeUpdate (Cancel As Integer)
    If monA < 0 Or monA > 10 Then
    MsgBox "Diem mon chi tu 0 den 10 thoi."
    Cancel = True
    End If
    End Sub

    Làm cho form:
    Private Sub Form_BeforeUpdate (Cancel As Integer)
    dim diem as double ' Lay theo kieu chuan, dung Single cung duoc tuy ban
    diem = IIf(khoi = 1, monA*3, IIf(khoi = 2, monB*3, monC*3))/5
    dtb=diem
    End Sub

    Bạn có thể chế biến thêm sao cho phù hợp.

    Thấy hay, nhớ vỗ tay ... :
    hurray:
     
  7. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Qua mấy ngày tạm dừng, quay vào lại hổng thấy ai khen thêm miếng nào để cho lên level.
    Hoặc không muốn khen thì cũng có thể chê đôi điều cho sung.
    Tuy vậy, tôi cũng vẫn tiếp tục post nội dung lên đây. Không sao cả, kiến thức là mênh mông, có một ít chia sẽ cho mọi người hưởng một ít.
    Xin các bạn lưu ý dùm là cái này hoàn toạn do tôi soạn ra, không có chơm của ai. Nếu có chăng là tham khảo tài liệu hướng dẫn của Microsoft cho chính quy.
    :smilielol5:

    11. Sự kiện AfterUpdate:
    Sự kiện xảy ra sau khi dữ liệu trong control đã có thay đổi, hoặc khi record đã được cập nhật vào table.
    Nó xảy ra sau sự kiện BeforeUpdate.
    Trong một record, dữ liệu có thay đổi trong mỗi control sẽ được cập nhật khi rời focus khỏi control đó bằng ENTER hoặc TAB.
    Còn nếu khi focus rời khỏi record hoặc người sử dụng gọi menu Records - Save Record, hay dùng lệnh DoCmd.RunCommand acCmdSaveRecord trong code.
    Lưu ý: sự kiện này không xảy ra khi có sự thay đổi giá trị trong các control tính toán hoặc control Unbound.
    Từ sự kiện này, bạn có thể điều khiển nó để thực hiện một vài tác vụ tương tự như sau:
    - Cho mở ra một form khác
    - Di chuyển sang một control khác với control default (control mặc định khi bạn nhấn ENTER, TAB sẽ chuyển focus đến nó).
    ...
    Thuộc tính sự kiện có tên là AfterUpdate.
    Thủ tục sự kiện có tên:
    Với control: controlname_AfterUpdate
    Với form: Form_AfterUpdate.
    Thủ tục này không có tham số.

    12. Sự kiện AfterInsert:
    Sự kiện xảy ra sau khi recordmới được thêm vào.
    Thuộc tính sự kiện có tên là AfterInsert.
    Thủ tục sự kiện có tên là Form_AfterInsert, không có tham số.

    13. Sự kiện Current:
    Như đã nói ở các bài trước, sự kiện Current là một trong chuỗi sự kiện có liên quan của form.
    Sự kiện xảy ra khi focus di chuyển đến một record, biến record đó trở thành record hiện hành, hoặc khi form được làm tươi nội dung - refresh hoặc làm tươi dữ liệu - requery.
    Thuộc tính sự kiện có tên là OnCurrent.
    Thủ tục sự kiện có tên là Form_Current. Không có tham số.
    Khi điều khiển sự kiện này, bạn có thể:
    - Cho thay đổi thuộc tính của một hay nhiều control nào đó, ứng với giá trị của một hay nhiều control khác.
    - Cho Requery lại dữ liệu trong Sub form khác.
    - ...

    VD: Thường trong khi thiết kế, bạn sẽ gặp tình huống sẽ thiết kế một form trong đó chứa 2 subform hoặc hơn.
    Khi chuyển đến một record nào đó trên subform 1 thì dữ liệu trong subform 2 sẽ thay đổi tương ứng, và rồi cũng thay đổi dữ liệu luôn trong subform 3 nếu nó có.
    Vậy chúng ta làm điều đó như thế nào?
    Trước tiên các bạn cần lưu ý, dữ liệu của các subform phải có quan hệ với nhau thì mới áp dụng được cách này.
    Bây giờ giả sử ta có 3 table:
    KHOI (makhoi, tenkhoi)
    LOP (malop, tenlop, makhoi)
    HOCSINH (mahs, hoten, malop)
    Quan hệ: KHOI --> LOP --> HOCSINH
    Bây giờ xem như bạn đã design 3 cái form tương ứng cho từng table (frmKHOI, frmLOP, frmHOCSINH).
    Bạn làm một cái form mới trắng.
    Nhúng 3 cái subform:
    - subform thứ nhất: Name: subKHOI, Source Object: frmKHOI
    - subform thứ hai: Name: subLOP, Source Object: frmLOP, Link Child Fields: makhoi, Link Master Fields: subKHOI.Form!makhoi
    - subform thứ ba: Name: subHOCSINH, Source Object: frmHOCSINH, Link Child Fields: malop, Link Master Fields: subLOP.Form!malop
    Bây giờ bạn vào frmKHOI. Bạn code cho Form_Current một câu thôi: Parent.subLOP.Requery.
    Vào frmLOP. Bạn code cho Form_Current: Parent.subHOCSINH.Requery.
    Xong rồi. :biggrin:
     
    Chỉnh sửa cuối: 24/10/07
  8. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    14. Sự kiện BeforeDelConfirm:
    Sự kiện này xảy ra khi có một hành động xóa một hay nhiều record được gọi, nhưng trước khi chúng thật sự bị xóa khỏi table (những record này tạm thời được giữ trên vùng nhớ đệm - buffer) và trước khi MS Access hiển thị một hộp thoại yêu cầu xác nhận hành động xóa này.

    Nếu bạn gỡ bỏ check box Record Changes trong nhóm Confirm của trang Edit/Find của hộp thoại Options (Tools - Options ...), sự kiện này sẽ không xảy ra và tất nhiên hộp thoại xác nhận cũng không hiển thị. Record được xóa ngay lập tức! (Đừng nên làm như thế).

    Bạn có thể điều khiển sự kiện này để thay thế hộp thoại thông báo của riêng bạn trước khi người sử dụng đồng ý xóa.

    Thuộc tính sự kiện tương ứng có tên BeforeDelConfirm.
    Thủ tục sự kiện tương ứng có tên Form_BeforeDelConfirm. Thù tục này có hai tham số.
    Tham số Cancel quá quen thuộc và
    Tham số Response: xác định xem điều gì sẽ thực hiện khi sự kiện xảy ra.
    - Nếu Response = acDataErrDisplay (mặc định), sau khi thủ tục sự kiện thi hành xong, Access cho hiện hộp thoại xác nhận xóa của chính nó.
    - Nếu Response = acDataErrContinue, Access sẽ bỏ qua hộp thoại xác nhận.

    VD: Bạn muốn cho người sử dụng thấy hộp thoại riêng của bạn khi xóa, bạn có thể code cho thủ tuc sự kiện như sau:

    [FONT=[FONT="Courier New"]"Courier New"]Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Response = acDataErrContinue
    If MsgBox("Xóa record đã chọn chứ?", vbOKCancel) = vbCancel Then
    Cancel = True
    End If
    End Sub[/FONT]
    [/FONT]

    15. Sự kiện AfterDelConfirm:

    Sự kiện xảy ra sau khi hộp thoại xác nhận xóa đã hiển thị và nhận thông tin phản hồi từ người sử dụng. Nếu sự kiện BeforeDelConfirm có bị hủy thì sự kiện này vẫn xảy ra. Nó cho biết tình trạng của việc xóa xảy ra thế nào.

    Thuộc tính sự kiện có tên: AfterDelConfirm.
    Thủ tục sự kiện có tên: Form_AfterDelContfirm. Thủ tục có một tham số Status để nhận tình trạng hiện thời của thao tác xóa.
    - Nếu Status = acDeleteOK thì việc xóa xảy ra bình thường.
    - Nếu Status = acDeleteCancel thì việc xóa được lập trình viên tự động cho hoãn.
    - Nếu Status = acDeleteUserCancel thì việc xóa là do người dùng thực hiện.

    VD:
    Private Sub Form_AfterDelConfirm(Status As Integer)
    Select Case Status
    Case acDeleteOK
    MsgBox "Xóa bình thường."
    Case acDeleteCancel
    MsgBox "Bị hủy do lập trình viên."
    Case acDeleteUserCancel
    MsgBox "Bạn đã hủy lệnh xóa."
    End Select
    End Sub


    16. Sự kiện Delete:
    Với sự kiện Delete, việc xóa xem như "trọn bộ".
    Sự kiện xảy ra khi người sử dụng đặt một hành động xóa record, nhưng trước khi record thực sự được xóa.

    Sự kiện Delete xảy ra cho từng record. Do vậy nếu bạn chọn nhiều record để xóa cùng lúc, sự kiện Delete sẽ xảy ra bấy nhiêu lần.
    Thông thường khi điều khiển hành động xóa, người ta ít thực hiện trên sự kiện này.

    Thuộc tính sự kiện có tên OnDelete.
    Thủ tục sự kiện có tên: Form_Delete. Có một tham số quen thuộc là Cancel.

    Với form, còn nhiều sự kiện nữa, tuy nhiên những sự kiện kể trên là thông dụng và thường được điều khiển "bẫy bắt" nhiều nhất.
    Nếu bạn nào chịu khó, bạn đó có thể mở Help của thằng Access ra luyện công. Bảo đảm không lên không ăn tiền.
    Lần tới tôi sẽ post tiếp các sự kiện có liên quan đến report, ít thôi nhưng đôi khi cũng hữu dụng.

    :sifone:
     
    Chỉnh sửa cuối: 25/10/07
  9. Thien

    Thien New Member Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Hay quá tiếp nha bạn.
    Sao bạn không đóng gói thành CHM cho tiện học.

    TC.
     
  10. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Hè, hè :-O21:
    Đây là để thử thách tính kiên nhẫn của các bạn mà.
    Dỡn chút thôi.
    Tại vì cái này không có sẵn, nhớ tới đâu thì show hàng ra tới đó. Mong sự thông cảm.
    Các bác mod nào có rảnh xin giúp dùm cái vụ tập hợp lại rồi ra thành CHM hay PDF để anh em nào cần thì down về (nếu thật sự thấy những cái này là hữu dụng). Cảm ơn các bác mod trước.
     
  11. Thien

    Thien New Member Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Bạn cho mình vài bài về Excel nhen.

    TC.
     
  12. mitricocien

    mitricocien New Member Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Khi thiết kế form, tôi muốn khi mở form ra thì con trỏ luôn nằm ở record cuối cùng, làm thế nào bạn?
     
  13. Nam Tước

    Nam Tước Người Không Mang Họ Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Cái này tớ không nhớ nhưng khi mở form ra mà cậu muốn con trỏ nằm ở Record cuối cùng thì cậu cứ việc click chuột vào nút >I ở nhóm navigation buttons là oki liền chứ có gì khó đâu nào.:sad:
     
  14. thuydhpy

    thuydhpy New Member Hội viên mới

    Ðề: Sự kiện (event) và các thủ tục sự kiện (event procedure)

    Bạn có thể dùng đối tượng ADO để đưa con trỏ mẫu tin về mẫu tin cuối rồi hiển thị trên Form theo thuộc tính bookmark
     
  15. huong

    huong New Member Hội viên mới

    mạc định vba không chay tiếng việt bạn ạ. muốn chạy tiềng việt phải cài thêm modem để chạy thì msgbox mới ra tiếng việt. aloo 01632522468
     

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.