Private Function GetShortDate(ByVal strDate As String) As Date
    If Trim(strDate) <> "-  -" Then
        GetShortDate = DateValue(Trim(strDate))
    Else
        GetShortDate = Null  '用户未输入
    End If
End Function该函数是小弟用来把MaskEdBox控件的内容转换为数据库能识别的日期格式的,MaskEdBox的Mask属性被设置为:####-##-##。程序执行到GetShortDate = DateValue(Trim(strDate))这一行时即报错说“type mismach”。
请问各位大虾,怎样才能避免这种情况,或者说怎样把MaskEdBox控件的内容转换为数据库能识别的日期格式?
还有,这句GetShortDate = Null有问题吗?

解决方案 »

  1.   

    把函数改成CDate或者使用Format函数GetShortDate=Null似乎不妥,应该返回一个原始日期
      

  2.   

    多谢楼上。
    CDate我用过的,弹出的错误也一样。请问Format怎么用?
    “返回一个原始日期”这句话请大侠指点详细些,我的本意是用户不输入时用的。
    请继续指点
      

  3.   

    Format(recordset对象名.Fields(3), "yyyy-mm-dd")后面的是你所要显示的日期样式
      

  4.   

    事实上小弟的问题是“怎样把MaskEdBox控件的内容转换为数据库能识别的日期格式”?其中MaskEdBox的Mask属性被设置为:####-##-##。
    请大家多多指点。
      

  5.   

    Format(MaskEdBox.日期,"数据库能识别的日期格式")
      

  6.   

    Private Function GetShortDate(ByVal strDate As String) As Date
        If isdate(strDate) Then
            GetShortDate = format(strdate,"yyyy-mm-dd")
        Else
            GetShortDate = "1900-01-01"
        End If
    End Function
      

  7.   

    Private Function getshortdate(ByVal MaskEdBox As Object) As Boolean
        If IsDate(MaskEdBox.Text) Then
            MaskEdBox.Text = Format(MaskEdBox.Text, "yyyy-mm-dd")
            getshortdate = True
        Else
            MaskEdBox.SetFocus
            SendKeys "{home}+{end}"
            getshortdate = False
        End If
    End FunctionPrivate Sub Command1_Click()
    If Not getshortdate(MaskEdBox1) Then
        MsgBox "时间格式错误!"
    End If
    End Sub
      

  8.   

    format(date,"yyyy-mm-dd")这函数这么用就可以
      

  9.   

    小弟把代码修改成下面这样:
    Private Function GetShortDate(ByVal strDate As String) As Date
        If Trim(strDate) <> "-  -" Then '
            GetShortDate = CDate(Format(Trim(strDate), "yyyy-mm-dd"))
        Else
            GetShortDate = "1900-01-01"
        End If
    End Function结果还是报错,请各位救命了。这究竟是怎么回事?
      

  10.   

    GetShortDate = CDate(Format(Trim(strDate), "yyyy-mm-dd"))
    改成
    GetShortDate = CDate(Format(Trim(strDate), "yyyy-MM-dd"))FORMAT自定义时间格式中大写的M表示月份,小写的m表示分钟
    你可以先试一下GetShortDate = CDate(Format(Now(), "yyyy-MM-dd"))行不行
      

  11.   

    日,Trim(strDate) <> "-  -" 根本不能判断strDate是不是日期型的,如果strDate不是日期型的或是不存在的日期,那Cdate(……)肯定会报错啦!要先用isdate函数做一次类型判断,然后再用。正确的答案就在我在上面的上面的回复里啦!
      

  12.   

    楼上, 你说的那种情况数据库会自己做出判断的,我的问题实际上是怎样把“怎样把MaskEdBox控件的内容转换为数据库能识别的日期格式”?我调试时在MaskEdBox控件里输入的数值全是“2000-10-10”
      

  13.   

    MaskEdBox控件能反回两种值,一种是不加“-”的如:20021010,一种是加“-”的如:2000-10-10,你反回的是不是第一种。
      

  14.   

    将系统的日期格式改为yyyy-MM-dd,你的程序就不会报错。
    如果不改系统的日期格式,就要手工分割MaskEdBox的年、月、日三部分。或者将MaskEdBox的Mask属性被设置为:####/##/##。
      

  15.   

    干脆用DTPicker 好过啦! 再在DTPicker 前面加个复选框,如果是,日期=DTPicker.value ,否则不updata数据库该字段,这样自动为空白!
      

  16.   

    垃圾。
    1、前面的“程序执行到GetShortDate = DateValue(Trim(strDate))这一行时即报错说“type mismach”。”是类型转换错误。字符串类型转换日期型是有条件的,并不是什么字符串都能转换的,用Isdate函数可以判断字符串是否能转换成日期型,如果返回“真”那这个字符串就可以转换成日期型,否则就不能转换。如果试图将一个不能转换成日期型的字符串进行类型转换就会出现“type mismach”的错误。2、什么叫“数据库能识别的日期格式”,用Cdate函数将字符串转换成日期型后,还没有见到过哪种数据库不能识别。3、Format函数只是将日期转换成某种特定格式的字符串,以便于显示和计算
      

  17.   

    上面第2点的一点补充:
    2、什么叫“数据库能识别的日期格式”,用Cdate函数将字符串转换成日期型后,还没有见到过哪种数据库不能识别。(前提是数据库对应字段的类型必须是日期型的,如Date、DateTime、SmallDateTime等,不同的数据库会有所差别)