这是我的函数,用于获取用于通过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。
这是为什么?
答案 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,但对于其他内容,它将返回列的长度。