-
[Help] Viết function kiểm tra cột dữ liệu null khi query bị báo lỗi #Error
subasatran > 15-12-20, 11:20 PM
Xin chào Anh/Chị / Em
Mình có viết một function nhỏ để kiểm tra giá trị của một cột trong một bảng.
Tuy nhiên, nếu dòng dữ liệu là NULL thì query báo lỗi #Error.
Nhờ mọi người có thể giúp đỡ cho mình biết function mình viết có bị lỗi gì hay không ?
Cám ơn mọi người rất nhiều.
Function mình viết như bên dưới:
Mã:Public Function Get_Actual(ByVal Ccase As Double) As Double
Dim Actual As Double
Actual = Ccase
If IsNull(Actual) Or Nz(Actual, "") = "" Or Actual <= 0 Then
Get_Actual = 0
Else
Get_Actual = Actual
End If
End Function
Mình test trên một query như bên dưới.
Infor numbercase Check_Null(gọi function Get_Actual(numbercase))
A 1000 1000
B 1500 1500
C NULL #Error
D 0 0
E -50 0 -
RE: [Help] Viết function kiểm tra cột dữ liệu null khi query bị báo lỗi #Error
tranthanhan1962 > 16-12-20, 01:18 AM
Dư thừa: Đã có function xác đinh dữ liệu null thì đâu cần viết function lam gì?
a/ Hàm IsNull () xác định bằng kiểu Boolean, True => Null, False => Is Not Null.
b/ Hàm VarType() xác định giá trị Null khi =1
Vì vậy, muốn xác định giá trị của cột Check_Null = 0 khi numbercase = null và bằng numbercase khi <> null chỉ cần đưa công thức vào.
1/ Check_Null: IIf(IsNull([numbercase])=-1;0;[numbercase])
hoặc:
2/Check_Null: VarType([numbercase])=0;0;[numbercase])
Bạn đã thiết đặt sai kiểu dữ liệu giá trị function nên nó báo lỗi thôi -
RE: [Help] Viết function kiểm tra cột dữ liệu null khi query bị báo lỗi #Error
ongke0711 > 16-12-20, 07:51 AM
Bổ sung thêm:
- Hàm của bạn khai báo dư 1 biến Actual, sao không dùng biến Ccase luôn?
- Access có cái hàm tương tự bạn đang làm nhưng linh hoạt hơn đó là hàm: Nz(thamso, kiểu trả về).
Một cái hàm Nz() - NullZero bạn đang dùng đã giải quyết được rồi, viết lại chi cho lòng vòng vậy??
Vd: nếu numcase là NULL
Nz(numcase) =0
Nz(numcase, “”) = “”
Nếu bạn muốn viết hàm bao gồm khử Null và khử số âm thì sửa lại như sau:
Mã PHP:Public Function Get_Actual(ByVal Ccase As Variant) As Double
If Len(Nz(Ccase, "")) = 0 Or Ccase <0 Then
Get_Actual = 0
Else
Get_Actual = Ccase
End If
End Function
- Dùng kết hợp hàm Len()+ Nz() vì: có trường hợp người dùng sử dụng phím Backspace xoá dữ liệu trong cột đó thì giá trị của cột đó không còn là Null mà là chuỗi có độ dài =0 ("zero length string"), khi đó hàm Nz() không còn tác dụng.
- Tham chiếu giá trị Field từ Query Access thì phải khai báo là Variant, nó mới hiểu. -
RE: [Help] Viết function kiểm tra cột dữ liệu null khi query bị báo lỗi #Error
subasatran > 16-12-20, 05:26 PM
Xin cảm ơn @tranthanhan1962 và @ongke0711 rất nhiều.
Cách làm của ongke0711 hay quá.
tranthanhan1962 [/font Đã viết:]
1/ Check_Null: IIf(IsNull([numbercase])=-1;0;[numbercase])
hoặc:
2/Check_Null: VarType([numbercase])=0;0;[numbercase])
=> Vì mình kiểm tra field là số có giá trị >= 0 để đưa vào một biểu thức tính toán khác nên ko muốn sử dụng trực tiếp trên query.
[font=Tahoma, Verdana, Arial, sans-serif]ongke0711[/font Đã viết:[font=Tahoma, Verdana, Arial, sans-serif]]
- Hàm của bạn khai báo dư 1 biến Actual, sao không dùng biến Ccase luôn?
=> Do mình còn có một biểu thức trong function này nên gán luôn trong ví dụ.
Cho mình hỏi thêm là kiểu Variant nó có ảnh hưởng gì khi biểu thức trả về giá trị theo kiểu double không vậy ?
Sau khi kiểm tra số này mình sẽ lấy số này để đưa vào một biểu thức tính toán khác với kiểu dữ liệu là double
-
RE: [Help] Viết function kiểm tra cột dữ liệu null khi query bị báo lỗi #Error
ongke0711 > 16-12-20, 05:54 PM
(16-12-20, 05:26 PM)subasatran Đã viết: => Do mình còn có một biểu thức trong function này nên gán luôn trong ví dụ.
Cho mình hỏi thêm là kiểu Variant nó có ảnh hưởng gì khi biểu thức trả về giá trị theo kiểu double không vậy ?
Sau khi kiểm tra số này mình sẽ lấy số này để đưa vào một biểu thức tính toán khác với kiểu dữ liệu là double
Đã thiết lập hàm trả về là Double thì bạn cứ yên tâm là đúng kiểu dữ liệu trả về, còn khai báo Variant là cho tham số truyền vào.
(Nếu bạn dùng Variant cho Double cũng được vậy vì đã là Variant tức là nó có thể là bất cứ kiểu dữ liệu gì)