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

isoomo

New Member
Hội viên mới
bạn nào chỉ jùm mình xây dựng mấy hàm hay dùng trong access với: ví dụ như hàm chuẩn hoá xâu kí tự ấy. Nếu làm bằng C thì dễ rồi, chứ làm bằng VB thì chửa biết
 
Ðề: xây dựng môt số hàm thông dụng

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

Giải thích :
Public Function Split(Ten As String, Kieu As Byte) : Ten ở đây là chuỗi bạn muốn cắt, Kieu ở đây là kiểu cắt của bạn : 0 là tách tên, khác 0 là tách họ
bytSpace dùng để lấy khoảng trắng cuối cùng của chuỗi.

Ví dụ : Table tblDanhSach có field Name. Dữ liệu :
Thiên Mỹ Sao Băng
Huỳnh Thu Nhạn
Bạn tạo Query mới với Table này và gõ vào công thức : Split(Name,0) 'Kết quả là
Băng
Nhạn

Còn nếu bạn gõ Split(Name,1) 'Có thể thay số 1 bằng bất cứ số nào từ 1 đến 255. Kết quả
Thiên Mỹ Sao
Huỳnh Thu

Để đơn giản hơn bạn có thể tách ra làm 2 hàm khác nhau
Public Function TachTen(Ten As String) As String
Dim bytSpace As Byte
bytSpace = InStrRev(Ten, " ", -1)
TachTen = Right(Ten, Len(Ten) - bytSpace )
End Function

Public Function TachHo(Ten As String) As String
Dim bytSpace As Byte
bytSpace = InStrRev(Ten, " ", -1)
If bytSpace =0 then
TachHo = Ten
Exit Function
End If
TachHo = Left(Ten, bytSpace )
End Function

và dùng hàm TachTen khi cần tách tên, TachHo khi cần tách họ
Ví dụ : TachTen("Lê Minh Tiến") ---> Tiến
TachHo("Lê Minh Tiến") ---> Lê Minh
 
Ðề: xây dựng môt số hàm thông dụng

Bạn thêm hàm Trim(Ten) trước khi thực hiện các dòng lệnh.
Chương trình sẽ lỗi khi nhập thừa khoảng trắng. VD: ?Split("Le " , 0).
 
Ðề: xây dựng môt số hàm thông dụng

uhm, mình biết hàm Ltrim là cắt bỏ tất cả kí tự trắng bên trái, hàm Rtrim là cắt bỏ tất cả kí tự trắng bên phải, hàm Trim là cắt bỏ tất cả kí tự trắng ở bên trái và bên phải.
Vậy có hàm nào để cắt bỏ kí tự trắng ở giữa không?
Ví dụ như nhập tên:Huỳnh Thu Nhạn. thì nó sẽ cắt thành Huỳnh Thu Nhạn
 
Ðề: xây dựng môt số hàm thông dụng

Bỏ LTrim và RTrim đi dùng một Trim thôi.
Hàm này chỉ để 1 khoảng trắng duy nhất nếu có nhiều khoảng trắng:

Public Function Xnull(Daychu)
'Design by Access2k - Newbee30@yahoo.com
Daychu = Trim(Daychu)
Dim Tim, Thay, Daytim, i
For i = 1 To Len(Daychu)
Tim = Mid(Daychu, i, 1)
Select Case Tim
Case Is = " "
If Mid(Daychu, i + 1, 1) = " " Then
Thay = ""
Else
Thay = " "
End If
Case Else
Thay = Mid(Daychu, i, 1)
End Select
Daytim = Daytim & Thay
Next i
Xnull = Daytim
End Function


____________
PS: Trời! chờ anh nào trả lời thì bạn em đã chat với người khác rồi.
Em thử dùng hàm này xem:

If Emquenanhấylâurồi then
Msgbox "Gọi điện thoại cho anh ấy!", vbInformation
Else
Msgbox "Mớiquenvớvẩntrênmạngthôimà!", vbCritical
Exit Home
End If
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Topic này hay đây, là nơi tập hợp các hàm dùng sẵn, khi nào anh em cần thì có thể vào đây tham chiếu nhanh. :thumbup: SND chưa có hàm nào hay cả, sẽ ngâm cứu cùng các you!
 
Ðề: xây dựng môt số hàm thông dụng

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

Giải thích :
Public Function Split(Ten As String, Kieu As Byte) : Ten ở đây là chuỗi bạn muốn cắt, Kieu ở đây là kiểu cắt của bạn : 0 là tách tên, khác 0 là tách họ
bytSpace dùng để lấy khoảng trắng cuối cùng của chuỗi.

Ví dụ : Table tblDanhSach có field Name. Dữ liệu :
Thiên Mỹ Sao Băng
Huỳnh Thu Nhạn
Bạn tạo Query mới với Table này và gõ vào công thức : Split(Name,0) 'Kết quả là
Băng
Nhạn

Còn nếu bạn gõ Split(Name,1) 'Có thể thay số 1 bằng bất cứ số nào từ 1 đến 255. Kết quả
Thiên Mỹ Sao
Huỳnh Thu

Để đơn giản hơn bạn có thể tách ra làm 2 hàm khác nhau
Public Function TachTen(Ten As String) As String
Dim bytSpace As Byte
bytSpace = InStrRev(Ten, " ", -1)
TachTen = Right(Ten, Len(Ten) - bytSpace )
End Function

Public Function TachHo(Ten As String) As String
Dim bytSpace As Byte
bytSpace = InStrRev(Ten, " ", -1)
If bytSpace =0 then
TachHo = Ten
Exit Function
End If
TachHo = Left(Ten, bytSpace )
End Function

và dùng hàm TachTen khi cần tách tên, TachHo khi cần tách họ
Ví dụ : TachTen("Lê Minh Tiến") ---> Tiến
TachHo("Lê Minh Tiến") ---> Lê Minh

Xin góp với các bạn một "chiêu" mèo quào như sau:
Trong VB có một lệnh gọi là lệnh Split (y chang tên hàm của bạn).
Hàm cho này cho tách một chuỗi ra thành nhiều chuỗi con, mỗi chuỗi con sẽ được lưu vào trong một phần tử mảng.
Vậy để lấy tên của một chuỗi họ tên, ta cũng có thể dùng cách này:

Sub TachHoTen(ByVal chuoi As String, ByRef ho As String, ByRef ten As String)
Dim ar() As String
ar = Split(chuoi, " ")
Dim i As Integer, mHo As String
For i = 0 To UBound(ar)-1
mHo = Trim(mHo & " " & ar(i))
Next
ho = mHo
ten = ar(UBound(ar))
End Sub


Trong đó:
Từ khóa ByRef chỉ định tham số truyền vào sau kh được xử lý sẽ được thay đổi luôn trong thủ tục hoặc hàm gọi TachHoTen
VD: Đây là đoạn chương trình gọi:
Dim ho As String, ten As String ' lúc này họ và tên là các chuỗi rỗng
Dim hoten As String
hoten = "Nguyen Van Sau Rieng"
TachHoTen hoten, ho, ten
...
Sau khi chạy TachHoten thì ho = "Nguyen Van Sau", còn ten = "Rieng"

UBound là hàm lấy chỉ số cao nhất của mảng. UBound = số phần tử mảng - 1

Tất nhiên trên đây chỉ là các lệnh cơ bản, tùy các bạn thêm mắm muối vào.
 
Ðề: xây dựng môt số hàm thông dụng

Các bạn ơi cho mình hỏi cách tắt hẳn thông báo : the existing table "tên bảng" will be deleted before you run the query
 
Ðề: xây dựng môt số hàm thông dụng

Các bạn ơi cho mình hỏi cách tắt hẳn thông báo : the existing table "tên bảng" will be deleted before you run the query

Cái này là do bạn chạy query Make-Table trong Access.
Với các table loại Actin query bao gồm: Make-Table, Update, Append, Delete đều sẽ hiển thị thông báo hỏi trước khi thực thi.

Để tắt các thông báo này bạn có thể chèn các câu lệnh sau:

Cách 1: Trường hợp bạn cho chạy query bằng phương thức OpenQuery

DoCmd.SetWarnings False
DoCmd.OpenQuery "tên query"
DoCmd.SetWarnings True

Cách 2: Thực thi query bằng phương thức Excecute. Cách này nó sẽ không hỏi gì cả, nhưng sẽ báo lỗi nếu không thực hiện được.

Dim qr As QueryDef, st As String
Set qr = CurrentDB.QueryDefs("tên query")
st = qr.SQL
Set qr = Nothing
CurrentDB.Execute st
 
Ðề: xây dựng môt số hàm thông dụ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
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụ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
You dùng hàm Datediff("date",NgayA,ngayB) --> Số ngày :cheers1:
 
Ðề: xây dựng môt số hàm thông dụng

Bạn dùng hàm DATEADD("m",x,Date) để thực hiện
x là số ngày cần cộng
Date là ngày
ví dụ: DATEADD("m",6,#1/1/2008#)
 
Ðề: xây dựng môt số hàm thông dụng

Hàm dateadd thì mình biết rồi nhưng kết quả ra không đúng có lẽ do mình định dạng ngày sai.
Nhưng hàm datediff("d",thoigiancuoi,thoigiandau) thì không được không ra số ngày cần tính, mà không biết nó tính kiểu gì nữa
 
Ðề: xây dựng môt số hàm thông dụng

Hàm dateadd thì mình biết rồi nhưng kết quả ra không đúng có lẽ do mình định dạng ngày sai.
Nhưng hàm datediff("d",thoigiancuoi,thoigiandau) thì không được không ra số ngày cần tính, mà không biết nó tính kiểu gì nữa
Hàm datediff ("d",ngaydau,ngaycuoi)--> số ngày giữa 2 ngày đầu và cuối. Chú ý định dạng ngaydau và ngaycuoi là kiểu date. Nếu chưa định dạng thì thêm hàm định dạng ngày vào trước ngaydau và ngaycuoi cho chắc chắn.
 
Ðề: xây dựng môt số hàm thông dụng

Có bạn nào biết chỉ giúp mình.
Mình muốn tạo 1 form có 1 textbox ảnh. Khi chọn nút browse (nút browse có tác dụng giống nút browse khi chọn start/run trên win) thì textbox đó sẽ xuất hiện đường dẫn đến ảnh muốn chọn, và ảnh sẽ hiện sang bên cạnh
http://www.mediafire.com/file/z4mya0tn2zn/db1.mdb
Tiện thể bạn nào chỉ giúp mình cách vô hiệu hoá phím shift. Mình vào google tìm thấy có hàm nhưng không biết cách làm.
 
Sửa lần cuối:
Ðề: xây dựng môt số hàm thông dụng

Mình thấy hàm vô hiệu hoá phím Shift này trên mạng nhưng không hiểu cách làm như thế nào? Mong chỉ dẫn
Trong file dữ liệu cua Access có một thuộc tính (Property) đặc biệt là AllowbypassKey. Khi đặt thuộc tính này là False, việc nhấn phím shift khi khởi động sẽ không còn tác dụng nữa
Thuộc tính này không thể hịên trên cửa sổ ******* Properties và chỉ có thể thay đổi bằng code mà thôi

-----------------------------------------------------------------------------

Call ChangeProperty "AllowBypassKey", dbBoolean, False


Function ChangeProperty(strPropName As String, _

varPropType As Variant, _

varPropValue As Variant) As Integer

' Purpose : Change Database Properties

' Created : 23 March 00

Dim dbs As Database, prp As Property

Const conPropNotFoundError = 3270

Set dbs = CurrentDb

On Error GoTo Change_Err

dbs.Properties(strPropName) = varPropValue

ChangeProperty = True

Change_Bye:

Exit Function

Change_Err:

If Err = conPropNotFoundError Then

Set prp = dbs.CreateProperty(strPropName, _

varPropType, varPropValue)

dbs.Properties.Append prp

Resume Next

Else

ChangeProperty = False

Resume Change_Bye

End If

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

cuối cùng cũng làm được rồi
 
Ðề: xây dựng môt số hàm thông dụng

Việc vô hiệu phím Shift thì người ta lại cho phép xem cửa sổ database bằng cách cho phép phím Shift, thì bạn viết code vô hiệu phím Shift làm gì?

Nhấn Alt+F11 và tạo hàm mới
Chọn Tool/ Pre.../Chọn Microsoft DAO 3.6

Public Function ChayShift(TenFile)
'Tenfile co the la: "C:-/X.mdb"
Dim dbs As DAO.Database
Set dbs = DBEngine.OpenDatabase(TenFile)
dbs.Properties("AllowBypassKey").Value = True
Set dbs = Nothing
End Function

Nhấn Ctrl+G thử hàm
Nhập
?ChayShift("C:-/X.mdb")
 
Ðề: xây dựng môt số hàm thông dụng

Mình thấy hàm vô hiệu hoá phím Shift này trên mạng nhưng không hiểu cách làm như thế nào? Mong chỉ dẫn
Trong file dữ liệu cua Access có một thuộc tính (Property) đặc biệt là AllowbypassKey. Khi đặt thuộc tính này là False, việc nhấn phím shift khi khởi động sẽ không còn tác dụng nữa
Thuộc tính này không thể hịên trên cửa sổ ******* Properties và chỉ có thể thay đổi bằng code mà thôi

-----------------------------------------------------------------------------

Call ChangeProperty "AllowBypassKey", dbBoolean, False


Function ChangeProperty(strPropName As String, _

varPropType As Variant, _

varPropValue As Variant) As Integer

' Purpose : Change Database Properties

' Created : 23 March 00

Dim dbs As Database, prp As Property

Const conPropNotFoundError = 3270

Set dbs = CurrentDb

On Error GoTo Change_Err

dbs.Properties(strPropName) = varPropValue

ChangeProperty = True

Change_Bye:

Exit Function

Change_Err:

If Err = conPropNotFoundError Then

Set prp = dbs.CreateProperty(strPropName, _

varPropType, varPropValue)

dbs.Properties.Append prp

Resume Next

Else

ChangeProperty = False

Resume Change_Bye

End If

End Function

Chào các Bạn,
Các Bạn có thể tải xuống file mdb làm mẫu trong link sau:
http://www.mediafire.com/download.php?vwmqd20fgzx
Cái này của Microsoft chỉ bày, tôi chỉ "xào nấu" thêm chút thôi.
 
Ðề: 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?
 

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