Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

30/11/2009

Giáo Trình Access 2000

Một giáo trình hay diễn giải chi tiết,với nhiều ví dụ sinh động,dễ hiểu bằng tiếng Việt 100% của Tác giả Nguyễn Sơn Hải rất thích hợp cho các bạn mới bắt đầu lập trình CSDL, đồng thời giúp bạn làm quen với VBA( visual basic for application), một ngôn ngữ thân thiện hỗ trợ hầu hết các ứng dụng của Microsoft.

Tự động tạo CSDL Access bằng VBA

Hôm trước tôi giới thiệu các bạn cách tạo 1 file MDB mớiđể xuất dữ liệu ra đó. Hôm nay xin giới thiệu các bạn cách tạo 1 file Access mới hoàn toàn, đồng thời thông qua VBA để tạo table cùng các field trực tiếp trên đó!

23/11/2009

Tạo Query tạm để xử lý dữ liệu trong VBA

Hỏi: Trước đây em tạo query bằng lưới, nên lúc nào cũng có query tồn tại trong chương trình; bây giờ em học định nghĩa query bằng VBA, để không tồn tại query trong chương trình nữa.Sau khi xử lý xong thì xóa đi

22/11/2009

Tạo file Access mới và xuất dữ liệu ra đó

Đoạn code sau cho phép bạn tạo 1 file MDB mới trong cùng 1 thư mục với chương trình

Hàm thay thế chuỗi trong Access

Đôi khi bạn có nhu cầu thay 1 chuỗi này bằng 1 chuỗi khác. Khi đó bạn có thể dùng hàm Replace. Cú pháp như sau:

Replace ( string1, find, replacement, [start, [count, [compare]]] )

20/11/2009

Canh Form giữa màn hình

Như các bạn biết. Mặc định Access đã cho ta thuộc tính auto Center và auto resize.
Nhưng có vẻ như nó không đáp ứng được nhu cầu của chúng ta.
Sau đây mình xin giới thiệu code canh giữa form.
Trong Sự kiện Load Form, bạn cho code sau vào:
Private Sub Form_Load()
Const t = 567
Dim R As Integer, D As Integer, W As Integer, H As Integer
' với 10 là chieu rong cua form, tinh bang cm
W = 10 * t
' 7 la chieu cao cua form tinh bang cm
H = 7 * t
R = (Me.InsideWidth + W)
D = (Me.InsideHeight + H)
DoCmd.MoveSize R, D, W, H
End Sub

18/11/2009

Lấy về số seri CPU, ổ cứng MainBoard trong Access

Đôi khi có 1 số nhu cầu lấy thông tin phần cứng trong chương trình (chẳng hạn để cấp bản quyền). Dưới đây là Đoạn Code cho phép bạn lấy thông tin CPU máy tính:

Không cho xoá File Data

Hỏi: File data muốn sử dụng thì phải share full, mà share full thì bị mần thịt là chuyện thường xuyên.
A e cho hỏi có cách nào khắc phục ko cho xoá File Data.Mdb trong môi trường nhiều người dùng. Có chương trình ngoại vi nào không cho xoá File Data mà các Client vẫn hoạt động bình thường không?

15/11/2009

Nhập đường dẫn 1 file ảnh vào chương trình để lưu!

Hôm trước tôi có nêu thủ thuật Insert 1 ảnh vào form/report khi đã có đường dẫn ảnh.

Hôm nay tôi sẽ giới thiệu các bạn cách để nhập liệu đường dẫn ấy sao cho người dùng chỉ cần click chuột.
Trên form, bạn vẽ 1 textbox đặt tên là txtPic, một nút nhấn tên cmdInsertPic,1 đối tượng ảnh đặt tên là image
bạn phải tạo 1 funtcion để lấy về đường dẫn file ảnh

In hình ảnh khi có đường dẫn hình

Hỏi: Tôi đã lưu hình ảnh vào ổ đĩa G: ( G: là ổ đĩa mạng). Và có 1 cơ sở dữ liệu lưu đường dẫn theo dạng : tvhinh(mahang,txtpic). Bây giờ trong Report làm sao tôi có thể vẽ lại các hình tôi đã lưu!
Đáp:
Trong Report, bạn vẽ 1 textbox đặt tên là txtpic, đặt thuộc tính visible của nó là False.
Vẽ 1 đối tượng image đặt tên nó là image1
Sau đó cho đoạn code sau vào

Tạo một đường viền cho report

Tôi muốn tạo một đường viền cho report giống như boder style của word khi in mà kô phải mất công kẻ bằng tay được ko?

Đáp:
Cho đoạn code sau vào report!
Private Sub Report_Page()
       On Error Resume Next
         Me.DrawWidth = 6   ' do rong duong line
         Me.DrawStyle = 0   ' 0 den 6 => kieu duong mat dan
         ' Sử dụng công thức object.Line (x1, y1) - (x2,y2), color, [Box=B]
         Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbred, B
       End Sub

Thảo Luận vấn đề này tại đây

Thiết kế Ctrình phân quyền

Phân quyền trong Access

Trong Access đã hỗi trợ phân quyền bằng cách tạo file workGroup *.mdw, *.mda. tuy nhiên cách này hơi nhiêu khê ở chỗ là máy sử dụng phải map tới file này thì mới xài được.
Vì vậy một cách khác mọi người quan tâm là phân quyền trực tiếp trong chương trình access của mình. Nếu mình post 1 đoạn chương trình lên cho mọi người tham khảo thì quá dễ dàng, nhưng điều đó không mang ý nghĩa học tập. Vì vậy, mình quyết định sẽ tiến hành Phân tích bài toán và thiết lập từng bước sao cho dễ hiểu nhất, ai biết Access cũng có thể làm được.

Tắt Security warning của Access

Hỏi

khi mở database thì xuất hiện thông báo “Security warning Certain content in the database has been disabled” và chọn nút option thì xuất hiện tiếp bảng thông báo và phải chọn Enble this content.
Xin các bạn hướng dẫn viết code để khi sử dụng bất kỳ máy tính nào khi mở database này lên không còn xuất hiện thông báo nữa và mặc định là chọn Enble this content.

Chuyển chữ thường thành chữ Hoa

Hỏi: Tôi làm chương trình qlý SV, vô ý lúc nhập tên toàn nhập chữ thường, tôi muốn tạo một hàm có thể in hoa tất cả mẫu tự đầu của từng từ trong trường văn bản thì phải làm như thế nào?
Trả lời: Hàm của bạn làm như sau:
Function Inhoachucaidau (Word as Variant) as String
   Dim temp as string, C as string, OldC as String, X as integer
   If IsNull(Word) then
      Exit Function
Else

Thay thế báo lỗi tiếng Anh bằng tiếng Việt

Thường khi thao tác với Access, bạn hay gặp các câu báo lỗi bằng tiếng Anh, thay vào đó, bạn muốn khi gặp lỗi tương tự thì phải báo bằng tiếng Việt.
Ta làm như sau:
1) Đầu tiên bạn download file AccessAndJetErrors.zip từ :
http://www.access-programmers.co.uk/...1&d=1055362440
Giải nén và mở file AccessAndJetErrors.mdb, mở table tAccessAndJetErrors bạn sẽ thấy table này có 2 Field : ErrorCode ErrorString. Table này liệt kê hầu hết các lỗi của Access, Ví dụ : bạn tìm trong table này record có ErrorCode là 2113 sẽ thấy ErrorString chính là câu báo lỗi trên.

14/11/2009

Code Kiểm tra sự tồn tại của 1 file trong Access

' kiem tra su ton tai file
Function FileExit(fname As String) As Boolean

If Dir(fname) <> "" Then
FileExit = True
Else
FileExit = False
End If

End Function

Gắn một số phím tắt cho các command button

Hỏi: Tôi muốn gắn một số phím tắt cho các command button trên form để khi bấm phím tắt đó, các câu lệnh sẽ được thực hiện.( cach tao 1 autokeys trong access )


Đáp:
Bạn có thể cài shotcut key bằng cách chọn 1 ký tự trong caption của các button. Và thêm ký tự "&" trước ký tự đó. Khi bạn nhấn ALT + ký tự. Nó sẽ là shotcut key.

Ví dụ nút OK thì bạn viết : &OK

Shotcutkey sẽ là ALT+O

Code kiểm tra sự tồn tại của table


Public Function KIEMTRA(TableName As String)As Boolean
   ' Khai báo biến cục bộ truy xuất đến Database Access
     Dim DB As Database
   ' Biến N lưu trữ số Tables của Database (dùng Byte là đủ)
     Dim N As Byte
   ' Biến i để duyệt qua từng Table
     Dim i As Byte
   ' Khởi tạo biến DB
    Set DB = DBEngine.Workspaces(0).Databases(0)
   ' Lấy số Tables có trong Database
    n = DB.TableDefs.Count
  ' Duyệt tuần tự từng Table
    For i = 0 To n - 1
         ' Nếu tên Table thứ i bằng với tên Table muốn tìm
         If DB.TableDefs(i).Name = TableName Then
             ' Hàm trả về giá trị TRUE
              KIEMTRA = True
             ' Thoát khỏi hàm
               Exit Function
          End If
     ' Chuyển qua Table kế
       Next i
     ' Nếu ra khỏi vòng lặp mà vẫn chưa tìm thấy thì hàm trả về False
       KIEMTRA = False
  End Function
____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.co.cc/forum

Hàm Tách Tên, Họ trong Access

Mình xin giới thiệu 1 hàm tự tách tên, họ trong Access:

Public Function Split(Ten As String, Kieu As Byte)
Dim bytSpace As Byte
bytSpace = InStrRev(Ten, " ", -1)

If bytSpace = 0 Then
Split = Ten
Exit Function
End If

If Kieu = 0 Then
Split = Right(Ten, Len(Ten) - bytSpace)
Else
Split = Left(Ten, bytSpace - 1)
End If
End Function



13/11/2009

Xoá các table theo điều kiện trong Access

Hỏi: Tromg file MDB của em có nhiều table để lưu dữ liệu của các năm khác nhau. EM chỉ muốn lưu 3 năm gần nhất thôi. Ví dụ: năm nay là 2009, em chỉ cần lưu dữ liệu của 2007, 2008, 2009; năm tới 2010: chỉ lưu 2008, 2009, 2010.
Em muốn tự khi lưu dữ liệu ngày đầu tiên của năm mới, thì table từ 3 năm về trước sẽ tự động bị xoá đi. Cụ thể: ngày 01/01/2010, em lưu dữ liệu thì table lưu dữ liệu của 2007 bị xoá đi.
Đồng thời, em muốn xoá table với điều kiện nó tồn tại: Cụ thể: câu lệnh để thực hiện:
Nếu tableA có trong MDB thì xoá tableA
Các bác cho em xin đoạn code nhé

11/11/2009

Upsize Access lên MS SQL server

 Theo thực tế 1 database Access còn rất nhiều hạn chế về :
_ Phân quyền sử dụng.
_ Sử dụng tối đa 10 users .
_ Quản lý và lưu vết user đã ghi/đọc/xóa ...
Trong cuộc sống náo nhiệt, môi trường sử dụng phần mềm quản lý khá phong phú đa dạng với nhiều ngôn ngữ lập trình khác nhau. Đối với việc sử dụng database trong một mạng Lan cũng rất phổ biến.
Nay mình có 1 datbase access quản lý hồ sơ muốn share cho mọi người dùng chung mạng Lan, qua việc đọc 1 số bài hướng dẫn sơ lược và có đề cập đưa database Access lên SQL Server để quản lý cao hơn, chuyên nghiệp hơn.
Mong Noname và các bạn hướng dẫn cụ thể và có hình ảnh minh họa về việc đưa database Access lên SQL Sever, đây cũng là vấn đề khó giải quyết và nóng bỏng nhất đối với các bạn khác. Chân thành cảm ơn

Giáo Trình Access

Giáo trình Access DHSPHN
_____________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

Hiện thông báo không có dữ liệu khi in report

Cho mình hỏi: Mình tạo 1 form in từ ngày đến ngày,
nếu trong điều kiện đó mà reprt kô có dữ liệu thì hiện ra 1 câu thông báo tại form luôn và kô hiện ra report.


Đáp:
Bất cứ report nào cũng có record source đúng không, thường là 1 query/table.

Như vậy vấn đề ở đây là bạn kiểm tra query/table xem có record nào không, nếu không có=> gởi thông báo.
Nếu có thì cho in report. Đơn giản vậy thôi

Chương trình Quản Lý tiệm bán máy vi tính

http://duyeagle.googlepages.com/ChuongTrinh.rar

____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.co.cc/forum

Tính Toán thời gian giữa hai thời điểm với dateiff

Đôi khi bạn có nhu cầu tính số ngày, số tháng, số quý giữa hai thời kỳ nhằm phục vụ báo cáo.Cụ thể tính tiền trợ cấp hoặc bảo hiểm xã hội!
Mình xin giới thiệu hàm: DateIff( loại, từ ngày, đến ngày)
bạn dùng hàm datediff("d", date1, date2) để tính số ngày
bạn dùng hàm datediff("m", date1, date2) để tính số tháng
bạn dùng hàm datediff("q", date1, date2) để tính số quý ....

Tạo chương trình trắc nghiệm bằng Access

Tôi xin trình bày một ví dụ đơn giản nhưng rất cơ bản để từ đó bạn có thể tự "chíp" theo ý đồ của mình. Ví dụ: số câu hỏi cho mỗi lần trắc nghiệm là 30 (được chọn ngẫu nhiên từ ngân hàng câu hỏi), chọn 1 trong 4 đáp án.
Giả sử ứng dụng Access có tên là DataTN.MDB. Bạn tạo một table có tên NganHangCauHoi để chứa ngân hàng các câu hỏi, có cấu trúc như bảng 1. Bảng này chứa số lượng không hạn chế các câu hỏi, mỗi câu hỏi được đánh số tự động, và có 4 mục tin (TraLoi1, TraLoi2, TraLoi3, TraLoi4) chứa nội dung 4 câu trả lời mà thí sinh có thể chọn. Mục tin DapAnDung chứa số thứ tự (từ 1 đến 4) của câu trả lời đúng. Mục tin DaDuocChon dùng để đánh dấu câu hỏi nào đã được chọn trong quá trình lựa chọn ngẫu nhiên 30 câu hỏi dùng cho bộ đề. Bạn cần phải thiết kế một form để nhập liệu vào bảng này.

Làm sổ quỹ trong Access

Em muốn làm trình kế toán với số liệu thu chi và quỹ còn lại . Ví dụ như sau:
STT___Thu___Chi_______Quỹ còn lại______Diễn giải
1_____0_____100_______500____________mua vật tư
2_____200___0_________700____________kế hoạch a
3_____300___0_________1000___________kế hoạch b

Quỹ còn lại 3 = [quỹ còn lại 2] + [thu 2] - [chi 2]
Bác nào biết cách làm hướng dẫn chi tiết dùm em với, em làm query trong MS Access.

Không in số 0 trong report

Khi in 1 trường bằng số thì format #,### sẽ không in nếu dữ liệu bằng 0.
- format : #,###.## : 0 không in ra nhưng 300.00 thì in ra 300. (có 2 khoản trắng phía sau)
- format #,###.00 : 0 thì in ra 0.00; 300.15 in ra 300.15 (đúng)

Mình muốn format trường số với 2 số lẻ (ví dụ trường Ngoại tệ USD) khi dữ liệu bằng 0 sẽ không in ra nếu có dữ liệu thì sẽ in ra với 2 số lẻ:

Msgbox dùng Unicode Tiếng việt

Gần đây 1 số bạn ở các forum hay hỏi làm cách nào để hiện câu thông báo kiểu msgbox bằng tiếng Việt.
Có 1 số bạn hướng dẫn theo nhiều cách, tuy nhiên mình thấy vẫn chưa hợp lý:
- Cách 1: chỉnh Regional and Language Options thành Tiếng Việt.
Cách này chưa hợp lý ở kiểu gõ và sẽ bị lỗi ở hệ thống bàn phím dùng số.
- Cách 2: thay đổi font hệ thống trong thẻ Appearance. Chuyển thành font TCVN3 hay VNI. Sau khi đóng chương trình, hệ thống sẽ trả về lại như cũ.

10/11/2009

Tự động liên kết các table

 Tôi có một cơ sở dữ liệu Access và thực hiện split thành backend

File QLVB đặt trong thư mục Run (thư mục Run nằm trong thư mục QLVB) chứa form, repost, ...
File QLVB_en đặt trong thư mục Data (thư mục Data trong thư mục QLVB) chứa các table


Khi tôi di chuyển (hoặc đồng bộ) thư mục QLVB (từ USB vào máy và ngược lại) là các liên kết của các table không còn nữa.
Bạn nào rành về Access có thể viết đoạn mã giúp tôi tự động nối lại các liên kết đó không.

thao tác với registry

Đôi khi bạn có nhu cầu làm việc với registry trong Access, ví dụ lưu vị trí form, lưu đường dẫn mặc định để lấy dữ liệu. Hoặc lưu username mặc định, kiểm tra 1 computer có phải lần đầu tiên sử dụng chương trình không... Mọi việcsẽ dễ dàng hơn nhiều nếu bạn thao tác với registry....

Chặn xoay chuột để tới lui record

Chặn xoay chuột để tới lui record
Thiết kết trên Form mình đã tắc Record Selector để không cho tới lui các Record đã nhập trước đó, nhưng khi dùng nút giữa xoay chuột nó vẫn chạy tới lui.

Hỏi: Làm sao để chặn thao tác xoay chuột "Cuộn lên xuống bằng nút xoay trên Mouse".

Lệnh Tạm ngưng trong Access


Trong Access, khi bạn cần tạm ngưng chương trình trong một khoảng thời gian nào đó trước khi thực hiện lệnh mới. Ta dùng hàm Sleep. Để sử dụng được hàm này, ta khai báo :

Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Và sử dụng:

Sleep (5000)
để tạm ngưng 5 giây!
____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.co.cc/forum

Lấy về tên của máy tính đang dùng:

Lấy về tên của máy tính đang dùng:

Environ("ComputerName")

Ứng dụng bạn có thể phân quyền cho user cụ thể nào đó như chief accountant...hoặc vị trí cố định mà bắt buộc phải dùng PC đó mới có thể chạy được Module.
Đơn giản hơn là trong hành động Form Load, bạn chào hỏi bằng hàm này:

msgbox "Hello " & Environ("ComputerName")

Tạo đồng hồ trong Access


Đó hỏi: Có cách nào để tạo đồng hồ trong chương trình Access (dưới dạng text box chẳng hạn) đồng bộ với đồng hồ máy tính?


Đây trả lời: Bạn có thể sử dụng thuộc tính Timer Interval và thủ tục xử lý tình huống OnTimer. Cụ thể, trên form vẽ một text box có tên txtDongHo. Gán trị 1000 cho thuộc tính Timer Interval của form, rồi gõ đoạn mã 1 vào thủ tục xử lý tình huống OnTimer của form.
Đoạn mã 1
Private Sub Form_Timer()
txtDongHo = Format(Hour(Time()), "00") & ":" & _
Format(Minute(Time()), "00") & ":" & _
Format(Second(Time()), "00")
End Sub

CHƯƠNG CAN CHÍP
theo echip [right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]

____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.com/forum

Tạo report có chiều cao co dãn theo dữ liệu

Trong khi làm report. Có những dữ liệu vượt quá chiều ngang của field trình bày. Nhưng nếu ta set cho field đó có khả năng can grow thì nó sẽ nhảy dòng, làm lệch các khung ta đã canh chỉnh.Những người có kinh nghiệm giải quyết bằng cách chừa 1 khoảng trống đủ lớn để không bị "rớt dòng" đại loại như thế! Tuy nhiên, nếu không có dữ liệu nào thừa rớt dòng thì khoảng trống đó lãng phí trong report!

Vấn đề đặt ra là làm cách nào để report có thể tự do dãn chiều cao ở mỗi dòng khác nhau cho phù hợp với dữ liệu

Mở nút Close(x) khi đã khóa

Hỏi: Theo hướng dẫn trên, tôi đã khoa nút close , giờ muốn mở lại thì làm thế nào?

Đáp:
Bạn tạo 1 Module mới với nội dung sau:


Code:
Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000

Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) _
As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Sub UnHideAccessCloseButton()

    Dim lngStyle As Long

    lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    lngStyle = lngStyle Or WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)

End Sub
Trong form Admin hãy tạo 1 nút để gọi hàm UnHideAccessCloseButton nhấn nút và đóng lại rồi xem kết quả nhé!
____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.co.cc/forum

Khóa phím close trong Access

Hỏi: Tôi đã cung cấp cho người dùng nút đóng trên chương trình Access của tôi và kh6ong muốn họ dùng nút nhất close(x) sẵn của Windows thì phải làm thế nào!

Đáp:
Bạn có thể ẩn nút close bằng đoạn code sau:


Code:
Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)

Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000

Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) _
As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Sub HideAccessCloseButton()

    Dim lngStyle As Long

    lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    lngStyle = lngStyle And Not WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)

End Sub

Khoá phím ctrl-F4 và Alt-F4 , shift

1) Khoá phím ctrl-F4 và Alt-F4

Ý tưởng của hungtano
Bạn tạo 1 macro tên AutoKeys,

- ở cột Macro Name, bạn điền ^{F4}, ở cột Action bạn chọn Msgbox, ở phần dưới Action Argument bạn tạo 1 thông báo "Phím này đã bị khóa"

- ở cột Macro Name, bạn điền %{F4}, ở cột Action bạn chọn Msgbox, ở phần dưới Action Argument bạn tạo 1 thông báo "Phím này đã bị khóa"

2) Phím shisft có công dụng gì ? sao lại khoá phím shift ?
Khi viết xong 1 chương trình trên Access, khi đưa vào sử dụng bạn phải giấu cửa sổ database. Phím shift có công dụng mở cửa sổ database để xem các object của chuơng trình như table, macro, query, ...Để tránh không cho users mở cửa sổ database "quậy phá" các object của CT, người ta phải khóa phím shift. [right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]

Đánh Số Thứ Tự Cho report

Hỏi:
Báo cáo của tôi có rất nhiều dòng, tôi muốn đánh số thứ tự cho mỗi record thì phải làm sao?

Đáp:
Trong phần detail của report, tạo một text box.

Vô Properties của textbox đó,nhảy qua tab Data, đặt thuộc tính Control Source là =1, Thuộc tính runing Sum là Over All. Hehe , nó sẽ đánh số thứ tự toàn bộ các phần tử.
Nếu chỉ muốn đánh số thú tự trong 1 Group thì chon Over Group
Hình minh Họa:


Chúc may mắn!

Phục Hồi Table lỡ xóa

Trả lời: Ý tưởng đặt ra là ta sẽ tìm lại table bi xóa trong những file ~templete (được tạo ra khi access dang chạy). Bạn tạo một command button phuchoi gọi lệnh UndeleteTable () như sau nhé:

Private sub phuchoi_click ()

Call UnDeleteTable ()

End sub


Enable phím shift khi lỡ chạy module khóa mà quên viết module mở khóa

(bài này là ý tưởng của bạn hungtano)

Hỏi:

Tôi đã xây dựng xong CT nhân sự (C:\QLNS.mdb). Tôi tạo 1 custom menu bar, giấu đi Main menu của Access, tạo form startup, disable phím Shift để không ai có thể mở được cửa sổ database. Sau một thời gian CT bị lỗi nhưng hỡi ơi tôi lại quên viết code enable phím Shift nên không tài nào mở của sổ database, mở cửa sổ viết code để sửa lại CT. Tôi phải làm sao đây ?

Đáp:

Rất đơn giản, bạn tạo 1 file .mdb mới , viết code để can thiệp vào file QLNS.mdb, enable phím Shift.

Cách làm:

Trong file .mdb mới, bạn tạo 1 form, tạo 1 command button và :

Private Sub EnableSHIFTButton_Click()

On Error GoTo ErrHandler

Dim db As Database
Dim ThuocTinh As Property
Set db = OpenDatabase("C:\QLNS.mdb")
db.Properties("AllowBypassKey") = True
Set db = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Number
If Err.Number = 3270 Then ' Property not found.
Set ThuocTinh = db.CreateProperty("AllowBypassKey", dbBoolean, True)
db.Properties.Append ThuocTinh
Resume Next
Else
MsgBox Err.Description
End If
End Sub
Thảo luận thêm: http://thuthuataccess.com/forum

nén file Access bằng VBA



Bình thường,khi mà các câu lệnh Make, Append, delete thực hiện nhiều lần thì file access của bạn sẽ phình to không tưởng tượng được, có khi lên tới hàng GB, để nén access ta vào menu tool-->database Ulities-->Compact and repair Database
Nhưng đôi khi chúng ta cần thực hiện điều đó bằng VBA vì đã khóa Menu, thay bằng customise menu, hoặc với mục đích thân thiện với người dùng chỉ trên một nút nhấn.

hãy copy đoạn code sau của tác giả Juan M. Afan de Ribera để làm điều đó

Code:
'   ***** Code Start *****
Public Sub CompactDB()

   CommandBars("Menu Bar"). _
   Controls("Tools"). _
   Controls("Database utilities"). _
   Controls("Compact and repair database..."). _
   accDoDefaultAction

End Sub
'   ***** Code End  *****
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.com/forum

Hiện duy nhất một cửa sổ khi mở nhiều form

Trích:
Các bạn giúp mình với, làm sao khi mở một From VD From này la From Main, trong From Main này có các Nút lệnh để mở các From khác. Thì làm sao khi mở một From khác thì trên Takbar không xuất hiện From này mà vẩn còn From Main hiện diện trên Taskbar. Vì nếu tôi mở nhiều Fron trên một chương trình thì Taskbar sẻ đầy.
Bạn chỉ cần vào Tools/options

Bỏ dấu check ở mục Windows on Taskbar. khi đó trên Task bar chỉ còn duy nhất 1 màn hình Access thôi, bạn thư nhé.
----------------------
sanyovietnam in MaNguon

Trích:
Nguyên văn bởi hungtano
Bổ sung :
Vì Access luôn chọn Check box Windows on Taskbar = True (default) nên nếu đem file mdb của bạn sang máy khác thì sẽ gặp lại trường hợp nhiều cửa sổ trên taskbar.
Cách tổng quát hơn :
Khi mở form Startup bạn thêm dòng lệnh :

Private Sub Form_Open(Cancel As Integer)
Application.SetOption "ShowWindowsInTaskbar", False
End Sub

Xem thêm : http://msdn.microsoft.com/library/de...baloptions.asp
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]


Thảo luận thêm: http://thuthuataccess.co.cc/forum

Kiểm tra 1 form trong chương trình đã được mở hay chưa!


Trong access, đôi khi bạn cần kiểm tra một form có đang load hay chưa để lấy về thông số, tránh động tác thừa vì đôi khi load lên một form dạng bảng, có nhiều đối tượng là rất lâu.
Function dưới đây sẽ giúp bạn giải quyết vấn đề đó một cách dễ dàng

Code:
Function fIsLoaded(ByVal strFormName As String) As Boolean
'Giá trị trả về là 0 nếu chưa mở, -1 là đã mở rồi
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
        If Forms(strFormName).CurrentView <> 0 Then
            fIsLoaded = True
        End If
    End If
End Function
'****** Code End ********
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.com/forum

Xuống dòng trong Msgbox

Access 97 trở về trước khi xuống dòng dùng ký tự @. Access gần đây dùng vbCrLf để xuống dòng. Việc chủ động xuống dòng trong Msgbox giúp hiển thị thông báo rõ ràng hơn.

MsgBox "1. Hello!" & vbCrLf & "2. Xin chào các bạn!" & vbCrLf & "3. Seeuagain!", vbInformation, "Message"

Thảo luận thêm: http://thuthuataccess.com/forum

Export dữ liệu ra excel

Không phải mọi thứ Access đều có thể giúp được bạn, đôi khi phải vận dụng linh hoạt với Excel.
Câu lệnh Export một đối tượng Access ra Excel

DoCmd.OutputTo Kiểu đối tượng, "tên đối tượng", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0

Ví dụ bạn đẩy một query tên là DThutheothang ra excel:

DoCmd.OutputTo acQuery, "DThutheothang", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0

Thảo luận thêm ở:Diễn đàn Access

Convert Null thành zero

Khi bạn phải cộng trừ với 1 giá trị rỗng, lập tức sẽ bị báo lỗi dữ liệu. Nhất là trường hợp các bạn dùng left join sẽ bị cộng khi bên kia không tìm thấy khóa. Vì vậy một mẹo nhỏ là bạn tạo một hàm đển convert giá trị null thành số 0. Sau đó, mỗi khi cộng trừ nhân chia thì ta thêm trước field đó dòng NZ([field chứa giá trị])
Convert Null-Zero
Trích:
Function NZ(anyValue As Variant) As Variant
NZ = IIf(IsNull(anyValue), 0, anyValue)
End Function
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.com/forum

Ký Tự xuống dòng trong SQL

Hỏi
Cho tôi hỏi khi mình nhập bằng textare có ký bấm enter để xuống dòng vậy phim enter này lưu xuống SQl bằng ký tự gì vậy? bạn nào biết chỉ dùm nha, tôi đã dùng thử "\n" nhưng không đúng

Đáp

Trích:
Nguyên văn bởi huynhvantham
Nó là kết hợp 2 ký tụ: CHAR(13) và CHAR(10)

Ví dụ bạn muốn Insert:

Chạy trong Sql Query: In sert into tablename(firstname,lastname) values('Nguyen' + CHAR(13) + CHAR(10) + 'Van', 'A')

Nếu bạn dùng TEXTAREA thì khi insert vào database thì bạn không cần phài thêm ký tụ xuống dòng. Vì TEXTAREA nó đả hổ trợ bạn chỉ cần gán giá trị của TEXTAREA cho Field dưới database là ok.

[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.com/forum

Tạo Dòng Chữ chạy trên form

Hỏi
Tạo dòng chữ chạy trên Form của Access: Cũng như mong muốn ở trên, trên 1 Form bất ký mình muốn chạy một dòng chữ để cần thông tin về vấn đề nào đó ví dụ như là "Chương trình này được tạo bởi...."

Đáp:
Trích:
Nguyên văn bởi HungTano
Hùng Tano
+ Bạn tạo 1 label , tên : LblWelcome - 1 nút lịnh, tên CmdRun

Nhập các đoạn code sau :

Private Sub CmdRun_Click()
LblWelcome.Caption = "This program is designed by ..." & Space(3)
Me.TimerInterval = 200
End Sub

Private Sub Form_Timer()
Dim x, y As String
x = Left(LblWelcome.Caption, 1)
y = Right(LblWelcome.Caption, Len(LblWelcome.Caption) - 1)
LblWelcome.Caption = y + x

End Sub

[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.co.cc/forum

Sử dụng Unicode tiếng Việt trong MS Access

TG:Võ hùng- PC world


Trong Access 2K trở lên chạy trên Windows XP/2K, không cần phải thay thế font hệ thống bằng các font TCVN, VNI, Vietware..., bạn vẫn có thể sử dụng font Unicode tiếng Việt trong các thành phần từ khi lập trình cho đến khi sử dụng: ô nhập liệu, tiêu đề trên form, menu, toolbar... Quan trọng nhất, bạn có thể viết code sử dụng font Unicode để tạo các message box hiển thị tiếng Việt. Điểm mấu chốt là khi tạo các form, report, menubar, toolbar, bạn sử dụng font Unicode dựng sẵn, nhưng khi lập trình (viết code) bạn dùng font Unicode tổ hợp. Lưu ý: khi viết code nhớ chọn font có chữ Vietnamese ở đằng sau, ví dụ font Times New Roman (Vietnamese).

Cài đặt hệ điều hành 2K/XP

Vào Control panel->Regional and Language Options. Trong bảng này có 3 tab:

+ Tab Regional options (gọi là Tab 1)

+ Tab Languages (gọi là Tab 2)

+ Tab Advanced (gọi là Tab 3)

- Đầu tiên bạn vào Tab 2, đánh dấu chọn "Install files for complex script and right-to-left languages (including Thai)" (nếu chưa chọn). Có thể chương trình yêu cầu bạn đưa vào đĩa cài đặt WinXP(2K). Lưu ý: không nên dùng các đĩa cài đặt XP đã được chỉnh sửa như Wesmosiss WinXP,...

- Chọn OK và khởi động lại máy.

- Vào lại Tab 1, chọn Vietnamese.

- Vào Tab 3, chọn Vietnamese.

- Chọn OK và khởi động lại máy.

Cài đặt MS Office

Sau khi đã cài đặt MS Office, bạn vào Start -> Programs -> Microsoft Office Tools -> Microsoft Office Language Settings, chọn ngôn ngữ mặc định là Vietname

Phân quyền sửa Chương trình trong Access

Hỏi
Bạn nào có biết cách phân quyền sử dụng trong Access không chỉ cho mình với. Có nghĩa là với chương trình mình tạo ra thì chỉ có mình mới có thể sửa source code được, có thể sửa design... được thôi, người sử dụng chỉ được quyền sử dụng và không có quyền truy cập vào source code cũng như table... để sửa chương trình. Ở bên mình mọi người cũng có kiến thức về Access nên biết là cứ bấm F11 là vào được data của chương trình.

Đáp
Trích:
Nguyên văn bởi hungtano
Bạn phải làm 2 việc :

1) Vào Tools --> Startup : bỏ chọn tất cả các check box trên biểu mẫu này. (không cho users sử dụng các phím tắt)

Còn muốn triệt để hơn, không cho xem code thì .mdb --> .mde


2) Disable phím SHIFT

Nguyên lý : trong database có 1 thuộc tính (property) gọi là : AllowBypassKey. Thuộc tính này cho phép bạn enable/disable phím SHIFT.

+ Nếu AllowBypassKey = False --> disable phím SHIFT

+ Nếu AllowBypassKey = True --> enable phím SHIFT

Cách làm : bạn tạo 1 Form (tạm gọi : F_ShiftKey) có 2 nút lịnh : 1 để enable và 1 disable phím SHIFT. Đưa 2 private sub dưới đây vào..........

Private Sub DisableSHIFTButton_Click()
On Error GoTo ErrHandler

Dim db As Database
Dim ThuocTinh As Property

Set db = CurrentDb
db.Properties("AllowBypassKey") = False
Set db = Nothing

Egress:
On Error Resume Next
Set db = Nothing
Set ThuocTinh = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Number
If Err.Number = 3270 Then ' Property not found.
Set ThuocTinh = db.CreateProperty("AllowBypassKey", dbBoolean, False)
db.Properties.Append ThuocTinh
Resume Next
Else
MsgBox Err.Description
Resume Egress
End If
End Sub

=================================================

Private Sub EnableSHIFTButton_Click()

On Error GoTo ErrHandler

Dim db As Database
Dim ThuocTinh As Property

Set db = CurrentDb
db.Properties("AllowBypassKey") = True
Set db = Nothing

Egress:
On Error Resume Next
Set db = Nothing
Set ThuocTinh = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Number
If Err.Number = 3270 Then ' Property not found.
Set ThuocTinh = db.CreateProperty("AllowBypassKey", dbBoolean, True)
db.Properties.Append ThuocTinh
Resume Next
Else
MsgBox Err.Description
Resume Egress
End If
End Sub

++++++++++++++++++++++++++++++++++++++++++++++++++

OK chưa bạn ? .............................................. Chưa đâu !


Bây giờ đặt F_ShiftKey ở đâu trong chương trình để không ai được quyền mở ngoại trừ Admin ? Có nhiều cách : cách đơn giản nhất là đặt ….ở đâu cũng được với 1 điều kiện : để mở F_ShiftKey cần phải biết password.

Ở sự kiện Form_Open, bạn yêu cầu nhập đúng password : Lambada mới cho mở form này.


Private Sub Form_Open(Cancel As Integer)

Dim Message, Title, MyValue

Message = "Ban vui long cho biet mat khau :" ' Set prompt.

Title = "Kiem tra" ' Set title.

MyValue = InputBox(Message, Title)

If MyValue <> "Lambada" Then

DoCmd.Close

End If

End Sub
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]

Thảo luận thêm: http://thuthuataccess.co.cc/forum

Tính số ngày sử dụng chương trình

Mình có một chương trình Access tự viết nhỏ, mình muốn chương trình tính được số ngày sử dụng hoặc số lần đã mở chương trình nhưng không phụ thuộc vào ngày của hệ thống

Trích:
Nguyên văn bởi hungtano Trả lời
bạn tạo 1 table, tạo field có tên là userTime, kiểu number

Khi user mở starup form, ở sự kiện open của form, bạn viết 1 đoạn code mở table trên và edit thêm sự kiện như sau:

Private Sub Form_Open(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T2")
With rs
.MoveFirst
.Edit
!UserTime = !UserTime + 1
.Update
End With
rs.Close
End Sub
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.com/forum

09/11/2009

Truyền thông số từ Combobox

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 đó.
Trích:
Nguyên văn bởi ndtoan123 :Cách 1
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)
Trích:
Nguyên văn bởi pinkair Cách 2
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:
Private Sub cmbMaNV Click()
Me.txtTenNV.Value = Me.cmbMaNV.Column(1)
End Sub
Mình đã làm rồi, rất là OK bạn ah, bạn có thể sử dung
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Thảo luận thêm: http://thuthuataccess.co.cc/forum

Cách chuyển số sang tỷ lệ phần trăm

Bình thường trong excel khi chia hai số cho nhau ta được số thập phân ví dụ 2/3=0.66666. Nếu ta Format lại ra dạng phần trăm thì có thể ra 66.6666%. Vậy trong Access có thể format như vậy được không?
Trích:
Nguyên văn bởi Duytuannguyen Trả lời
bạn dùng hàm format(number, kiểu format) thử xem.
Ví dụ trong trường hợp của bạn, bạn gọi như sau:

Format(0.25,"Percent") ==>kết quả sẽ cho ra : 25.00%
Trích:
Nguyên văn bởi hungtano Trả lời
=(Q1/Q2)*100 & "%"
[right] Nguồn Từ : Khoa Học Phổ Thông.
Website : http://www.khoahocphothong.net [/right]
Writen Site: http://thuthuataccess.co.cc/forum

Danh Sách Thủ Thuật tren Blog thuthuataccess




Writen Site: http://thuthuataccess.com/forum