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.. Sau do tạo 1 file acce
Trang 1Thủ 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 - Bạn vào properties của combox > tab Data > property Limit to List : chọn 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
Trang 2mộ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
Trang 3Set 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
Trang 4Set 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"
Trang 5End 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
Trang 6cmdLock.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
Trang 79 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
Trang 8x = 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 xố 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 'nếu đói tuợng là BH '
If (IsNull(SoBH)) Then 'Mà số BH không có thì thông báo'
MsgBox "Chú ý chưa nhập số bảo hiểm ", vbOKOnly, "Thông bá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", _
Trang 9vbOKOnly, "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
Trang 10Bạ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
21 Để List trong Combobox được thả nhanh hơn ta làm như sau: