3

Я ищу бесплатный способ изменить файл .mdb(доступ) на .csv(файл с разделителями-запятыми). какие-нибудь идеи там?

РЕДАКТИРОВАТЬ:

Мне нужно иметь возможность конвертировать большое количество файлов .mdb ... Так что что-то автоматизированное было бы хорошо.

6 ответов6

4

Вы можете использовать mdbtools для экспорта файла Access в CSV. В этом посте рассказывается, как их можно автоматизировать с помощью Python.

2

Файлы базы данных MS Access представляют собой контейнеры с полными базами данных, включая схемы, индексы и данные таблиц. Файл .csv должен быть дампом одной таблицы базы данных для любого разумного использования. Обычно вам не нужен сортировщик типа «тип файла-файл», а скорее способ извлечения информации из базы данных Access, которая вам нужна в файле .csv.

Если у вас есть MS Access, вы можете просто открыть базу данных в Access, щелкнуть правой кнопкой мыши по каждой таблице и выбрать "Экспорт". В диалоговом окне файла вы можете выбрать формат для экспорта, который будет включать в себя текстовые форматы, такие как .csv. Если ваша установка или версия Access напрямую не поддерживает экспорт в текстовые форматы, вы можете следовать совету rjmccann101 и сначала экспортировать его в книгу MS Excel, которая будет работать даже с самыми старыми версиями Access. Кроме того, вы можете указать запросы к вашим таблицам и экспортировать их результаты таким же образом.

Кроме того, файлы данных Access являются автономными базами данных. Если у вас нет копии MS Access, а есть только файл .mdb, вы можете подключиться к ней и запросить данные таблицы с помощью SQL, например, с помощью простого сценария Perl:

#/usr/bin/perl

use strict;
use warnings;

my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=path_and_name_of_your.mdb');
my $sql = "select * from table_name";
my $sth = $dbh->prepare( $sth );
while( my @row = $sth->fetchrow_array()) {
    print( join( ',', @row ) . "\n" );
}
$sth->finish() ;
$dbh->disconnect() ;

1

У меня только Access 2007 доступен здесь, но экспорт в Excel и сохранение как CSV должны работать.

1

Проверьте этот поток StackOverflow:

  1. Сделайте запрос к таблице, используя только те столбцы, которые вам нужны, и сохраните его.
  2. Выберите запрос, затем перейдите в Файл-> Экспорт (выберите Сохранить как «text * .txt, * cvs и т.д.») И следуйте инструкциям.
1

Для массовой обработки я бы порекомендовал такой скрипт (пример на Perl):

#/usr/bin/perl  

use strict;  
use warnings;  
use DBI;  

my $dir = "/your/path/to/mdb/files";  
opendir( DIR, "$dir" );  
while( readdir( DIR )) {  
    my $filename = $_;  
    next unless( $filename =~ /.mdb$/ ); # skip non-Access entries  
    my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb); dbq=$dir/$filename');  
    # This select will retrieve all Access objects that are Tables and not system tables
    my $sql_outer = 'select name from MSysObjects where type = 1 and name not like "MSys*"';  
    my $sth_outer = $dbh->prepare( $sql_outer );  
    while( my @table_name = fetchrow_array( $sth_outer )) {  
        open( OUT, ">", "$dir/$filename.$table_name.csv" );  
        $sql_inner = "select * from $table_name";  
        $sth_inner = $dbh->prepare( $sql_inner );  
        while( my @row = fetchrow_array( $sth_inner )) {  
            print( OUT join( ',', @row ) . "\n" );  
        }  
        sth_inner->finish();  
        close( OUT );  
    }  
    $sth->outer->finish();  
    $dbh->disconnect();  
}  
closedir( DIR )  

Это "преобразует" каждый файл .mdb в группу файлов .csv, названных по имени их контейнера базы данных (файл .mdb) и имени таблицы. Если вам не нужны фактические значения, разделенные запятыми, а, скорее, труба, точка с запятой или любые другие разделенные данные, просто отредактируйте оператор печати соответствующим образом.

В примере требуется, чтобы все ваши файлы .mdb находились в одном каталоге, который жестко задан в переменной $ dir, но это можно легко изменить, чтобы вы могли передавать имена каталогов или отдельные имена файлов .mdb в командной строке.

Обратите внимание, что пример не является надежным или отказоустойчивым в любом случае, я упустил любое обнаружение и исправление ошибок для удобства чтения.
Также обратите внимание, что в Windows также есть реализации Perl (например, ActiveState Perl), и этот пример должен работать в среде Windows с незначительными изменениями в обозначении пути.

0

Возможно, вы захотите проверить инструмент, который я написал под названием PlaneDisaster.NET. Он не будет экспортировать файлы в массовом порядке, но будет иметь открытый исходный код, и если вы знаете C #, это будет хорошей отправной точкой для программы, которая делает это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .