使用ADO的OpenSchema或ADOX无法读取所有Access数据库里所有查询名称列表的问题
- 2017-09-07 16:31:00
- zstmtony 原创
- 4977
一个Access交流网的版主在使用ADO的OpenSchema或ADOX 读取Access数据库里所有查询的清单时
发现结果总是少了一个查询,Access查询列表中有5个,但用VBA 或VB代码读出来只有4个,少了一个
ADO读取Access数据库所有查询名的代码如下
Private Sub OpenDBSchema(FileName As String) Dim conn As New ADODB.Connection Dim mProvider As String Dim fso As New FileSystemObject If Not fso.FileExists(FileName) Then Set grid1.DataSource = Nothing Select Case LCase(fso.GetExtensionName(FileName)) Case "mdb" mProvider = "Microsoft.Jet.OLEDB.4.0" Case "accdb" mProvider = "Microsoft.ACE.OLEDB.12.0" End Select conn.ConnectionString = "Provider=" & mProvider & ";Data Source=" & FileName & ";Persist Security Info=False;" conn.Open Set grid1.DataSource = conn.OpenSchema(adSchemaTables) grid1.AllowUserResizing = flexResizeBoth End Sub
出现 的错误如下(ADO VBA代码取得的结果与Access数据库查询实际对比)
经过不断尝试与分析,终于发现,原来这个少掉的Access查询,使用了一个Access模块中的自定义函数
这样导致 无法识别到这个查询
将查询中用到的自定义函数删除后,则成功获取了
吐槽】064-姚文涛-10年(21959068) 14:30:49
我得翻翻,好久之前的事情了,一直没结果,代码不知道放哪去了
等等,我现写一下看看
【话唠】ZPY2(1928323988) 14:40:06
【吐槽】064-姚文涛-10年(21959068) 14:41:31
这个结果输出时对的
【吐槽】064-姚文涛-10年(21959068) 14:43:22
有些时候没问题,有些时候又有问题,当初那个问题数据库我找不到了
【话唠】席主习_smileyoufu(86053924) 14:44:38
你列出有问题的例子来
【管理员】tmtony小辣椒(18449932) 14:44:56
用ADOX 也会这样?
【话唠】ZPY2(1928323988) 14:47:01
不会的,
【吐槽】064-姚文涛-10年(21959068) 14:47:56
我翻翻看看,难道是我当初导出到datagridview之后眼睛看花了
【话唠】席主习_smileyoufu(86053924) 14:50:23
几十年的东西,别轻易说有问题
【吐槽】064-姚文涛-10年(21959068) 15:20:01
少了一个z开头的查询
【吐槽】064-姚文涛-10年(21959068) 15:25:15
这是另一个,也少一个查询
【吐槽】064-姚文涛-10年(21959068) 15:26:28
我这是Ado.net
的测试结果,Ado似乎也一样,总是会莫名其妙少几个查询
【话唠】席主习_smileyoufu(86053924) 15:42:01
这是.net 不会用
【管理员】tmtony小辣椒(18449932) 15:43:28
@064-姚文涛-10年 建议弄个vb6+ado+mdb数据库 上来,大家来测试一下
【吐槽】064-姚文涛-10年(21959068) 15:43:46
好,等等
【话唠】ZPY2(1928323988) 16:04:21
【吐槽】064-姚文涛-10年(21959068) 16:04:39
【管理员】tmtony小辣椒(18449932) 16:04:45
@ZPY2 截图不清
【吐槽】064-姚文涛-10年(21959068) 16:05:01
上传了VB6的工程文件
里面有个数据库
【话唠】ZPY2(1928323988) 16:05:11
查询和表,参数不一样
【吐槽】064-姚文涛-10年(21959068) 16:05:11
读取之后少个查询
【话唠】ZPY2(1928323988) 16:07:30
view oledbschemaguid.tables 这个参数
【吐槽】064-姚文涛-10年(21959068) 16:07:43
就是这个OleDbSchemaGuid.Tables,控制是否是查询还是表,是后面那个object里的值控制的
【管理员】tmtony小辣椒(18449932) 16:08:16
@064-姚文涛-10年 少了哪个查询名?
【吐槽】064-姚文涛-10年(21959068) 16:09:12
【话唠】ZPY2(1928323988) 16:11:47
我是ado的,
【吐槽】064-姚文涛-10年(21959068) 16:11:49
我上传VB6工程,用的ADO
一样的问题
【吐槽】064-姚文涛-10年(21959068) 16:14:08
我上次还发现一个有好多查询都找不到的,不过我实在是翻不到那个数据库了
【活跃】新手(1742595842) 16:21:38
你的查询表在access里面可以打开吗?
我在你的access里面打不开你查询不到的那个表
【管理员】tmtony小辣椒(18449932) 16:27:35
@064-姚文涛-10年 原因找到了
【吐槽】064-姚文涛-10年(21959068) 16:27:56
啥原因?
【管理员】tmtony小辣椒(18449932) 16:28:09
因为你这个查询使用了access模块的自定义函数,所以取不到
把这个函数中用的自定义函数取消,就可能了
【话唠】ZPY2(1928323988) 16:28:49
老大厉害
【吐槽】064-姚文涛-10年(21959068) 16:29:11
哦,终于知道原因了,迷惑了我好久
那我又想要那个自定义函数的查询,咋办啊
【话唠】ZPY2(1928323988) 16:29:33
自定义函数 只能在 access vba执行,
【管理员】tmtony小辣椒(18449932) 16:30:02
这个你可在Access使用时动态 设置qdf.sql
但这个查询在VB调用肯定用不了这个函数的
【话唠】ZPY2(1928323988) 16:31:43
是啊,
【吐槽】064-姚文涛-10年(21959068) 16:33:04
如果是动态设置Sql,是不是要将自定义函数的这个模块保存在VB6工程项目里?
【管理员】tmtony小辣椒(18449932) 16:34:07
Access的查询是无法读取VB的自定义函数的:)
这个是不太好解决,DAO则可以
你只有在VB中了到查询内容,再用VB再处理了
我得翻翻,好久之前的事情了,一直没结果,代码不知道放哪去了
等等,我现写一下看看
【话唠】ZPY2(1928323988) 14:40:06
set xCat = Server.CreateObject("ADOX.Catalog") if xCat Is Nothing or IsEmpty(xCat) or not UseADOX Then 'ADOX is not available, so we'll get tables list using schemas set xCat = JetConnection_.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty)) Do While Not xCat.EOF tableType = xCat("TABLE_TYPE").Value If tableType = "SYSTEM TABLE" or tableType = "TABLE" or tableType = "ACCESS TABLE" or tableType = "LINK" _ or tableType = "PASS-THROUGH" Then set tbl = new DBATable With tbl .Name = xCat("TABLE_NAME").Value .DateCreated = xCat("DATE_CREATED").Value .DateModified = xCat("DATE_MODIFIED").Value .Description = xCat("DESCRIPTION").Value .TableType = xCat("TABLE_TYPE").Value Set .Parent = Me End With Set Tables_.Item(tbl.Name ) = tbl End If xCat.MoveNext Loop call xCat.Close() end if
【吐槽】064-姚文涛-10年(21959068) 14:41:31
这个结果输出时对的
【吐槽】064-姚文涛-10年(21959068) 14:43:22
有些时候没问题,有些时候又有问题,当初那个问题数据库我找不到了
【话唠】席主习_smileyoufu(86053924) 14:44:38
你列出有问题的例子来
【管理员】tmtony小辣椒(18449932) 14:44:56
用ADOX 也会这样?
【话唠】ZPY2(1928323988) 14:47:01
不会的,
【吐槽】064-姚文涛-10年(21959068) 14:47:56
我翻翻看看,难道是我当初导出到datagridview之后眼睛看花了
【话唠】席主习_smileyoufu(86053924) 14:50:23
几十年的东西,别轻易说有问题
【吐槽】064-姚文涛-10年(21959068) 15:20:01
少了一个z开头的查询
【吐槽】064-姚文涛-10年(21959068) 15:25:15
这是另一个,也少一个查询
【吐槽】064-姚文涛-10年(21959068) 15:26:28
我这是Ado.net
的测试结果,Ado似乎也一样,总是会莫名其妙少几个查询
【话唠】席主习_smileyoufu(86053924) 15:42:01
这是.net 不会用
【管理员】tmtony小辣椒(18449932) 15:43:28
@064-姚文涛-10年 建议弄个vb6+ado+mdb数据库 上来,大家来测试一下
【吐槽】064-姚文涛-10年(21959068) 15:43:46
好,等等
【话唠】ZPY2(1928323988) 16:04:21
【吐槽】064-姚文涛-10年(21959068) 16:04:39
【管理员】tmtony小辣椒(18449932) 16:04:45
@ZPY2 截图不清
【吐槽】064-姚文涛-10年(21959068) 16:05:01
上传了VB6的工程文件
里面有个数据库
【话唠】ZPY2(1928323988) 16:05:11
查询和表,参数不一样
【吐槽】064-姚文涛-10年(21959068) 16:05:11
读取之后少个查询
【话唠】ZPY2(1928323988) 16:07:30
view oledbschemaguid.tables 这个参数
【吐槽】064-姚文涛-10年(21959068) 16:07:43
就是这个OleDbSchemaGuid.Tables,控制是否是查询还是表,是后面那个object里的值控制的
【管理员】tmtony小辣椒(18449932) 16:08:16
@064-姚文涛-10年 少了哪个查询名?
【吐槽】064-姚文涛-10年(21959068) 16:09:12
【话唠】ZPY2(1928323988) 16:11:47
我是ado的,
【吐槽】064-姚文涛-10年(21959068) 16:11:49
我上传VB6工程,用的ADO
一样的问题
【吐槽】064-姚文涛-10年(21959068) 16:14:08
我上次还发现一个有好多查询都找不到的,不过我实在是翻不到那个数据库了
【活跃】新手(1742595842) 16:21:38
你的查询表在access里面可以打开吗?
我在你的access里面打不开你查询不到的那个表
【管理员】tmtony小辣椒(18449932) 16:27:35
@064-姚文涛-10年 原因找到了
【吐槽】064-姚文涛-10年(21959068) 16:27:56
啥原因?
【管理员】tmtony小辣椒(18449932) 16:28:09
因为你这个查询使用了access模块的自定义函数,所以取不到
把这个函数中用的自定义函数取消,就可能了
【话唠】ZPY2(1928323988) 16:28:49
老大厉害
【吐槽】064-姚文涛-10年(21959068) 16:29:11
哦,终于知道原因了,迷惑了我好久
那我又想要那个自定义函数的查询,咋办啊
【话唠】ZPY2(1928323988) 16:29:33
自定义函数 只能在 access vba执行,
【管理员】tmtony小辣椒(18449932) 16:30:02
这个你可在Access使用时动态 设置qdf.sql
但这个查询在VB调用肯定用不了这个函数的
【话唠】ZPY2(1928323988) 16:31:43
是啊,
【吐槽】064-姚文涛-10年(21959068) 16:33:04
如果是动态设置Sql,是不是要将自定义函数的这个模块保存在VB6工程项目里?
【管理员】tmtony小辣椒(18449932) 16:34:07
Access的查询是无法读取VB的自定义函数的:)
这个是不太好解决,DAO则可以
你只有在VB中了到查询内容,再用VB再处理了
Access数据库自身
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
文章分类
联系我们
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |