安徽彩票大奖 欧洲百万乐透大奖 七星彩17049规律大奖 双色球中大奖领奖过程 3d近期中大奖故事 广州番禺中福彩大奖的 鸡男注定会中大奖 2016江苏彩民中大奖 趣彩网大奖网黑平台 大乐透4.97亿大奖 霍邱一彩民6元中双色球547万大奖 双色球黑龙江中大奖图 体育彩票中大奖名单 什么样的人能中大奖 彩票大奖作假

使用ADO的OpenSchema或ADOX无法读取所有Access数据库里所有查询名称列表的问题

2017-09-07 16:31:00
zstmtony
原创
1232

一个Access中国的版主在使用ADO的OpenSchema或ADOX 读取Access数据库里所有查询的清单时

发现结果总?#24039;?#20102;一个查询,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
?#19994;?#32763;翻,好久之前的事情了,一直没结果,代码不知道放哪去了
等等,我?#20013;?#19968;下看看
【话唠】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
我翻翻看看,?#35757;?#26159;?#19994;?#21021;导出到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似乎也一样,总是会莫名其妙少?#29238;?#26597;询
【话唠】席主习_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
我上?#20301;?#21457;现一个有好多查询都找不到的,不过我实在是翻不到那个数据库了
【活跃】新手(1742595842)  16:21:38
你的查询表在access里面可?#28304;?#24320;吗?
我在你的access里面打不开你查询不到的那个表
【管理员】tmtony小辣椒(18449932)  16:27:35

@064-姚文涛-10年 原因?#19994;?#20102;
【吐槽】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的自定义函数的?#28023;?br /> 这个是不太好解决,DAO则可以
你只有在VB中了到查询内容,再用VB再处理了


    分享
    ? 1999-2019 Office交流网?? 中山市天鸣科技发展有限公司 粤ICP备10043721号-5 SQL查询:19
    内存占用:7.75MB
    PHP 执行时间:0.13
    双色球大奖2000年
    安徽彩票大奖 欧洲百万乐透大奖 七星彩17049规律大奖 双色球中大奖领奖过程 3d近期中大奖故事 广州番禺中福彩大奖的 鸡男注定会中大奖 2016江苏彩民中大奖 趣彩网大奖网黑平台 大乐透4.97亿大奖 霍邱一彩民6元中双色球547万大奖 双色球黑龙江中大奖图 体育彩票中大奖名单 什么样的人能中大奖 彩票大奖作假