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

发布于 2024-10-20 18:47:46 字数 611 浏览 3 评论 0原文

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

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

我可以使用 DBD::ODBC 模块在 *.mdb 数据库上运行 SQL 查询,但它没有实现 DBI 的 table_info 函数,这正是我所需要的。可能可以使用 DBD::ADO 和/或 Win32::OLE 模块来代替,但它们拒绝在 Cygwin 下安装,我更喜欢有一个便携式解决方案 - 理想情况下甚至可以在 Linux 上运行。

DBIx::Class::Schema::Loader 模块可用于执行此操作,并且我了解它正在升级,因此它实际上可以在 *.mdb 文件上运行,但它有一个巨大的依赖项列表,我真的不想在任何运行脚本的地方安装这些依赖项,只是为了获得这个单一的功能。

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

Is there a portable way to list the table names in *.mdb files
(i.e. Microsoft Jet databases, also known as "Access databases") in Perl?

Usually I run my Perl scripts on Windows with Cygwin.

I can run SQL queries on *.mdb databases just fine with the DBD::ODBC module, but it doesn't implement DBI's table_info function, which would do exactly what I need. The DBD::ADO and/or Win32::OLE modules can probably be used instead, but they refuse to install under Cygwin, and I'd prefer to have a portable solution - ideally one that even works on Linux.

The DBIx::Class::Schema::Loader module can be used to do this, and I understand it's being upgraded so it will actually work on *.mdb files, but it has an enormous list of dependencies that I don't really want to install wherever I run my script just to get this single function.

Have you ever written Perl code that lists the table names in an *.mdb file?
Which technique did you use and why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

靖瑶 2024-10-27 18:47:46

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

Where has this rumor come from that DBD::ODBC does not support table_info - this is the third time in a week I've seen it:

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
南巷近海 2024-10-27 18:47:46

如果您不想要整个内容,则只需从 DBIx::Class::Schema::Loader::DBI::ADO::MS_Jet

If you don't want the whole thing, then just grab the necessary parts from DBIx::Class::Schema::Loader::DBI::ADO::MS_Jet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文