How To: Read MPD Databases
Microsoft Project from Project 98 until Project 2003 could read and write schedules as Microsoft Access database files with the extension MPD. Versions of Microsoft Project after 2003 can import projects from MPD databases but cannot create or write to them. Project 98 creates a database with a schema known as MPD8, which MPXJ does not currently support reading. Project 2000 onward uses a schema called MPD9 which MPXJ can read.
Microsoft Project Server originally shared the same database schema as the MPD9 file format. This means that the
MPDDatabaseReader
class described below may also be used to read data from a Project Server SQL Server database.
Reading MPD databases
The preferred way to read MPD files is using UniversalProjectReader
or the MPDFileReader
reader. as described in the
How To Read MPD files section.
You can if you wish read an MPD file via a database connection. Typically you will need the JDBC-ODBC bridge driver, or an equivalent JDBC driver which can work with a Microsoft Access database.
Setting the database connection
The MPDDatabaseReader
class provides two methods: setConnection
and
setDataSource
which allows you to supply a JDBC Connection
instance or a
JDBC DataSource
instance.
Selecting a project
If the MPD file contains multiple projects, you can retrieve details of the
available projects using the listProjects
method. This returns a map of
project IDs and project names. The sample code below illustrates how to retrieve
this list of projects, and select the specific project that you want to read. In
this case we read each project in the file in turn.
package org.mpxj.howto.read;
import net.sf.mpxj.mpd.MPDDatabaseReader;
import java.sql.Connection;
import java.util.Map;
public class MPDDatabase
{
public void read(Connection connection) throws Exception
{
MPDDatabaseReader reader = new MPDDatabaseReader();
reader.setConnection(connection);
Map<Integer, String> projects = reader.listProjects();
for (Map.Entry<Integer, String> entry : projects.entrySet())
{
System.out.println("Project name: " + entry.getValue());
reader.setProjectID(entry.getKey());
reader.read();
}
}
}