Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 表字段所需的属性读取不正确_Excel_Vba_Ms Access_Recordset - Fatal编程技术网

Excel 表字段所需的属性读取不正确

Excel 表字段所需的属性读取不正确,excel,vba,ms-access,recordset,Excel,Vba,Ms Access,Recordset,从访问表中读取字段的属性“Required”时遇到问题。 在Access表中,属性“Required”设置为TRUE 我正在通过如下所示的记录集读取属性 Set MyRecordset=AppDatabaseDB.OpenRecordset(“从我的表格中选择*”,dbOpenDynaset) 对于MyIndex=0到MyRecordset.Fields.Count-1 Debug.Print“Name:”&MyRecordset(MyIndex).Name Debug.Print“Requir

从访问表中读取字段的属性“Required”时遇到问题。 在Access表中,属性“Required”设置为TRUE

我正在通过如下所示的记录集读取属性

Set MyRecordset=AppDatabaseDB.OpenRecordset(“从我的表格中选择*”,dbOpenDynaset)
对于MyIndex=0到MyRecordset.Fields.Count-1
Debug.Print“Name:”&MyRecordset(MyIndex).Name
Debug.Print“Required:”&MyRecordset(MyIndex)。Required
下一个
当字段名长度最多为41个字符时,上述命令工作正常。 例如:

Field name=scr11\u modelo\u do\u produto\u descripcao\u do\u prod
但是,当字段名超过41个字符时,上述代码(
MyRecordset(MyIndex).Required
)始终返回
FALSE

例如:

Field name=scr11\u modelo\u do\u produto\u descripcao\u do\u产品
阅读Access表的规范时,我发现字段名中的字符数最多可达64个字符


我请求帮助了解问题所在。可能会发生什么情况导致属性无法返回正确的值?为什么名称的长度会影响结果?

如果要分析表的结构,请不要使用记录集!改用TableDef。记录集只加载与其相关的内容,而tabledef加载整个结构

Set td = AppDatabaseDB.TableDefs("my_table")
For MyIndex = 0 To td.Fields.Count - 1
    Debug.Print "Name: " & MyRecordset(MyIndex).Name
    Debug.Print "Required: " & MyRecordset(MyIndex).Required
Next

另请注意:当通过TableDef访问时,
.Required
为读写。通过记录集访问时,
.Required
是只读的。

嗨,Erik a,谢谢你的帮助。我甚至用TableDefs而不是Recordset做了一个测试。然而,对于我在程序中定义的逻辑,使用记录集会简单得多。我想了解到底发生了什么。这是正常现象,还是我在使用记录集进行此操作时犯了错误?@Marcos使用记录集分析字段属性是一种风险,因为根据各种条件,它们可能会初始化,也可能不会初始化。或者,您可以使用字段的
Properties
集合显式获取属性,但这会添加一些代码。另一种选择是使用ADOX,但如果您使用的是DAO,则不推荐使用。Erik,感谢您的评论,使用TableDef而不是记录集似乎是最好的选择。非常感谢你的帮助