Пакетная обработка DBF Foxpro файлов, Import в FoxPRO

Потребовалось импортировать данные из реляционный Mysql в ненавистный FoxPRO. Как всегда приходится использовать не менее ненавистный Perl

#!/usr/bin/perl
use XBase;
use DBI;

my $dsn = 'DBI:mysql:AF3:mysql.a';
my $db_user_name = 'root';
my $db_password = 'root';

my $dbh = DBI->connect($dsn, $db_user_name, $db_password);

sub mysql_2_dbf{
    my $nfile = "$_[0]";
    my $table = new XBase "struct/$_[0]"  or die XBase->errstr;
    my $newtable = $table->create("name" => $nfile, "codepage" => "cp1251");
    $table->close();

    $table = new XBase $nfile  or die XBase->errstr;

    my $sth = $dbh->prepare(qq{set names cp1251});
    $sth->execute();

    $sth = $dbh->prepare(qq{select * from $_[0]});
    $sth->execute();
    my $recno = 0;
    while (my @data = $sth->fetchrow_array())
    {
         $table->set_record($recno,@data);
         #print ($recno,@data);
         $recno++;
    }
    if($recno>0){
        print "expot to $_[0] -- $recno record\n";
    }
    $sth->finish();
    $table->close();
}

my @table = ("FOND","FOND3","MOVE","OPIS","OPIS2");

while ( my $arg = shift @table ) {
    mysql_2_dbf($arg);
}

Следует обратить внимание на функции создания структуры новой таблицы на основе эталонной table->create

На функцию добавления новой записи -- как ни странно необходимо указывать уникальный номер для вставки новой записи

А так же на то, что FoxPRO структура данных в самих полях может отличаться от нормальной, например данные могут выравниваться по краям или центру

Комментариев 0
Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут