Đổi số thành chữ trong Access

  • Thread starter seachanges
  • Ngày gửi
S

seachanges

Sơ cấp
3/12/06
3
0
0
46
tphcm
#1
Mình có một đoạn mã nguồn đổi số thành chữ trong access nhưng khi biến đổi thường không chính xác ở hàng số lẻ. Bạn nào có đoạn mã nguồn sử dụng ổn định chia sẽ cho mình với nhé. Thanks
 
D

dongnamnb

Sơ cấp
16/11/06
42
0
6
40
Thanh Hóa
#2
doc so trong access

Bạn chép cả 3 hàm này vào rồi gọi DocSo(n) là được
'C¸c hµm dïng ®äc sè
'==================================================
Function DocSo(X As String) As String
Dim DonVi, Am As Boolean
DonVi = Array("", "ngh×n ", "triÖu ", "tû ")
Dim So As String, Chuoi As String, Temp As String, X1 As String, c As Byte, l As Byte, k As Byte, ChuoiDem As String
Dim id As Byte
X = Format(val(X), "#"): Am = False
If Len(X) > 18 Then
DocSo = "Sè qu¸ lín"
Exit Function
End If
If Left(X, 1) = "-" Then
Am = True
X = Right(X, Len(X) - 1)
End If
If X = 0 Then
DocSo = "Kh«ng"
Exit Function
End If
'Xu ly doc nhung so >100 ty
l = Len(X)
c = Fix(l / 9)
If l Mod 9 = 0 Then
k = 9
Else
k = l Mod 9
End If
X1 = Left(X, k)
X = Right(X, l - k)
Do Until X1 = ""
id = 0
Do While (X1 <> "")
If Len(X1) <> 0 Then
So = Lay3so(X1)
X1 = Left(X1, Len(X1) - Len(So))
Temp = Tinh3so(So)
So = Temp
If So <> "" Then
Temp = Temp + DonVi(id)
Chuoi = Temp + Chuoi
End If
id = id + 1
End If
Loop
l = Len(X)
c = Fix(l)
If (l <> 0) And (l Mod 9) = 0 Then
k = 9
Else
k = l Mod 9
End If
X1 = Left(X, k)
X = Right(X, l - k)
ChuoiDem = ChuoiDem & Chuoi
Chuoi = ""
If X = "" And X1 <> "" Then ChuoiDem = ChuoiDem & "tû "
Loop
ChuoiDem = IIf(Am, "¢m " & Trim$(ChuoiDem), UCase(Left(ChuoiDem, 1)) & Right(ChuoiDem, Len(ChuoiDem) - 1))
DocSo = ChuoiDem
End Function
Function Lay3so(X As String) As String
Dim So As String
If Len(X) >= 3 Then
So = Right(X, 3)
Else
So = Right(X, Len(X))
End If
Lay3so = So
End Function
Function Tinh3so(X As String) As String
Dim Chuoi As String, Temp As String
Dim Flag0 As Boolean, Flag1 As Boolean
Temp = X
Dim KySo
KySo = Array("kh«ng", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chÝn")
If Len(X) = 3 Then
If X <> "000" Then 'If Left(x, 1) <> 0 Then
Chuoi = KySo(Left(X, 1)) & " tr¨m "
End If
X = Right(X, 2)
End If
If Len(X) = 2 Then
If Left(X, 1) = 0 Then
If Right(X, 1) <> 0 Then
Chuoi = Chuoi & "linh "
End If
Flag0 = True
Else
If Left(X, 1) = 1 Then
Chuoi = Chuoi & "m­êi "
Else
Chuoi = Chuoi & KySo(Left(X, 1)) & " m­¬i "
Flag1 = True
End If
End If
X = Right(X, 1)
End If
If Right(X, 1) <> "0" Then
If Left(X, 1) = "5" And Not Flag0 Then
If Len(Temp) = 1 Then
Chuoi = Chuoi & "n¨m "
Else
Chuoi = Chuoi & "l¨m "
End If
Else
If Left(X, 1) = "1" And Not (Not Flag1 Or Flag0) And Chuoi <> "" Then
Chuoi = Chuoi & "mèt "
Else
Chuoi = Chuoi & KySo(Left(X, 1)) & " "
End If
End If
End If
Tinh3so = Chuoi
End Function
 
Z

ZRComic

Sơ cấp
26/2/07
11
0
1
Quảng Nam
#3
Tiện có câu hỏi này . Mình muốn đoạn hàm này có thể đọc ra tiếng Việt Unicode thì làm sao . Lâu nay theo mình biết thì chỉ hiển thị được tiếng việt khi dùng font VNI
 
D

dongnamnb

Sơ cấp
16/11/06
42
0
6
40
Thanh Hóa
#4
Để đọc ra tiếng việt Unicode thì cách đơn giản nhất là bạn bật chế độ gõ Unicode của chương trình gõ tiếng Việt, sau đó tìm tất cả các chữ Việt có dấu được viết trong hàm rồi gõ lại bằng Unicode.
Lưu ý: Nếu bạn chuyển sang Unicode thì khi đọc số ở report hay form bạn cũng phải chọn font Unicode thì mới có thể đọc được.
Chúc thành công!
 
S

seachanges

Sơ cấp
3/12/06
3
0
0
46
tphcm
#5
Football Khi chuyển sang chế độ Unicode trong phần mềm xử lý tiếng Việt mình gõ kiểu Vni trong Modules của access vẫn không hiển thị tiếng việt được bạn ơi. Không biết còn thêm thao tác nào không?
 
S

smallgent

Sơ cấp
23/3/07
55
1
0
HCMC
#6
Football Khi chuyển sang chế độ Unicode trong phần mềm xử lý tiếng Việt mình gõ kiểu Vni trong Modules của access vẫn không hiển thị tiếng việt được bạn ơi. Không biết còn thêm thao tác nào không?
Miễn là đang để chế độ gõ tiếng Việt còn nó hiện hay kô hiện trong cái hàm thì kệ nó. Quan trọng là sau đó bạn nhớ chỉnh lại font chữ của đoạn "số tiền bằng chữ" là font unicode là ok. Không ra thì cho mình biết nhé.
 
T

thanhtruc09022003

Sơ cấp
29/8/10
1
0
0
Tay Ninh
#7
minh muon hoi cach add chuobng trinh soi so thanh chu trong access vao access

xin chi giup minh cach add chuong trinh doi so thanh chu trong access vao access
minh cam on nhieu
 
P

phuonglam1405

Sơ cấp
28/5/09
2
0
1
tphcm
#8
Ðề: doc so trong access

Xin hỏi,

Mình muốn thêm chữ đồng vào cuối thì phải làm như thế nào ạ?

Cảm ơn dongnamnb nhiều nhé
 
M

Momambatchuoc

Sơ cấp
22/5/10
9
0
1
Phuong Quan Trieu, TPTN
#9
Ðề: doc so trong access

Bạn chép cả 3 hàm này vào rồi gọi DocSo(n) là được
'C¸c hµm dïng ®äc sè
'==================================================
Function DocSo(X As String) As String
Dim DonVi, Am As Boolean
DonVi = Array("", "ngh×n ", "triÖu ", "tû ")
Dim So As String, Chuoi As String, Temp As String, X1 As String, c As Byte, l As Byte, k As Byte, ChuoiDem As String
Dim id As Byte
X = Format(val(X), "#"): Am = False
If Len(X) > 18 Then
DocSo = "Sè qu¸ lín"
Exit Function
End If
If Left(X, 1) = "-" Then
Am = True
X = Right(X, Len(X) - 1)
End If
If X = 0 Then
DocSo = "Kh«ng"
Exit Function
End If
'Xu ly doc nhung so >100 ty
l = Len(X)
c = Fix(l / 9)
If l Mod 9 = 0 Then
k = 9
Else
k = l Mod 9
End If
X1 = Left(X, k)
X = Right(X, l - k)
Do Until X1 = ""
id = 0
Do While (X1 <> "")
If Len(X1) <> 0 Then
So = Lay3so(X1)
X1 = Left(X1, Len(X1) - Len(So))
Temp = Tinh3so(So)
So = Temp
If So <> "" Then
Temp = Temp + DonVi(id)
Chuoi = Temp + Chuoi
End If
id = id + 1
End If
Loop
l = Len(X)
c = Fix(l)
If (l <> 0) And (l Mod 9) = 0 Then
k = 9
Else
k = l Mod 9
End If
X1 = Left(X, k)
X = Right(X, l - k)
ChuoiDem = ChuoiDem & Chuoi
Chuoi = ""
If X = "" And X1 <> "" Then ChuoiDem = ChuoiDem & "tû "
Loop
ChuoiDem = IIf(Am, "¢m " & Trim$(ChuoiDem), UCase(Left(ChuoiDem, 1)) & Right(ChuoiDem, Len(ChuoiDem) - 1))
DocSo = ChuoiDem
End Function
Function Lay3so(X As String) As String
Dim So As String
If Len(X) >= 3 Then
So = Right(X, 3)
Else
So = Right(X, Len(X))
End If
Lay3so = So
End Function
Function Tinh3so(X As String) As String
Dim Chuoi As String, Temp As String
Dim Flag0 As Boolean, Flag1 As Boolean
Temp = X
Dim KySo
KySo = Array("kh«ng", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chÝn")
If Len(X) = 3 Then
If X <> "000" Then 'If Left(x, 1) <> 0 Then
Chuoi = KySo(Left(X, 1)) & " tr¨m "
End If
X = Right(X, 2)
End If
If Len(X) = 2 Then
If Left(X, 1) = 0 Then
If Right(X, 1) <> 0 Then
Chuoi = Chuoi & "linh "
End If
Flag0 = True
Else
If Left(X, 1) = 1 Then
Chuoi = Chuoi & "m­êi "
Else
Chuoi = Chuoi & KySo(Left(X, 1)) & " m­¬i "
Flag1 = True
End If
End If
X = Right(X, 1)
End If
If Right(X, 1) <> "0" Then
If Left(X, 1) = "5" And Not Flag0 Then
If Len(Temp) = 1 Then
Chuoi = Chuoi & "n¨m "
Else
Chuoi = Chuoi & "l¨m "
End If
Else
If Left(X, 1) = "1" And Not (Not Flag1 Or Flag0) And Chuoi <> "" Then
Chuoi = Chuoi & "mèt "
Else
Chuoi = Chuoi & KySo(Left(X, 1)) & " "
End If
End If
End If
Tinh3so = Chuoi
End Function
Cảm ơn bạn đã hướng dẫn. Nhưng mình thấy rằng hàm này không đọc được các số sau dấu phẩy. Bạn có thể cho mình đoạn code đọc được cả số sau dấu phẩy không? Nếu có thể thì gửi cho mình theo địa chỉ: HongHJC@gmail.com nhé. Cảm ơn bạn rất nhiều!
 

Thành viên trực tuyến

  • nguyennguyen05
  • Phương Hạ 111
  • daongocnam0603
  • qthi2209
  • nmppyd
  • Anh Vu HD
  • HOA DON DIEN TU VI NA
  • Tùng TM
  • TrangTrang11
  • Lê Hà NB
  • Nghecao2102
  • thuongdan
  • lapbitas
  • hellomedia
  • pink94




Xem nhiều