SQL Server Varchar的大小

时间:2018-12-06 15:26:48

标签: vba ms-access

这是我的函数,用于获取用于通过ODBC访问的SQL-Server表的varchar字段的大小:

Function fn_field_size(par_tab, par_field As Variant) As Variant

    Dim db_tab As DAO.Database
    Dim tab_tab As DAO.TableDef
    Dim tab_field As DAO.field

    fn_field_size = 0

    Set db_tab = CurrentDb()
    Set tab_tab = db_tab.TableDefs(par_tab)
    Set tab_field = tab_tab.Fields(par_field)
    fn_field_size = tab_field.Size

    Set tab_tab = Nothing
    Set db_tab = Nothing

End Function

在我将函数用于varchar(1000)字段之前,它似乎工作正常。在这种情况下,tab_field.Size为0。对于较小的字段(如Varchar(100)),该函数可以正常工作并返回100。

这是为什么?

1 个答案:

答案 0 :(得分:1)

正如其他人指出的那样,ODBC将varchar,nvchar,超过255个字符的char视为“ memo”类型列,因此您无法获得最大字符数。

假设您在Access中定义了通过查询。 (我总是制作一个,然后一遍又一遍地重复使用它,以用于所有代码),然后可以使用以下代码获取任何字段的长度:

Public Function GetFLength(strTable As String, strField As String) As Long

   Dim strSQL     As String

   strSQL = "select col_LENGTH('" & strTable & "','" & strField & "')"

   With CurrentDb.QueryDefs("qryPassR")
      .SQL = strSQL
      GetFLength = .OpenRecordset()(0)
   End With

End Function

对于varchar(max),以上内容将返回-1,但对于其他内容,它将返回列的长度。