Tengo código siguiente

LastLeaveDt = DispName(con, "Select max(dtLeave) from EmpLeave where Empid='" & eid.Text & "' and year(dtleave)='" & cmbYear.Text & "'")

Public Function DispName(cn As ADODB.Connection, mQRY As String) As String
    Dim xrs1 As New ADODB.Recordset
    Try
        xrs1.Open(mQRY, cn, ADODB.CursorTypeEnum.adOpenForwardOnly)
        If xrs1.EOF = False Then
            DispName = IIf(IsDBNull(xrs1(0).Value), "", xrs1(0).Value)
        End If
        xrs1.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
        Return False
    End Try
End Function

En este código en tiempo de ejecución me está dando el error "Conversión de cadena" "A 'Fecha' no es válida"

-4
Alyasar Abdulsattar Khatri 3 ene. 2017 a las 11:58
3
Intenta depurar, amigo.
 – 
Leo Chapiro
3 ene. 2017 a las 11:59
2
¿No entiendes el mensaje (en cuyo caso lo buscas en Google) o no entiendes cómo depurarlo? En algún lugar estás intentando convertir una cadena (que está vacía) en una fecha. No podemos ver sus datos o los valores de sus variables, y no podemos ver ninguna variable que sea del tipo DateTime o Date, y no ha dado un número de línea, por lo que no podemos decir dónde definitivo el problema es. Sin embargo, la suposición de Tim es sensata. El valor de dtLeave en sí mismo también podría ser un problema, si se mantiene como una cadena en la base de datos (y no una fecha)
 – 
ADyson
3 ene. 2017 a las 12:04
¿Qué fecha debería representar "", en su visión muy personal?
 – 
Phantômaxx
3 ene. 2017 a las 14:16
Como nota al margen: el operador If debe usarse en lugar de esa antigua función IIf. Y es más acorde con NET usar la instrucción Return en lugar de asignar el estilo de resultado VB6
 – 
Ňɏssa Pøngjǣrdenlarp
3 ene. 2017 a las 17:24

1 respuesta

La mejor respuesta

Intente cambiar su código como:

 If xrs1.EOF = False Then
        If IsDate (IsDBNull(xrs1(0).Value)) then
             DispName = xrs1(0).Value
         else
             DispName =""
        End If
   End If
0
Beldi Anouar 3 ene. 2017 a las 12:05