是否有可移植的方式列出*.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代码?
你使用了哪种技术?为什么?
答案 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中获取必要的部分。