// X++, Main method in a class.
static public void Main(Args _args)
{
LoginProperty loginProperty;
OdbcConnection odbcConnection;
Statement statement;
ResultSet resultSet;
str sql, criteria;
SqlStatementExecutePermission perm;
;
// Set the information on the ODBC.
loginProperty = new LoginProperty();
loginProperty.setDSN("ExternalDB_32bit");
loginProperty.setDatabase("ExternalDatabaseName");
//Create a connection to external database.
odbcConnection = new OdbcConnection(loginProperty);
if (odbcConnection)
{
sql = "SELECT * FROM items;";
//Assert permission for executing the sql string.
perm = new SqlStatementExecutePermission(sql);
perm.assert();
//Prepare the sql statement.
statement = odbcConnection.createStatement();
resultSet = statement.executeQuery(sql);
//Cause the sql statement to run,
//then loop through each row in the result.
while (resultSet.next())
{
//It is not possible to get field 3 and then 1.
//Always get fields in numerical order, such as 1 then 2 the 3 etc.
print strFmt("%1 - %2", strRTrim(resultSet.getString(1)), strRTrim(resultSet.getString(2)));
}
//Close the connection.
resultSet.close();
statement.close();
}
else
{
error("Failed to log on to the database through ODBC.");
}
}
Schreibender Zugriff (INSERT)
// X++, Main method in a class.
static public void Main(Args _args)
{
LoginProperty loginProperty;
OdbcConnection odbcConnection;
Statement statement;
str sql, criteria;
SqlStatementExecutePermission perm;
;
// Set the information on the ODBC.
loginProperty = new LoginProperty();
loginProperty.setDSN("ExternalDB_32bit");
loginProperty.setDatabase("ExternalDatabaseName");
//Create a connection to external database.
odbcConnection = new OdbcConnection(loginProperty);
if (odbcConnection)
{
sql = "INSERT INTO items VALUES ('7000', 'Item 7000');";
//Assert permission for executing the sql string.
perm = new SqlStatementExecutePermission(sql);
perm.assert();
//Prepare the sql statement.
statement = odbcConnection.createStatement();
statement.executeUpdate(sql);
//Close the connection.
statement.close();
}
else
{
error("Failed to log on to the database through ODBC.");
}
}
Schreibender Zugriff (UPDATE)
// X++, Main method in a class.
static public void Main(Args _args)
{
LoginProperty loginProperty;
OdbcConnection odbcConnection;
Statement statement;
str sql, criteria;
SqlStatementExecutePermission perm;
;
// Set the information on the ODBC.
loginProperty = new LoginProperty();
loginProperty.setDSN("ExternalDB_32bit");
loginProperty.setDatabase("ExternalDatabaseName");
//Create a connection to external database.
odbcConnection = new OdbcConnection(loginProperty);
if (odbcConnection)
{
sql = "UPDATE items SET itemname = 'Name of ' + itemId;";
//Assert permission for executing the sql string.
perm = new SqlStatementExecutePermission(sql);
perm.assert();
//Prepare the sql statement.
statement = odbcConnection.createStatement();
statement.executeUpdate(sql);
//Close the connection.
statement.close();
}
else
{
error("Failed to log on to the database through ODBC.");
}
}
Wenn man diese Zugriffe am Client ausführt, reicht eine 32-bit DSN. Laufen die Zugriffe über den Server - beispielsweise über das SysOperation-Framework - und ist auf dem Server ein 64bit-Betriebsystem installiert so muss auf dem AOS eine 64-bit DSN eingerichtet sein.
Verwendet man die falsche DSN, erkennt man das an Fehlermeldungen wie den folgenden:
ODBC-Vorgang ist fehlgeschlagen. Anmeldung bei der Datenbank nicht möglich.
[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application
Um nun die jeweils richtige DSN zu verwenden, könnte man den Zugriff wie folgt anpassen:
// Set the information on the ODBC.
loginProperty = new LoginProperty();
if(Global::isRunningOnServer())
{
loginProperty.setDSN("ExternalDB_64bit");
}
else
{
loginProperty.setDSN("ExternalDB_32bit");
}
loginProperty.setDatabase("ExternalDatabaseName");
Anmerkung:
Die 32-bit Version der ODBC-Verwaltung (Odbcad32.exe) ist unter %systemdrive%\Windows\SysWoW64 zu finden.
Die 64-bit Version der ODBC-Verwaltung (Odbcad32.exe) ist unter %systemdrive%\Windows\System32 zu finden.
Dieser Beitrag bezieht sich auf die Version: Dynamics AX 2012
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.
Mehr dazu
Im folgenden ein paar Code-Beispiele wie man aus Dynamics AX heraus auf externe Datenbanken lesend und schreibend zugreifen kann.
Die Beispiele basieren auf folgendem MSDN-Beitrag:
How to: Connect to an External Database from X++ Code [AX 2012]
Lesender Zugriff (SELECT)
Schreibender Zugriff (INSERT)
Schreibender Zugriff (UPDATE)
Wenn man diese Zugriffe am Client ausführt, reicht eine 32-bit DSN. Laufen die Zugriffe über den Server - beispielsweise über das SysOperation-Framework - und ist auf dem Server ein 64bit-Betriebsystem installiert so muss auf dem AOS eine 64-bit DSN eingerichtet sein.
Verwendet man die falsche DSN, erkennt man das an Fehlermeldungen wie den folgenden:
Um nun die jeweils richtige DSN zu verwenden, könnte man den Zugriff wie folgt anpassen:
Anmerkung:
Die 32-bit Version der ODBC-Verwaltung (Odbcad32.exe) ist unter %systemdrive%\Windows\SysWoW64 zu finden.
Die 64-bit Version der ODBC-Verwaltung (Odbcad32.exe) ist unter %systemdrive%\Windows\System32 zu finden.