如果在MS Access中检查是/否字段,则使用VBA检测

时间:2014-05-28 13:02:08

标签: vb.net visual-studio-2010

我需要根据参数中的员工编号检测“Timed_In”字段是-1还是0。到目前为止,我只得到了这段代码。

也许我应该创建一个布尔函数并返回,如果它在该特定行中检测到“True”但我不知道该怎么做。

我非常感谢能够在VB.net编程中再迈出一步!

Public Shared Function CheckTimeIn(ByVal empid As String)

    Dim dtoffenseinfo As New DataTable

    If Not DBConnection.State = ConnectionState.Open Then
        'open connection
        DBConnection.Open()
    Else

    End If


    Dim adapter As New OleDbDataAdapter("SELECT Timed_In from EmployeeRegistration  where EMployeeID='" & empid & "'", DBConnection)

    adapter.Fill(dtoffenseinfo)
    DBConnection.Close()

    Return dtoffenseinfo

End Function

1 个答案:

答案 0 :(得分:2)

我有这个功能,我依赖于讨厌的“布尔”值,不同的数据源没有正确存储:

    ''' <summary>
''' Converts any string to a boolean value. Any non-boolean or unexpected value will
''' convert to False.
''' 
''' True values (case insensitive):
''' -1
''' 1
''' yes
''' t
''' true
''' y
''' </summary>
Public Function ToBoolean(value As String) As Boolean
    Select Case value.ToUpper().Trim()
        Case "-1", "1", "YES", "T", "TRUE", "Y"
            Return True
        Case Else
            Return False
    End Select
End Function

编辑: 作为旁注,您需要仔细检查您的查询是否未返回DBNull,因为这将导致.NET中的字符串出现转换错误。在调用ToBoolean:

之前,需要调用这样的例程
    Public Function DBValueToString(value As Object, Optional defaultValue As String = "") As String
    If value Is Nothing Then
        Return defaultValue
    ElseIf IsDBNull(value) Then
        Return defaultValue
    Else
        Return Convert.ToString(value)
    End If
End Function

编辑2: 此外,当您看起来只想要单个记录的值时,您的例程将返回整个数据表。您可以使用OleDbCommand并在其上调用ExecuteScalar,而不是使用适配器并填充表。这将返回一个值,但您的查询必须永远不会返回多个列或行(在这方面,您的查询似乎没有问题。)

另一种选择是使用现有代码调用ToBoolean(DBValueToString(dtoffenseinfo.Rows(0)(“Timed_In”)))。当然,在进行此调用之前,您需要检查是否已返回行。