intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Thủ thuật Access 3

Chia sẻ: Lê Hùng Quốc | Ngày: | Loại File: DOC | Số trang:16

345
lượt xem
63
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Thủ thuật chỉnh hay nên đọc: Tạo nút không lưu và không cho nhập vào combo box: Private sub KHONG_click() Me.Undo If NewRecord = True Then DoCmd.GoToRecord , , acLast End If End Sub - Cách 2: Private Sub Khong_Click() DoCmd.SetWarnings False DoCmd.RunCommand acCmdDeleteRecord DoCmd.SetWarnings True DoCmd.Close End Sub

Chủ đề:
Lưu

Nội dung Text: Thủ thuật Access 3

  1. Thủ thuật Access 3 SUNDAY, 8. JULY 2007, 13:58:02 THỦ THUẬT OFFICE Thủ thuật chỉnh hay nên đọc 1. Tạo nút không lưu và không cho nhập vào combo box a. . Private sub KHONG_click() Me.Undo If NewRecord = True Then DoCmd.GoToRecord , , acLast End If End Sub - Cách 2 Private Sub Khong_Click() DoCmd.SetWarnings False DoCmd.RunCommand acCmdDeleteRecord DoCmd.SetWarnings True DoCmd.Close End Sub ̣ ̀ ̉ ̣ b. - Ban vao properties cua combox --> tab Data --> property Limit to List : chon Yes. - Private Sub Combo_NotInList(NewData As String, Response As Integer) Response = acDataErrContinue MsgBox "Ban kiem tra lai du lieu", , "Bao loi !" End Sub 2. Làm thế nào để View report ở chế độ cố định Trả lời Ghi chú Dim stDocName As String stDocName = "R01_Du An Moi" DoCmd.OpenReport stDocName, acPreview DoCmd.Maximize DoCmd.RunCommand acCmdZoom75 ' Các chế độ zoom khác : ' DoCmd.RunCommand acCmdFitToWindow ' DoCmd.RunCommand acCmdZoom10 ' DoCmd.RunCommand acCmdZoom25 ' DoCmd.RunCommand acCmdZoom50 ' DoCmd.RunCommand acCmdZoom75 ' DoCmd.RunCommand acCmdZoom100 ' DoCmd.RunCommand acCmdZoom150 ' DoCmd.RunCommand acCmdZoom200 3. Giúp em phần từ listbox sang textbox Chào bạn! Có lẽ bạn không cần viết một dòng lệnh nào. Wizard của Access đã giúp bạn làm chuyện này. Cách làm như sau: Bạn vẽ một list box lên form (sử dụng Wizard). Access cho phép bạn lựa chọn 1 trong 3 tùy chọn. Bạn chọn mục 3 (tìm kiếm mẩu tin dựa vào giá trị được chọn trong list box). Xong, nhắp Next. Trong màn hình tiếp theo, bạn có thể chọn các trường IDBao, TenBao,... Màn hình tiếp theo, bạn có thể chọn mục Hide Key Column để ẩn trường IDBao đi. Xong, nhắp Next... Như vậy, khi bạn chọn một giá trị trong list box, Access sẽ nhảy tới mẩu tin chứa giá trị IDBao mà bạn chọn, tức nó sẽ hiển thị các thông tin của các trường khác. Bạn lưu ý: Sau khi thiết kế xong list box, bạn không nên đổi tên (name) của nó, vì Access đã phát sinh
  2. một đoạn mã trong sự kiện After Update của list box này. Không biết như vầy có đúng ý bạn không? 4. Kết nối dữ liệu Access trong mạng Lan Bạn có tạo 1 file access tên Data chỉ lưu lưu dữ liệu trên 1 máy A chẳng hạn., lưu ý thư mục chứa file data phải được share và cấp quyền cho các máy con khác truy cập. Sau do tạo 1 file access tên App để viết các form nhập liệu, hay báo cáo, trong file này bạn chọn Tabs Tables, Right click vào Tables trong menu hiện ra bạn chọn Link Tables.., trong hộp thoại hiện ra bạn chỉ đường dẫn đến File Data, sau đó sẽ xuất hiện hộp thoại liệt kê các tables trong File Data bạn chọn toàn bộ các table rồi OK, khi đó trong file App sẽ có các table chỉ tới table trong File Data mà bạn đã chọn. Sau khi viết trong chương trình xong, có thể chạy trên các máy trong mạng, và dữ liệu được lưu ở 1 nơi. 5. Về phần xóa mẩu tin mà bỏ qua thông báo xác nhận của Access, bạn có thể làm như sau: Bạn dựa vào sự kiện Before Del Confirm của form như sau: Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer) Response = acDataErrContinue 'báo cho Access là cứ xóa "vô tư" mà không cần hỏi han gì cả End Sub Tuy nhiên, xóa dữ liệu là một việc quan trọng, bạn nên có một thông báo để người dùng xác nhận có thật sự muốn xóa hay không. Bạn có thể tham khảo cách sau: Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer) Dim i As Integer i = MsgBox("Nguy hiem chet nguoi" & vbCrLf & "Ban chac rang muon xoa...", vbYesNo, "Xac nhan") 'hien thi thong bao xac nhan xoa If i = vbYes Then 'neu nguoi dung chọn Yes Response = acDataErrContinue 'xoa mau tin Else Cancel = True 'khong xoa nua End If End Sub Ghi chú: Bạn có thể bỏ dòng MsgBox Err.Description để nếu người dùng chọn No (không xóa), Access sẽ không thông báo dòng DoMenuItem Action was canceled. 6. Xử lý hiện thông báo khi không nhập dữ liệu vào texbox Bạn sử dụng event on Lost Focus của textbox muốn ktra. Khi thoát khỏi thì check có IsNull hay kô? nếu IsNull là true thì quay lại ô đó textbox.SetFocus Vd: bạn có textbox Date Private Sub txtDate_LostFocus() If IsNull(txtDate) Then MsgBox "Ban phai nhap ngay vao o nay", vbCritical, "Thong bao" txtDate.SetFocus Cancel = True End Sub 7. Cách khóa fím Shift Bấm "modules" tab > New. (Bạn có thể mở 1 module khác nếu có sẵn) * Lưu ý: Phải chắc chắn là thư viện DAO 3.6 được chọn: Chọn Tools > References , tìm và chọn Microsoft DAO 3.6 Object Library Chép function sau đây vào module và lưu với tên bất kỳ (khác DisableShiftKeyBypass). '---------Bắt đầu---------- Function DisableShiftKeyBypass() As Boolean On Error GoTo errDisableShift Dim db As Database Dim prop As DAO.Property Set db = CurrentDb() On Error Resume Next db.Properties.Delete "AllowByPassKey" On Error GoTo errDisableShift
  3. Set prop = db.CreateProperty("AllowByPassKey", dbBoolean, False, True) db.Properties.Append prop DisableShiftKeyBypass = True exitDisableShift: Set prop = Nothing Set db = Nothing Exit Function errDisableShift: MsgBox "Function DisableShiftKeyBypass did not complete successfully." DisableShiftKeyBypass = False Resume exitDisableShift End Function '----------------Kết thúc--------------------- Vào Debug, Compile, và đóng module lại để lưu. Tại database window, Gõ Ctrl-G để mở debug window. Gõ: DisableShiftKeyBypass và bấm Enter. Lần sau khi mở lại, phím Shift sẽ bị vô hiệu hóa. (Bạn chỉ cần chạy 1 lần duy nhất - Trong trường hợp cần phục hồi lại phím Shift, bạn sẽ cần đến file đã sao lưu, hoặc phục hồi từ một database khác). 8. Bảo mật không cho chỉnh sửa form và report trong file *.mdb TOI GUI CHO BAN 1 MACRO de bao mat ACCESS tuyet voi Nhung nho sao luu du phong truoc khi quay khong biet thi hoi toi hhnguyen@picotrack.com ***************************************** 'Hàm ChangeProperty thay doi các thuoc tính cua CSDL Function ChangeProperty(strPropName, varPropType, varPropValue) Dim dbs As Database, prp As Property Const conPropNotFoundError = 3270 Set dbs = CurrentDb On Error GoTo Change_XuLyLoi dbs.Properties(strPropName) = varPropValue ChangeProperty = True Change_KetThuc: Exit Function Change_XuLyLoi: 'Thuoc tinh khong thay If Err = conPropNotFoundError Then
  4. Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else 'Không biet loi gì ChangeProperty = False Resume Change_KetThuc End If End Function 'Xu lý tình huong chon nút [Khóa database] Private Sub cmdLock_Click() 'Bieu mau này duoc nap truoc If txtPassword = "nguyenhuuhoang361983" Then ChangeProperty "StartupForm", dbText, "Form1" ChangeProperty "StartupShowDBWindow", dbBoolean, False ChangeProperty "StartupShowStatusBar", dbBoolean, False ChangeProperty "AllowBuiltinToolbars", dbBoolean, False ChangeProperty "AllowFullMenus", dbBoolean, False ChangeProperty "AllowBreakIntoCode", dbBoolean, False ChangeProperty "AllowSpecialKeys", dbBoolean, False 'Không cho xài phím Shift de bo qua bieu mau frmKhoiDong ChangeProperty "AllowBypassKey", dbBoolean, False MsgBox "Co so du lieu dã duoc khóa! Ðe nghi dóng CSDL lai.", vbOKOnly, "Thong bao" cmdExit.SetFocus cmdUnLock.Visible = True cmdLock.Visible = False txtPassword.Visible = True Else MsgBox "Ten nguoi su dung khong dung ! ", vbOKOnly, "Thong bao"
  5. End If txtPassword = "" End Sub 'Xu lý tình huong chon nút [Mo database] Private Sub cmdUnLock_Click() 'Không can bieu mau khoi dong nua If txtPassword = "nguyenhuuhoang361983" Then ChangeProperty "StartupForm", dbText, "" ChangeProperty "StartupShowDBWindow", dbBoolean, True ChangeProperty "StartupShowStatusBar", dbBoolean, True ChangeProperty "AllowBuiltinToolbars", dbBoolean, True ChangeProperty "AllowFullMenus", dbBoolean, True ChangeProperty "AllowBreakIntoCode", dbBoolean, True ChangeProperty "AllowSpecialKeys", dbBoolean, True ChangeProperty "AllowBypassKey", dbBoolean, True MsgBox "Co so du lieu dã duoc mo khóa ! Ðe nghi dóng CSDL lai.", vbOKOnly, "Thong bao" cmdExit.SetFocus cmdLock.Visible = True cmdUnLock.Visible = False txtPassword.Visible = True Else MsgBox "Ten nguoi su dung khong dung !", vbOKOnly, "Thong bao" End If txtPassword = "" End Sub 'Xu lý tình huong khi mo bieu mau Private Sub Form_Open(Cancel As Integer) Dim dbs As Database Set dbs = CurrentDb On Error GoTo KhongCoThuocTinh_Err If dbs.Properties("AllowBypassKey") Then
  6. cmdLock.Visible = True cmdUnLock.Visible = False txtPassword.Visible = True Else cmdLock.Visible = False cmdUnLock.Visible = True txtPassword.Visible = True End If Exit Sub KhongCoThuocTinh_Err: cmdLock.Visible = True cmdUnLock.Visible = True txtPassword.Visible = True txtPassword = "" End Sub 'Khi nguoi ta go mat khau va an phím Enter Private Sub txtPassword_LostFocus() If txtPassword = "nguyenhuuhoang361983" Then cmdUnLock.Visible = True End If End Sub Private Sub cmdExit_Click() On Error GoTo Err_cmdExit_Click DoCmd.Close Exit_cmdExit_Click: Exit Sub Err_cmdExit_Click: MsgBox Err.Description Resume Exit_cmdExit_Click End Sub ************************************************ code nay do nguoi khac viet , toi chi tham khao thoi
  7. 9. Làm Form giống như Windows Explorer ? Trong Access bạn có thể sử dụng tính năng Pivot Table Wiew của form để thực hiện yêu cầu trên. Để thiết kế trước tiên bạn chọn nguồn dữ lệu cho form, sau đó vào nenu Wiew, chọn Pivot Table Wiew. tiếp đó bạn chỉ cần kéo thả các trường vào các vị trí "Drop row Fields here", Drop column Fields here", "Drop totals or Detail Fields here" thích hợp là đươc. Chúc bạn thành công! Thủ thuật Access 4 SUNDAY, 8. JULY 2007, 13:41:28 THỦ THUẬT OFFICE Thủ thuật chỉnh hay nên đọc Các câu lệnh trong Access 1. Khi gõ vào hộp thoại Combobox nếu không có dữ liệu sẽ hiện thông báo. Private Sub Nghenghiep_NotInList(NewData As String, Response As Integer) Response = acDataErrContinue MsgBox "Cai nay khong co trong Combbox.", , "Bao loi !" End Suba 2. Khi muốn thông báo cho người nhập biết trị số nhập vào testbox vượt quá 100 Private Sub Tuoi_LostFocus() If ((Tuoi) > 100) Then MsgBox "chu y qua cao tuoi", , "Canh bao" End If End Sub 3. Khi muốn che đi các thông báo lỗi tiếng anh của Access thì bằng cách. Private Sub Form_Error(DataErr As Integer, Response As Integer) Const SaiDuLieu = 2113 ‘ Loi nhap sai dinh dang so thanh chu Const Rong = 3058 ' Loi khoa chinh hoặc bo trống Const Nhapsai = 2279 ' Loi nhap sai so voi dinh dang inputmat Dim strMsg As String Select Case DataErr Case SaiDuLieu Response = acDataErrContinue strMsg = "Xin kiem tra lai cach nhap du lieu. " MsgBox strMsg, , "Bao loi !" Case Rong Response = acDataErrContinue strMsg = "Ban phai nhap ma so?" MsgBox strMsg, , "Bao loi !" Case Nhapsai Response = acDataErrContinue strMsg = "Ban nhap sai so?" MsgBox strMsg, , "Bao loi !" End Select End Sub 4. Làm dòng chữ chạy từ phải qua trái. Tại thuộc tính on Timer của Forms ta viết Private Sub Form_Timer() Me.TimerInterval = 400 Dim x, y, AsString
  8. x = Left(label.Caption, 2) y = Right(label.Caption, Len(label.Caption) - 2) label.Caption = y + x End Sub ( Dòng chữ chạy trên forms với test tên là label, caption là gì cũng được) 5. Khi xoá một mẫu tin trên forms ta muốn hệ thống hiện thông báo thì làm như sau. Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer) Dim n_Reply As Integer n_Reply = MsgBox("XOA THAT KHONG", vbQuestion + vbYesNo) If n_Reply = vbNo Then Cancel = True SendKeys "{Enter}", False Else If n_Reply = vbYes Then SendKeys "{Enter}", False End If End If End Sub 6. Tạo cảnh báo khi nhập “từ ngày” lớn hơn “đến ngày”. Private Sub Denngay_AfterUpdate() If ((Tungay) >= (Denngay)) Then 'Neu tu ngay lon hon den ngay thi thong bao' MsgBox "Chu y nhap sai ngay", vbOKOnly, "Bao loi !" SendKeys "+{TAB}", False End If End Sub 7. Nếu nhập từ ngày rồi mà quên nhập đến ngày thì báo lỗi. Private Sub Denngay_LostFocus() If (Not IsNull(Tungay)) Then 'Neu tu ngay nhap roi ma den ngay chua co thi bao loi' If (IsNull(Denngay)) Then MsgBox "Xin nhap Den ngay ", vbOKOnly, "Bao loi" SendKeys "+{TAB}", False End If End If 8. Nếu khi rời khỏi 1 ô textbox mà rỗng thì báo lỗi. Private Sub Giuong_GotFocus() ‘ Khi vao textbox Giuong’ If (IsNull(Phong)) Then ' Neu phong trong thi bao loi MsgBox "Xin loi chua co phong", vbInformation, "Chu y" SendKeys "+{TAB}", False End If End Sub 9. Khi Chọn là BH mà không nhập số BH thì thông báo. Private Sub SoBH_LostFocus() If (txtDoituong) = "BH" Then 'neáu ñoùi tuôïng laø BH ' If (IsNull(SoBH)) Then 'Maø soá BH khoâng coù thì thoâng baùo' MsgBox "Chuù yù chöa nhaäp soá baûo hieåm ", vbOKOnly, "Thoâng baùo" SendKeys "+{TAB}", False End If End If 10. Tao nút lệnh trong forms ĐĂNG NHẬP (co tên Command3) để đăng nhập hệ thóng Private Sub Command3_Click() If (Not IsNull(DLookup("[Ten]", "MK", "[Ten]=[txtMK]"))) Then DoCmd.Close Else MsgBox "DANG NHAP TRAI PHEP" & Chr(13) & "BAN KHONG CO QUYEN SU DUNG", _
  9. vbOKOnly, "CANH BAO" End If End Sub ‘ Trên forms DANG NHAP tạo một test box có tên là “txtMK” và trong table MK có trường là [Ten] ,song bây giờ sẽ giải nghĩa như sau: Khi người nhập gõ mật khẫu đăng nhập và nhắp nút Command3 để vào hệ thống, chương trình sẽ kiểm tra (nếu txtMK là không rỗng thì đối chiếu trong table MK nếu mật khẩu “Ten” mà trùng với “txtMK” thì thoát form này, ngược lại thì thong báo) 11. Làm vô hiệu hoá các nút lệnh không cần thiết. Private Sub Form_Current() If Not IsNull(txtMabenh) Then ‘Neu txtMabenh không rỗng thì Me.txtthem.Enabled = True ‘ làm nút lệnh txtthem hiệu lực Else If IsNull(txtMabenh) Then ‘Neu txtMabenh rỗng thì Me.txtthem.Enabled = False ‘Nút lênh txtthem khong sử dụng được End If End If End Sub 12. Khi thoát khỏi một đối tượng mà lại muốn con trỏ về một control khác thì làm như sau: Private Sub BSDT_LostFocus() DoCmd.GoToControl "Ngay" ‘Dời về control Ngay End Sub 13. Hiệu ứng màu cho label. Tạo một label có tên là label25. “khi mở form thì label 25 hiện 1 dòng chữ màu xanh Private Sub Form_Open(Cancel As Integer) Label25.Caption= “Hiện chữ màu xanh nè” Label25.ForeColor=vbBlue 14. Cập nhật lại một đối tượng. Docmd. Requery “CboMabenh” 15. Cảnh báo nếu chưa chọn mã kho trong comboBox mã bệnh nhân thì báo lỗi. Private Sub Tenhuoc_GotFocus() ‘Khi con tro nhảy vào combobox Tenthuoc If(isNull(Forms![Danhmucbenhnhan]![cboMabenh])) then ‘ Nếu cboMabenh trong form Danhmucbenhnhan mà rỗng thì hiện thông báo dưới đây Msgbox “Chưa chọn mã bệnh nhân”,_vbExclamation, “Quan ly thuoc” Sendkeys “+{TAB}”, False Exit Sub End if End Sub 16. Hỏi : Tôi có 1 combo box (cboMaHang), tôi muốn khi người dùng đánh mã hàng không có trong hộp danh sách thì hiện lên thông báo lỗi, phải làm sao ? Đáp : dùng sự kiện NotInList của combo box Private Sub cboMaHang_NotInList(NewData As String, Response As Integer) Response = acDataErrContinue MsgBox "Ma hang nay khong co.", , "Bao loi !" End Sub - Mở properties của cboMaHang --> Tab Data --> Limit To List : Yes 17. Dùng các phím F1, F2…để mở các form
  10. Bạn Tạo macro Autokeys : Macro Name : {F1} Action : OpenForm Form Name : Form_NhapXuat 18. Hỏi: Tôi có thể mở bất kỳ mẫu biểu nào trong CSDL bằng cách chọn tên mẫu biểu từ combo box (list box) trong mẫu biểu khác không. Trả lời: Tạo một combo box từ mẫu biểu nào mà bạn muốn chọn để mở mẫu biểu đầu tiên. Combo box được thiết lập các thuộc tính sau: Name: List of forms Data: Value list (để cài đặt thuộc tính Row Suorce type) Event: [On Enter] ' Đoạn mã xử lý như sau: Private Sub Listofforms_enter() Dim MyDb as Database Dim MyContainer as Container Dim I as integer Dim list as string Set MyDb = DBEngine.Workspace(0).Database(0) Set My Container = MyDb.Containers("Forms") List = " " For I=0 to MyContainer.Documents.count - 1 List = List & MyContainer.Documents(I).name & ";" Next I me! • .Row Suorce = Left(List, Len(list)-1) End sub ' Nhập tiếp thuộc tính After Update của Combo box Private Sub ListofForms_AfterUpdate() Docmd.OpenForm me![ListofForms) End Sub 19. Tạo dòng chữ nhấp nháy trên thanh tiêu đề. Bạn dùng 2 sự kiện của Form: Open và Timer - Private Sub Form_Open(Cancel As Integer) Me.Caption = "Dữ liệu đã bị khóa !" Me.TimerInterval = 600 End Sub - Private Sub Form_Timer() If Me.Caption = Space(1) Then Me.Caption = "Dữ liệu đã bị khóa !" Else Me.Caption = Space(1) End If End Sub 20. Tạo dòng chữ chạy trên thanh tiêu đề chính là tên của Form được hiện: Tại thuộc tính on Timer của Forms ta viết Private Sub Form_Timer() Me.TimerInterval = 400 Dim x, y, AsString x = Left(Me.Caption, 2) y = Right(Me.Caption, Len(Me.Caption) - 2) Me.Caption = y + x End Sub
  11. 21. Để List trong Combobox được thả nhanh hơn ta làm như sau: Trong sự kiện Load form ta viết Private Sub Form_Load() Dim IngCount As Variant ‘ Khai báo biến’ IngCount = SoDK.ListCount ‘SoDK là tên của cobobox trong Form’ End Sub 22. Hàm đọc số thành chữ. - Tạo một Modules có tên là “my user” sao đó chép đoạn code sau vào trong nội dung. - Muốn thi hành được modules này thì trong Reports bạn tạo một textbox chứa số có tên là (txtthanhtoan) và một testbox hiện chữ được dịch là (= vnd([txtthanhtoan]) Public Function VND(baonhieu) Dim Ketqua, sotien, Nhom, chu, dich, s1, s2, s3 As String Dim i, j, vitri As Byte, s As Double Dim hang, doc, dem If baonhieu = 0 Then Ketqua = "Khoâng ñoàng" Else If Abs(baonhieu) > 999999999999.99 Then Ketqua = "Soá quaù lôùn" Else If baonhieu < 0 Then Ketqua = "Tröø" & Space(1) Else Ketqua = Space(0) End If sotien = Format(Abs(baonhieu), "###########0.00") sotien = Right(Space(12) & sotien, 15) hang = Array("none", "traêm", "möôi", "gì ñoù") doc = Array("none", "tyû", "trieäu", "ngaøn", "ñoàng", "chaün") dem = Array("none", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín") For i = 1 To 5 Nhom = Mid(sotien, i * 3 - 2, 3) If Nhom Space(3) Then Select Case Nhom Case "000" If i = 4 Then chu = "ñoàng" & Space(1) Else chu = Space(0) End If Case ".00" chu = "chaün" Case Else s1 = Left(Nhom, 1) s2 = Mid(Nhom, 2, 1) s3 = Right(Nhom, 1) chu = Space(0) hang(3) = doc(i) For j = 1 To 3 dich = Space(0) s = Val(Mid(Nhom, j, 1)) If s > 0 Then dich = dem(s) & Space(1) & hang(j) & Space(1) End If Select Case j Case 2 And s = 1
  12. dich = "möôøi" & Space(1) Case 3 And s = 0 And Nhom Space(2) & "0" dich = hang(j) & Space(1) Case 3 And s = 5 And s2 Space(1) And s2 "0" dich = "l" & Mid(dich, 2) Case 2 And s = 0 And s3 "0" If (s1 >= "1" And s1 0 Then Mid(chu, vitri, 9) = "möôi moát" Ketqua = Ketqua & chu End If Next i End If End If VND = UCase(Left(Ketqua, 1)) & Mid(Ketqua, 2) End Function 23. làm thế nào để dữ liệu trong 1 text box tự động xuống dòng nếu vượt quá độ dài đã quy định. Xin cảm ơn trước. - Bạn đặt thuột tính Can Grow của text box là yes Thủ thuật trong Access Xem bai viet bang font ABC 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:
  13. Sub cmdOK_Click () If grpOpt.Value = 1 Then Else 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";
  14. 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) _
  15. 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 THỦ THUẬT THỨ 2 Hỏi: Các Huynh chỉ dùm trong Access khi chọn 1 mục trong Combo box  VD: MANV nào đó thì ở TextBox kế bên hiển thị ngay tên nhân viên theo  MANV đó. Mình cho vd nhé: Giả sử bạn có bảng nhân viên(MaNV;TenNV) bây giờ tại  Form: Frmnhanvien bạn có 1 combobox(tên là Cboma) để gõ mã nhân  viên và 1 Textbox(tên là txttenNV) để hiển thị tên nhân viên ứng với mã NV  đã chọn. VD khi gõ vào combobox mã nhân viên NV01 thì textbox sẽ hiển  thị là Nguyễn Văn A; khi gõ vào nhân viên NV02 thì textbox hiển thị là  Nguyễn văn B... Muốn vậy tại textbox trên Form frmnhanvien: chọn Text txttenNV gõ vào  công thức: =Dlookup("tenNV","nhanvien","nhanvien!maNV=[Forms]![frmNhanvien]! [Cboma]") thì bạn sẽ có được kết quả ngay nhưng nhớ đặt thuộc tính Looked= Yes  cho Textbox txttenNV (Mục đích là textbox này chỉ để hiển thị kết quả,  không cho sửa đổi) Ví dụ bạn có Table la NhanVien gồm hai trường MaNV, TenNV Bạn tạo Form có 1 Combo la CmbMaNV; 1 Text Box là txtTenNV Source của CmbMaNV là table NhanVien trên. Đoạn code như sau: Mã:
  16. Private Sub cmbMaNV Click() Me.txtTenNV.Value = Me.cmbMaNV.Column(1) End Sub 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: Code: 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: Code: Sub cmdOK_Click () If grpOpt.Value = 1 Then Else End If End Sub
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2