如何使用DBI列出Perl中Jet数据库的表名?

时间:2011-03-07 09:22:19

标签: perl odbc dbi jet

是否有可移植的方式列出*.mdb个文件中的表名 (即Perl中的Microsoft Jet数据库,也称为“Access数据库”)

通常我在Windows上使用Cygwin运行我的Perl脚本。

我可以使用*.mdb模块在​​DBD::ODBC数据库上运行SQL查询,但它没有实现DBI的table_info函数,这将完全符合我的需要。可能会使用DBD::ADO和/或Win32::OLE模块,但是他们拒绝在Cygwin下安装,我更愿意使用可移植的解决方案 - 理想情况下也可以在Linux上运行。

可以使用DBIx::Class::Schema::Loader模块执行此操作,我知道它正在升级,因此它实际上可以在*.mdb文件上运行,但它有很多依赖项,我实际上并不是想要安装我的脚本只是为了获得这个单一的功能。

您是否曾编写过在*.mdb文件中列出表名的Perl代码? 你使用了哪种技术?为什么?

2 个答案:

答案 0 :(得分:4)

这个传闻来自于DBD :: ODBC不支持table_info - 这是我一周内第三次看到它:

perl -le 'use DBI; my $h = DBI->connect("dbi:ODBC:access_sample"); my $t = $h->table_info(undef, undef, undef, "TABLE");print DBI::dump_results($t);'

'/home/martin/test.mdb', undef, 'A', 'TABLE', undef
'/home/martin/test.mdb', undef, 'MSysNavPaneGroupCategories', 'TABLE', undef
'/home/martin/test.mdb', undef, 'MSysNavPaneGroupToObjects', 'TABLE', undef
'/home/martin/test.mdb', undef, 'MSysNavPaneGroups', 'TABLE', undef
'/home/martin/test.mdb', undef, 'MSysNavPaneObjectIDs', 'TABLE', undef
'/home/martin/test.mdb', undef, 'PERL_DBD_TABLE1', 'TABLE', undef
'/home/martin/test.mdb', undef, 'PERL_DBD_TEST', 'TABLE', undef
'/home/martin/test.mdb', undef, 'TestTable', 'TABLE', undef
'/home/martin/test.mdb', undef, 'X', 'TABLE', undef
'/home/martin/test.mdb', undef, 'unicode', 'TABLE', undef
10 rows

答案 1 :(得分:1)

如果您不想要整件事,那么只需从DBIx::Class::Schema::Loader::DBI::ADO::MS_Jet中获取必要的部分。