Потребовалось импортировать данные из реляционный 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 структура данных в самих полях может отличаться от нормальной, например данные могут выравниваться по краям или центру