我在VB6中编写的代码是检查过期日期是否仍然比现在更早,因此产品没有过期。否则,产品已过期。但是,产品的详细信息始终在系统中重复使用。
所以,我的代码是这样的:
Global database As Database
Global recordset As Recordset
Dim intResponse As Integer
Private Sub Form_Load()
Set database = OpenDatabase("C:\Location\Database.mdb")
Set recordset = database.OpenRecordset("Table")
recordset.Index("PrimaryKey")
End Sub
Private Sub txtProductID_LostFocus()
If txtProductID <> "" Then
recordset.Seek "=", txtProductID
If recordset.NoMatch Then
MsgBox("Record not found!", vbInformation + vbOKOnly, "Record not found")
txtProductID = ""
txtProductID.SetFocus
Else
If recordset("Expiration_Date") > DateValue(Now) Then
Enable_Details ' Sub Function
Else
intResponse = MsgBox("Product is expired!", vbExclamation + vbOKOnly, "Product is Expired")
If intResponse = vbOK Then
frmNewExpiryDate.Show
End If
End If
End If
End If
End Sub
当我调试代码时,我与数据库交叉引用并注意到即使某些产品已过期,代码也会直接转到Enable_Details sub。我需要帮助!
答案 0 :(得分:3)
试试这个
Dim sDate as date
sDate = format(recordset("Expiration_Date"),"mm/dd/yyyy")
if datediff("d",Format(Now, "mm/dd/yyyy"),sDate) < 0 then
'already expired
end if
答案 1 :(得分:0)
数据库字段“ Expiration_Date ”的类型是什么?它是 String 还是 Date ?如果类型是 String ,那么您需要通过拆分字符串并使用 DateSerial 将其转换为 Date ,如果它是 Date ,代码应该有效。 所以我认为实际的类型是 String ,因此它不起作用。
此外,只需使用记录集(“Expiration_Date”)&gt; 日期而不是记录集(“Expiration_Date”)&gt; DateValue (现在),虽然两者完全相同,但日期更加优化。
答案 2 :(得分:0)
Private Function IsExpiry() As Boolean
IsExpiry = False
'set your expiry date here
ExpiryYear = 2017
ExpiryMonth = 10
ExpiryDay = 10
If Year(Date) > ExpiryYear Then
IsExpiry = True
GoTo last
End If
If Month(Date) > ExpiryMonth Then
IsExpiry = True
GoTo last
End If
If Month(Date) = ExpiryMonth Then
If Day(Date) > ExpiryDay Then
IsExpiry = True
GoTo last
End If
End If
last:
End Function
Private Sub cmdCheckExpiry_Click()
If IsExpiry then
MsgBox("Expired")
Else
MsgBox("Not Expired")
Endif
End Sub