ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4767|回复: 10

[求助] 无法获取字段名!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-12-1 14:28 | 显示全部楼层 |阅读模式
在获取master数据库时,可以获取各表中的字段,一点问题都没有,可是想获取其他数据库表的字段时,总是显示没有(我用magbox "没有可用的列"来提示)!请教,获取字段名的sql语句应该没问题(selece * from 库名..syscolumns where id=object_id('表名'),这是我用的),此问题是什么原因?
用的是MS-SQL!

[ 本帖最后由 linkspeed 于 2009-12-1 14:31 编辑 ]

EXCEL连接SQL.rar

12.6 KB, 下载次数: 17

TA的精华主题

TA的得分主题

发表于 2009-12-1 15:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
strSQL = "select * from " & cboDBName.Text & "..syscolumns where id = object_id('" & cboDBName.Text & " .." & ListBox1.Text & "')"

把获取字段的SQL改成上面这样子就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-1 16:17 | 显示全部楼层
看到zm0115兄的回答,我真是欣喜若狂,发了N多求助了,也许是没发对地方,也许。。。
不过在试过兄长给我的答复后,我更加的、更加的、更加的……狂喜!因为这个问题困扰我太久太久了!更因为它成功了!
语无伦次了,莫见怪!
冷静过后,仔细的考虑这个问题,还是不明白为什么要在object_id('表名')中把数据库名也加进去!又为什么不加数据库名的时候,只有master数据库能获取它各表的字段名?
能否请兄长解答一下!谢谢!感激不尽!

TA的精华主题

TA的得分主题

发表于 2009-12-1 16:41 | 显示全部楼层
呵呵,不是我故作高深,只是我也不知道为什么要这么做,对于SQL我也是一知半解。拿到你的附件,我也是捣鼓了好久。并且是查SQLServer帮助才查到的,帮助中是这样说的:
OBJECT_ID
返回数据库对象标识号。

语法
OBJECT_ID ( 'object' )

参数
'object'

要使用的对象。object 的数据类型为 char 或 nchar。如果 object 的数据类型是 char,那么隐性将其转换成 nchar。

返回类型
int

注释
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。

如果指定一个临时表名,则必须在临时表名前面加上数据库名,例如:

SELECT OBJECT_ID('tempdb..#mytemptable')

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关更多信息,请参见表达式和 WHERE。

示例
下面的示例为 pubs 数据库中的 authors 表返回对象 ID。

USE master
SELECT OBJECT_ID('pubs..authors')


祝顺,也希望高人出来解一下疑惑!!!

TA的精华主题

TA的得分主题

发表于 2009-12-1 16:42 | 显示全部楼层
如果指定一个临时表名,则必须在临时表名前面加上数据库名。。

可能是这个原因,你对应打开的数据库为master。而其他数据库没有打开,因此属于临时表,所以要加数据库名

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-1 16:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
哦,貌似有点懂了,不过还想请教一个问题!你那是否有SQL2000,能否帮我测试一个文件!是和这个差不多的,也是我原来想做成的样子,就是用treeview控件!可是总是提示我“集合中的关键字不唯一”,不知道为什么?我把附件上传也帮我看看吧!
这个东西估计我捣鼓到2012.12.21也搞不出来啊!请帮忙!

EXCEL连接SQL(TREEVIEW未完成).rar

16.74 KB, 下载次数: 9

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-1 16:58 | 显示全部楼层

回复 5楼 zm0115 的帖子

如果是这样,那也可以当我选择了数据库后,则重新连接一下这个数据库,这样的话,就没有临时表了,而我现在这样的程序,应该是默认打开master数据库了!

TA的精华主题

TA的得分主题

发表于 2009-12-1 17:11 | 显示全部楼层
原帖由 linkspeed 于 2009-12-1 16:50 发表
哦,貌似有点懂了,不过还想请教一个问题!你那是否有SQL2000,能否帮我测试一个文件!是和这个差不多的,也是我原来想做成的样子,就是用treeview控件!可是总是提示我“集合中的关键字不唯一”,不知道为什么?我把 ...


见附件,这个问题是这样的treeview中好像每一级关键字都要唯一(这个我也不理解,肯定有参数设置,懒得查原因了,呵呵,期待高人出来说一句)。你最末级是字段名,字段名分属不同的表。那很有可能会出现字段名重复,从而造成关键字不唯一,为了让他唯一我加了表名 TreeView1.Nodes.Add str_Table, tvwChild, str_Table & str_Column, str_Column

这样一来,表名&字段名作为关键字就肯定唯一了吧。呵呵
EXCEL连接SQL(TREEVIEW未完成).rar (15.81 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-1 17:17 | 显示全部楼层

回复 8楼 zm0115 的帖子

恩,对啊,我怎么没想到,真是个好办法!
各表的字段名确实有重复的,可是一直就没想明白为什么会报错!呵呵
谢谢!所有问题,今天一起解决了,太谢谢了!感谢之情无以言表啊!

速度上有点慢,看来还得修改!呵呵!

TA的精华主题

TA的得分主题

发表于 2009-12-1 17:26 | 显示全部楼层
修改完成了给我一份,呵呵,拿你这个做数据库查询工具。谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 07:23 , Processed in 0.025475 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表