Tải bản đầy đủ (.doc) (16 trang)

Thủ thuật Access 3 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (203.55 KB, 16 trang )

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. - 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
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
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

*****************************************
'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
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"
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
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
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
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 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à qn 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 tï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", _
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
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
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 = "Không đồng"
Else

If Abs(baonhieu) > 999999999999.99 Then
Ketqua = "Số quá 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", "trăm", "mươi", "gì đó")
doc = Array("none", "tỷ", "triệu", "ngàn", "đồng", "chẵn")
dem = Array("none", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tá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 = "đồng" & Space(1)
Else
chu = Space(0)
End If
Case ".00"
chu = "chẵ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
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 <= "9") Or (s1 = "0" And i = 4) Then
dich = "leỷ" & Space(1)
End If
End Select
chu = chu & dich
Next j
End Select
vitri = InStr(1, chu, "mửụi moọt", 1)
If vitri > 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. lm th no d liu trong 1 text box t ng xung dũng nu vt quỏ di ó quy nh. Xin
cm n trc.
- Bn t thut tớnh Can Grow ca text box l yes
Th thut 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 bn nhúm cỏc nỳt Option vo trong mt Option group, thỡ mi nỳt Option ny s
khụng nhn c s kin nhn ỳp vo mt nỳt Option no úó. iu ny gõy khú chu cho ngi dựng
cú thúi quen nhn kộp chut vo Option c chn ng thi xỏc nhn l chn Option v úng li
Dialog box, (thụng thng thỡ trong Dialog box kiu chn la mt trong nhiu Option, ta phi chn bm
nỳt Option, ri bm tip nỳt OK).
Chỳng ta li dng s kin DblClick ca i tng Option group gii quyt vn trờn. Khi y s
kin DblClick lờn mt nỳt Option bt k trong Option group s kớch nỳt OK (hoc nỳt lnh tng ng vi
nỳt Option y), v sau õy l on mó minh ha:
Sub grpOpt_DblClick (Cancel As Integer)
? Fire the OK Command Button
Call cmdOK_Click
End Sub
on mó trong nỳt lnh 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.
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ã:
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
<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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×