搜索
查看: 4360|回复: 9

请教怎样得到access数据库中的所有表名?

[复制链接]

2

主题

7

帖子

45

积分

新手入门

Rank: 1

积分
45
发表于 2014-4-18 14:02:44 | 显示全部楼层 |阅读模式
本帖最后由 walker 于 2014-4-18 14:05 编辑

如题,怎样得到指定access数据库中的所有表名?
这个句子没法用,会提示权限不够:http://blog.csdn.net/jubao_liang/article/details/4699766

  1. SELECT NAME FROM MSysObjects
  2. WHERE TYPE=1 AND FLAGS=0
复制代码

aardio中有db.existsTable("tablename")方法,应该有办法得到所有表名的呀?
请教大家不手动操作access仅仅通过aardio代码得到所有表名的方法。

回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2014-4-18 21:22:03 | 显示全部楼层

[b]获取access 所有表名[/b] [code][lang=aardio,false] import com; import console

获取access 所有表名


  1. import com;
  2. import console
  3. conn = com.CreateObject("ADODB.Connection")
  4. conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + io.fullpath("access数据库")
  5. conn.open();
  6. rs=conn.OpenSchema("20")

  7. rs.MoveFirst()
  8. while(rs.EOF=false){
  9.   console.log(rs("TABLE_NAME").value)
  10.     rs.MoveNext()
  11. }

复制代码


回复

使用道具 举报

2

主题

7

帖子

45

积分

新手入门

Rank: 1

积分
45
 楼主| 发表于 2014-4-21 09:08:09 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65638&ptid=11931][c

qqmmcc 发表于 2014-4-18 21:22
获取access 所有表名

谢谢,看了\aardio\lib\access\_.aardio的源码,发现下面这样也是可以的:
  1. import console;
  2. import access;

  3. var db = access(dbPath);
  4. var cat = ..com.CreateObject("ADOX.Catalog")  
  5. cat.ActiveConnection = db.connection;
  6. for index,tbl in ..com.each(cat.Tables) {
  7.         if( tbl.Type = "TABLE") {
  8.                 console.log(tbl.Name);
  9.         }
  10. }
  11. db.close();
复制代码

回复

使用道具 举报

8

主题

98

帖子

716

积分

三级会员

Rank: 4

积分
716
发表于 2014-4-22 09:01:54 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65659&ptid=11931][c

walker 发表于 2014-4-21 09:08
谢谢,看了\aardio\lib\access\_.aardio的源码,发现下面这样也是可以的:

请问,如何得到一个表里面的所有字段呢?
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2014-4-22 16:17:37 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65674&ptid=11931][c

lyz8 发表于 2014-4-22 09:01
请问,如何得到一个表里面的所有字段呢?

得到一个表里面的所有字段:

  1. import access;
  2. import console;

  3. var db,err = access( "/test.xls")

  4. io.open();

  5. //存在表
  6. notexistsTable = function(xls,tablename){
  7.         var cat = ..com.CreateObject("ADOX.Catalog");  
  8.         cat.ActiveConnection = xls.connection;
  9.         tablename += "$";
  10.         for index,tbl in com.each(cat.Tables) {
  11.                 if( tbl.Type = "TABLE" && string.endWith(tbl.Name,"$")){
  12.                         if(tablename == tbl.Name){
  13.                                 io.print("表头总数: " ++ tbl.Columns.Count);
  14.                                 for(i=0;tbl.Columns.Count-1;1){        //注意:从0开始
  15.                                         io.print(tbl.Columns(i).Name);        //列出表头
  16.                                 }
  17.                                 return false;
  18.                         }
  19.                 }       
  20.         }
  21.         return true;
  22. }

  23. if( notexistsTable( db,"测试表" ) ){
  24.         db.exec("CREATE TABLE 测试表 (x char(20) )");
  25.         notexistsTable( db,"测试表" );        //新建表,再调用一次
  26. }

  27. db.exec("select * from 测试表");

  28. //关闭数据库
  29. db.close();
复制代码
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2014-4-22 17:18:24 | 显示全部楼层

[i=s] 本帖最后由 alajia 于 2014-4-22 17:20 编辑 [/i] 如果是EXCEL,也可以这样获取所有表名 [code][lang=

本帖最后由 alajia 于 2014-4-22 17:20 编辑

如果是EXCEL,也可以这样获取所有表名
  1. import com.excel;
  2. var excel = com.excel(true);
  3. book = excel.Open("/test.xls")
  4. io.open();
  5. for(i=1;excel.ActiveWorkbook.Sheets.Count;1){
  6.         io.print(excel.ActiveWorkbook.Sheets(i).Name);
  7. }
  8. excel.Quit();
复制代码
回复

使用道具 举报

8

主题

98

帖子

716

积分

三级会员

Rank: 4

积分
716
发表于 2014-4-22 23:30:50 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65681&ptid=11931][c

alajia 发表于 2014-4-22 16:17
得到一个表里面的所有字段:

非常感谢你的代码
回复

使用道具 举报

2

主题

7

帖子

45

积分

新手入门

Rank: 1

积分
45
 楼主| 发表于 2014-4-23 11:43:33 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65681&ptid=11931][c

alajia 发表于 2014-4-22 16:17
得到一个表里面的所有字段:

谢谢!已整理至:
http://bbs.aardio.com/forum.php?mod=viewthread&tid=11956
回复

使用道具 举报

13

主题

122

帖子

968

积分

三级会员

Rank: 4

积分
968
发表于 2016-7-5 14:24:55 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=65681&ptid=11931][c

alajia 发表于 2014-4-22 16:17
得到一个表里面的所有字段:

为何用此方法得到的列名顺序与Excel中显示的不符?
回复

使用道具 举报

10

主题

82

帖子

666

积分

三级会员

Rank: 4

积分
666
发表于 2016-7-28 10:46:53 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=71747&ptid=11931][c

ejzhang 发表于 2016-7-5 14:24
为何用此方法得到的列名顺序与Excel中显示的不符?

如果是不符,可以用其他方法试试。如先保存为xlsx文件,然后安装扩展库中的sevenZip.cmd,注意:将var src = "替换为需要查看的EXCEL表.xlsx"

  1. import console;
  2. import process.popen;
  3. import fsys;

  4. var _,libDir = ..io.libpath("sevenZip.cmd");
  5. var zPath = fsys.joinpath(libDir ,".bin\7za.dll" );
  6. var src = "替换为需要查看的EXCEL表.xlsx";
  7. var dst = "";
  8.    
  9. if( io.exist(dst + "workbook.xml") ){
  10.         io.remove(dst + "workbook.xml");
  11. }

  12. var prcs = process.popen(zPath,
  13.     '"' + zPath  + '" '
  14.     + ' e "'  + ..io.fullpath(src) + '" '
  15.     + ' -o"' + ..io.fullpath(dst) + '" '
  16.     + ' "workbook.xml" '
  17.     + ' -r'
  18.     )

  19. var str = prcs.read(-1) //读取返回数据;

  20. if(io.exist(dst + "workbook.xml")){
  21.         str = string.load(dst + "workbook.xml");
  22.         var p = //\<sheet name="(.+?)"
  23.         var n = 1;
  24.         for name in string.gmatch(str ,p ) {
  25.             console.log("sheet-" ++ n ++ ":",name,'\r\n' );
  26.             n++;
  27.         }       
  28. }
  29. else {
  30.         console.log("文件格式不正确:",str )       
  31. }

  32. console.pause(true);
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-17 01:00 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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