xây dựng môt số hàm thông dụng

Ðề: xây dựng môt số hàm thông dụng

Trong khi lập trình file .mdb có thể đặt password không cho xem code nhưng vẫn mở file và sửa chữa bình thường:
Nhấn Alt+F11, chọn Tool, chọn <tenfile>_Properties, chọn Protection, Lock..., nhập Password.
Bằng cách tạo Pass như trên bạn có thể cho người khác xem file mdb, chỉnh sửa thết kế, nhưng không xem đuợc code và họ cũng không import form và module của bạn được. Bạn cần bảo vệ file mdb trong quá trình thiết kế.
 
Ðề: xây dựng môt số hàm thông dụng

uh. Mình biết là có cách tắt vô hiệu hoá phím shift nhưng không nghĩ là đơn giản vậy.
Vậy ngoài cách chuyển sang MDE, và vô hiệu hoá phím shift thì còn cách nào để ngăn chặn người dùng xem code không?
Chào Bạn,
Chỉ có cách cho biên dịch ứng dụng sang định dạng MDE mới ngăn triệt để người khác xem code trong file ứng dụng.
Những cách khác như: đặt password, phân quyền (user-level security) đều chỉ là tương đối vì: hiện nay có rất nhiều công cụ dò password, thậm chí vô hiệu hoá password mà không phải mất công dò chi cho mệt. Các Bạn có thể search bằng Google sẽ tìm thấy vô vàn những công cụ dạng này.
 
Ðề: xây dựng môt số hàm thông dụng

mình vừa tạo 1 form hiển thị thông tin lấy dữ liệu có sẵn từ bảng nhưng không hiểu sao nó chậm quá. Mình nghĩ là cơ sở dữ liệu của mình tốt không bị dư thừa. Vậy có cách nào cho hiển thị nhanh hơn không?
 
Ðề: xây dựng môt số hàm thông dụng

Giải sử ten table của bạn là Hoso có trường thứ nhất là THOIGIAN và trường thứ 2 là THOIGIANBATDAU thì query của bạn sẽ như sau:
Docmd.RunSQL "SELECT THOIGIANBATDAU, THOIGIAN, DateAdd('m',THOIGIAN,THOIGIANBATDAU) as THOIGIANKETHUC, (DateAdd('m',THOIGIAN,THOIGIANBATDAU) - Date()) as SONGAYCONLAI FROM HoSo;"

Chúc thành công!
-----------------------------------------------------------------------------------------
Ngại quá lại phải nhờ tới mọi người roài!
Mình tạo queries có 2 trường: thời gian (tháng), thời gian bắt đầu lấy từ 1 bảng đã có sẵn
Muốn thêm các trường thời gian kết thúc và thời gian còn lại mà không biết làm
-> thời gian kết thúc được suy ra từ thời gian bắt đầu + thời gian.
-> thời gian còn lại (ngày) được suy ra từ date() - thời gian kết thúc
VD: thời gian: 3 tháng
Thời gian bắt đầu: 12/10/2008
-> Thời gian kết thúc: 12/01/2009
date() = 12/12/2008
-> Thời gian còn lại : 30 ngày
Thanks
Giả sử tên table la Hoso có các trường thoigian, ngaybatdau. Bạn chạy lệnh sau:

Docmd.RunSQL "Select Ngaybatdau, thoigian, dateadd('m',thoigian,ngaybatdau) as ngayketthuc, (dateadd('m',thoigian,ngaybatdau) - date()) as ngayconlai from Hoso;"


Chúc thành công!
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Vậy theo các bạn những nguyên nhân nào dẫn đến việc CSDl bị chậm
Theo mình biết thì chỉ có thể do dữ liệu quá nhiều và bị dư thừa
 
Ðề: xây dựng môt số hàm thông dụng

Có thể do máy bị virus...
Chậm? Nói thế ai biết đường nào mà rờ...
 
Ðề: xây dựng môt số hàm thông dụng

Chào cả nhà em mới gia nhập Cái Bang.
Ở đây có nhiều câu hỏi hay quá!
Bác nào mà chả có function (hai cái hàm).
Cơ sở dữ liệu chậm là do máy chứ! E rằng ... chíp có vấn đề!
 
Ðề: xây dựng môt số hàm thông dụng

Ai biết cho tôi hỏi: Phần đuôi query của tôi luôn có dòng này không biết là cái gì?

WITH OWNERACCESS OPTION;

Không biết là gì và lựa chọn ở đâu?
 
Ðề: xây dựng môt số hàm thông dụng

Ai biết cho tôi hỏi: Phần đuôi query của tôi luôn có dòng này không biết là cái gì?

WITH OWNERACCESS OPTION;

Không biết là gì và lựa chọn ở đâu?

Chào Bạn,
Dòng WITH OWNERACCESS OPTION; tự động xuất hiện ở cuối câu lệnh SQL của mỗi Query là do Bạn đã khai báo Option của Database như sau:
+ Trong cửa sổ Options (từ menu Tools chọn Options): tại Tab Tables/Queries mục Run Permissions đã đánh dấu chọn Owner's.
Ý nghĩ khai báo của mục Run Permissions là:
+ Nếu chọn Owner's: chỉ có người tạo ra Query mới chạy được nó
+ Ngược lại nếu chọn User's: ai cũng chạy được.
Bạn tham khảo thêm chi tiết về Options trong Help của Access
Bạn nên tải xuống tài liệu tham khảo chuyên sâu tại link sau, trong đó đề cập rất sâu vấn đề này:
http://www.mediafire.com/download.php?wmot0yezwh0
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

các bạn có thể chỉ cho mình code để tìm ra tên của danh khách hàng.
Ví dụ : mình có bảng khachhang bao gồm : makh, tenkh, diachi
trong đó :
makh : mk01
tenkh: ngân hàng A
diachi : xxxxxxxxx

nếu lọc hay tìm kiếm theo makh thì rất dễ nhưng mình muốn khi nhập vào textbox để tìm như "hàng" hay "A" thì sẽ thực hiện tìm trên cột "tenkh" . ai giúp mình với
 
Ðề: xây dựng môt số hàm thông dụng

Hi ban!
Doi voi truong hop cua ban lam thiet de, hong hiu sao ban lam ko duoc. ban tao cau lenh select nhu sau:

Select * from khachhang where tenkh like [nhap ten kh]

khi chay query no se hien thi parameter co ten nhap ten khach hang, ban chi can nhap tu can tim la dc.
chu y: de tim ngan hang a ban co the nhap cac cach nhu sau "*hang*" hoac "*A"
voi dau * se dai dien cho tat ca cac tu dung truoc hoac sau chu ta can tim.
-----------------------------------------------------------------------------------------
Hi ban!
de cat tat ca cac khoan trang du thua, ban thu dung ham nay xem sao.
Function trimall(target As String)
Dim pos As Integer
Dim s As String
s = Trim(target)
Do
s = Replace(s, " ", " ")
pos = InStr(s, " ")
Loop Until (pos = 0)

trimall = s
End Function


chuc thanh cong
-----------------------------------------------------------------------------------------
Cau hoi cua ban omoosi co 2 van de can giai quyet.
du lieu vao ta co: ngày bắt đầu và thời hạn (vd: NBD la #12/10/2009# va TH la 3 tháng
du lieu dau ra, ta can:
1) ngày kết thúc là ngày nào
2) tới ngày hôm nay => thoi gian con lai la ? ngày.

Khong bit minh dien giai nhu vay co dung y ban ko?
Neu dung thi cach giai quet nhu sau:
1) đối với viec tinh ngay ket thuc ban dung ham sau: DateAdd ("m",ThoiHan,NgayBatdau)
neu thời hạn được tính theo tháng
hoặc DateAdd ("d",ThoiHan,NgayBatdau)
nếu thời hạn được tính theo ngày.
2) với việc tính thời hạn còn lại so với thời điểm hiện tại...
bạn dùng hàm sau: DateDiff("d",date,NgayKetThuc)
là xong.
hay thu xem co dung y ban ko nhe'.
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Chia sẻ với các bác 1 hàm dùng liên kết với 1 table trong data Access cùng thư mục với chương trình. Thường dùng khi chia chương trình và dữ liệu thành 2 file.

' D la ten file chua du lieu cung thu muc
'T la table can link
Sub LinkTable(T As String, D as String)
' xoa table link cu~
DoCmd.DeleteObject acTable, T
'link lai tablelink moi
DoCmd.TransferDatabase acLink, "Microsoft Access", CurrentProject.Path & "\" & D, acTable, T, T
End Sub



Chú ý, trong trường hợp file dữ liệu nằm khác thư mục với file chương trình, ta có thể thay CurrentProject.Path bằng 1 biến cho phép ngừơi dùng khai báo!

_______________________________________________________________________________________________
Blog Thủ Thuật Access
Thủ thuật Access|Access Cơ bản|Access nâng cao|Thế giới văn phòng|Giao lưu giải trí|Vui cười|Phim Hài|Góc thơ
 
Sửa lần cuối:
Lấy đường dẫn 1 file

Đôi khi bạn có nhu cầu lấy đường dẫn 1 file (ví dụ đường dẫn file data, hay đường dẫn file hình, tài liệu...), nhưng vì phải gọi các API rườm rà nên ngại.. Mình xin giới thiệu đoạn code sau phục vụ việc đó:

Mã:
' Lay ten duong dan file
Function getFile(Tit As String, formatName As String, formatType As String)
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
With dlgOpen
    .Title = Tit
    .Filters.Clear
    .Filters.Add formatName, formatType
    .AllowMultiSelect = False
    result = .Show
    If (result <> 0) Then
getFile = Trim(dlgOpen.SelectedItems.Item(1))
End If
End With

End Function


Giờ bạn có thể gọi và gán giá trị cho 1 textbox : có thể thay *.dat thành format bạn muốn:
Mã:
txtPath.Value = getFile("Select Data File", "Dat file", "*.Dat")


Chúc vui!
--------------------------------------------------------------------
@ : Topic hay thế này, mình nghĩ mọi người nên tham gia nhiều nhiều đừng để lạc mất phí tâm huyết ! :)
---------------------------------------------------
 
Sửa lần cuối:
Lấy về Số serial Một số phần cứng

Đô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:

Mã:
Sub GetCPUID()
     'ta.o ðo^'i týo+.ng di.ch vu. WMI
     Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
     'ti`m các CPU ðang cha.y cu?a máy
     Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
     'la(.p hie^?n thi. ID cu?a tu+`ng CPU
     For Each objItem In colItems
     MsgBox "Processor Id: " & objItem.ProcessorId
     Next
     End Sub
Lưu ý rằng trên các máy PC bình thường, chỉ có 1 CPU nên vòng lặp hiển thị thông tin sẽ chỉ chạy 1 lần và hiển thị ID của CPU duy nhất của máy.


nguồn PC word

2. Lấy Serial ổ cứng:

Mã:
Sub readserienumber()
    Dim fso As Object, Drv As Object
            'Create a FileSystemObject object
              Set fso = CreateObject("Scripting.FileSystemObject")
              'Assign the current drive letter if not specified
              Set Drv = fso.GetDrive()
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else    '"Drive Not Ready!"
                      DriveSerial = -1
                  End If
              End With
              'Clean up
              Set Drv = Nothing
              Set fso = Nothing
              Msgbox "Serial là: " & DriveSerial
     End Sub

3. Lấy Serial Main Board
Mã:
Sub readseriemainboard()
Dim objs As Object
Dim obj As Object
Dim WMI As Object
Dim sAns As String 
Set WMI = GetObject("WinMgmts:")
Set objs = WMI.InstancesOf("Win32_BaseBoard")
For Each obj In objs
sAns = sAns & obj.SerialNumber
If sAns < objs.Count Then sAns = sAns & ","
Next
Msgbox "Serial main: " & sAns
End Sub


Nguồn: sưu tầm thêm từ internet

-----------------
Nhờ Mod lập chỉ mục thành mục lục ở trang đầu tiên danh mục các thủ thuật, hàm trong Topic này để tiện trong việc tham khảo cho member!
 
Sửa lần cuối:
Ðề: Lấy về Số serial Một số phần cứng

Xin được chia sẻ với mọi người hàm lấy tham chiếu cho query:
Khi tham chiếu not null, lấy các record theo điều kiện tham chiếu; khi tham chiếu null lấy tất cả các record.
Function Laythamchieu(thamso as Variant) as Variant
Laythamso = iif(IsNull(thamso),"",thamso)
End Function
Khi tạo query, đặt Laythamchieu(thamso) vào điều kiện where
 
Ðề: Lấy về Số serial Một số phần cứng

Xin được chia sẻ với mọi người hàm lấy tham chiếu cho query:
Khi tham chiếu not null, lấy các record theo điều kiện tham chiếu; khi tham chiếu null lấy tất cả các record.
Function Laythamchieu(thamso as Variant) as Variant
Laythamso = iif(IsNull(thamso),"",thamso)
End Function
Khi tạo query, đặt Laythamchieu(thamso) vào điều kiện where

Không cần thiết vì Access đã có hàm NZ:

Nz(var, value): Nếu var = Null thì lấy theo value
 
Ẩn/ Hiện Table trong Access

Đôi khibạn có nhu cầu ẩn/ hiện các table trong Access (ví dụ bảo mật) mà không muốn phải click vào properties từng table, check Hide.
Sau đây mình xin giới thiệu đoạn code Show/Hide table trong Access:

Mã:
Sub hideTable(H As Boolean)
On Error Resume Next
Dim DB As Database
Dim N As Byte
Dim i As Byte
Set DB = DBEngine.Workspaces(0).Databases(0)
N = DB.TableDefs.Count
For i = 0 To N - 1
Application.SetHiddenAttribute acTable, DB.TableDefs(i).Name, H
Next
End Sub

Tương tự với query, form, report, bạn thay các dòng :
N = DB.TableDefs.Count
bằng:
N = DB.QueryDefs.Count
N= Forms.Count
N = Reports.Count


Và thay dòng
Application.SetHiddenAttribute acTable, DB.TableDefs(i).Name, H

bằng

Application.SetHiddenAttribute acQuery, DB.QueryDefs(i).Name, H
Application.SetHiddenAttribute acForm, Forms(i).Name, H
Application.SetHiddenAttribute acReport, Reports(i).Name, H




Giờ bạn muốn có thể tạo 2 nút nhấn và gọi:
Hidetable True
Để ẩn

HideTable false
để hiện trở lại

Download Demo
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Sử Dụng thư Viện Hàm Excel:
Những ai thao tác quen với Excel sẽ thấy ở đây có một thư viện hàm khổng lồ mà Access không có được. Và câu hỏi là làm sao sử dụng được thư viện hàm này.

để sử dụng được thư viện hàm của Excel, bạn cần vào khung soạn VBA - > tool- > References
Chọn Microsoft Excel 11.0 Object Library. (10.0 với Office XP, 12.0 với Office 2007)
File


Sau đó tìm và chọn Chọn Microsoft Excel 11.0 Object Library. (10.0 với Office XP, 12.0 với Office 2007)

File


Giờ bạn có thể tạo 1 hàm tương tự và Gọi hàm từ Excel. Tôi ví dụ với hàm Days360 của Excel, các bạn làm tương tự các hàm khác nhé!

Function Days360(StarDate As Date, EndDate As Date) As Integer
Days360 = Excel.WorksheetFunction.Days360(StarDate, EndDate)
End Function

Chúc Thành công!
 
Sửa lần cuối:
Phân quyền truy cập menu trong Access

Đôi khi bạn muốn ẩn/hiện 1 menu với 1 người dùng/ nhóm người dùng nào đó. Ta có thể thao tác với hàm
CommandBars("tên thanh menu").Controls("Tên menu").Visible = True ( false)

Cụ thể, bạn có thể lập 1 thủ tục như sau:
Mã:
Sub ViewMenu(User as String, mnBar as string, mnItem as String, IsView as Boolean) 
If currUser= User Then   
    CommandBars(mnBar).Controls(mnItem).Visible = isView
End If
End Sub
Thủ tục trên cho ta hiện (ẩn) 1 menu với

User : user muốn cho phép xem
CurrUser: User hiện tại đăng nhập vào hệ thống. ( bạn có thể gán 1 biến toàn cục, mỗi khi có người đăng nhập thành công, thì gán : CurrUser bằng UserName)
mnBar: tên thanh menu do bạn tự tạo hoặc thanh menu bất kỳ của Access
mnItem : tên menu (caption) do bạn tạo và gắn trên thanh Menu đó

Ví dụ:
Bạn tạo 1 thanh menu "QuanLyCongVan" với 2 menu là : "Cập Nhật", và "Thoát".Bây giờ bạn muốn chỉ hiện menu "Cập Nhật" cho User, và Admin. ( nhóm guest không được thấy) ta gọi sau khi người dùng đăng nhập thành công:
Mã:
    ViewMenu "User", "QuanLyCongVan", "Cập Nhật", True
    ViewMenu "Admin", "QuanLyCongVan", "Cập Nhật", True
    ViewMenu "Guest", "QuanLyCongVan", "Cập Nhật", False
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Tôi có hỏi hàm days360 nhưng đã làm được rồi, không cần phải nhúng excel vào làm gì. Bạn nào có nhu cầu sử dụng cứ lấy nhé. Nhớ thanks
Public Function Days360(ByVal StartDate As Date, ByVal EndDate As Date, Optional ByVal Method As Boolean = False) As Long

Dim lMonths As Long
Dim lStartDay As Long
Dim lEndDay As Long
Dim FebruaryAdjustment As Long

lStartDay = Day(StartDate)
lEndDay = Day(EndDate)

If Not Method Then
'U.S. (NASD) method.
'If the starting date is the 31st of a month, it becomes equal to the 30th of the same month.
'If the ending date is the 31st of a month and the starting date is earlier than the 30th of a month,
'the ending date becomes equal to the 1st of the next month;
'otherwise the ending date becomes equal to the 30th of the same month.

If lStartDay > 30 Then
StartDate = DateAdd("d", -1, StartDate)
End If

If (lEndDay = 31) And (lStartDay < 30) Then
EndDate = DateAdd("d", 1, EndDate)
ElseIf (lEndDay = 31) And (lStartDay >= 30) Then
EndDate = DateAdd("d", -1, EndDate)
End If

'adjust for February
If IsLastDayInFebruary(StartDate) Then
'Last day of February (either 28 or 29)
FebruaryAdjustment = 30 - Day(StartDate)
End If

Else
'European method.
'Starting dates and ending dates that occur on the 31st of a month become equal to the 30th of the same month.

If lStartDay > 30 Then
StartDate = DateAdd("d", -1, StartDate)
End If

If lEndDay > 30 Then
EndDate = DateAdd("d", -1, EndDate)
End If

End If

lStartDay = Day(StartDate)
lEndDay = Day(EndDate)

lMonths = DateDiff("M", StartDate, EndDate)

Days360 = (lMonths * 30) + (lEndDay - lStartDay) - FebruaryAdjustment


End Function

'====Helper function====
Private Function IsLastDayInFebruary(ByVal dt As Date) As Boolean
Dim tmpDate As Date
tmpDate = DateAdd("d", 1, dt)
If Day(tmpDate) = 1 And Month(tmpDate) = 3 Then
IsLastDayInFebruary = True
Else
IsLastDayInFebruary = False
End If
End Function
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top