Как вы перечислите имена таблиц базы данных Jet в Perl с DBI? - PullRequest
1 голос
/ 07 марта 2011

Существует ли переносимый способ перечисления имен таблиц в *.mdb файлах (т.е. базы данных Microsoft Jet, также известные как «базы данных Access») в Perl?

Обычно я запускаю свои скрипты Perl в Windows с Cygwin.

Я могу выполнять запросы SQL на *.mdb базах данных просто отлично с модулем DBD::ODBC, но он не реализует функцию DBI table_info, которая будет делать именно то, что мне нужно. Модули DBD::ADO и / или Win32::OLE, вероятно, можно использовать вместо этого, но они отказываются устанавливать под Cygwin, и я предпочел бы иметь портативное решение - в идеале, которое работает даже в Linux.

Для этого можно использовать модуль DBIx::Class::Schema::Loader, и я понимаю, что он обновляется, поэтому он действительно будет работать с файлами *.mdb, но у него огромный список зависимостей, которые я не хочу устанавливать везде Я запускаю свой скрипт только для того, чтобы получить эту единственную функцию.

Вы когда-нибудь писали код Perl, в котором перечислены имена таблиц в файле *.mdb? Какой техникой вы пользовались и почему?

Ответы [ 2 ]

4 голосов
/ 07 марта 2011

Откуда взялся этот слух, что 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 голос
/ 07 марта 2011

Если вы не хотите всего этого, просто возьмите необходимые части из DBIx :: Class :: Schema :: Loader :: DBI :: ADO :: MS_Jet .

...