perl中动态创建access数据库mdb

Update:Added DBI method, much simpler way to create the tables!

You don't mention what version of Access you are using, so the two examples may need tweaking based on the version of JET you have. I'll let you parse the '|' delimited data ;)

Methods 2 and 3 create a database called 'new.mdb' in the current directory and add a table. Both methods were tested on Win2K with Access 97 (I know, old stuff ;)

Method 1 - Create the db either way (or just copy an empty mdb file), then use DBI to add the tables and populate the data


use DBI;
my $datasource = "driver=Microsoft Access Driver (*.mdb);dbq=new.mdb";
my $username = 'admin';
my $password = '';

my $dbh = DBI->connect("dbi:ODBC:$datasource", $username, $password)
        || die "Error connecting: $!";

my $sql   = "CREATE TABLE DBITable (FirstName TEXT, LastName TEXT)";

my $sth = $dbh->prepare($sql);
$sth->execute;

Method 2 - Use ADOX (requires MDAC)


use strict;
use warnings;
use Win32::OLE;

use Win32::OLE::Const 'Microsoft ADO Ext. 2.5 for DDL and Security';

# The "catalog" is the db
my $cat = Win32::OLE->new('ADOX.Catalog');
# Tweak the following line for your JetDB
$cat->Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source=new.mdb');

#first create the table, modify it, then append it to the
#tables collection
my $table = Win32::OLE->new('ADOX.Table');
$table->{Name} = 'MyADOTable';
$table->Columns->Append('ID', adInteger);
$table->Columns->Append('Desc', adVarChar);
$cat->Tables->Append($table);

Method 3 - Use DAO


use strict;
use warnings;
use Win32::OLE;

# The next two lines would need to be tweaked
# Off the top of my head, I think DAO 3.6 (or 4.0?)is for Access 2000
# Look in HKEY_CLASSES_ROOT for DAO for the actual numbers

use Win32::OLE::Const 'Microsoft DAO 3.51 Object Library';
my $acc = Win32::OLE->new("DAO.DBEngine.35", 'quit');

my $db = $acc->CreateDatabase('new.mdb', dbLangGeneral);

my $tab = $db->CreateTableDef('MyDAOTable');
my $fld = $tab->CreateField('ID', dbInteger);
$tab->Fields->Append($fld);
$fld = $tab->CreateField('Desc', dbText);
$tab->Fields->Append($fld);
$db->TableDefs->Append($tab);
$db->TableDefs->Refresh;

Activestate's OLE browser will give you some clues as to available objects, methods and constants. The help files that came with Access will documents the object model in detail, with VBA examples.

Good luck!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值