|
19.09.2007, 03:24 | #1 |
Участник
|
jinx: ADO Teil 2 - Bef?llen externer Datenquellen
Im letzten Artikel bin ich nur auf das lesen externer Datenquellen in Microsoft Dynamics AX eingegangen, diesesmal wird anhand eines kleine Beispiels eine externe Datenquelle bef?llt.
static void ArtikelinExterneDatenquelleeinfuegen(Args _args) { CCADOConnection adoConnection; CCADOCommand adoCommand; Inventtable inventtable; ; adoConnection = new CCADOConnection(); //ODBC-Connection adoConnection.connectionString(strfmt("Dsn=%1",dsnName)); //Connection ?ffnen adoConnection.open(); adoCommand = new CCADOCommand(); adoCommand.activeConnection(adoConnection); //Alle Datens?tze der Artikeltabelle while select inventtable { // Neue Anweisung f?r das Einf?gen des Datensatzes adoCommand.commandText(strfmt("Insert into ExterneArtikelTabelle (Artikelkennung,Artikelname) values ('%1','%2')", inventtable.ItemId, inventtable.itemName)); // Anweisung ausf?hren adoCommand.execute(); } } Das Erstellen der Verbindung ist identisch, nur habe ich die Klasse CCADOCommand anstelle von CCADORecordSet verwendet. Mit CCADOCommand k?nnen Manipulationen, wie das Einf?gen oder das L?schen von Datens?tzen, an externe Datenquellen vorgenommen werden. Wenn man noch einen Schritt weiter gehen will kann auch die Tabelle vorher neu erstellt werden um diese dann nutzen zu k?nnen. Dies geschieht auch ?ber SQL Befehle. Hier nochmal ein Beispiel f?r das anlegen und bef?llen einer Tabelle (Artikeltabelle mit den Feldern Artikelnummer und Artikelname). static void ArtikelinExterneDatenquelleeinfuegen(Args _args) { CCADOConnection adoConnection; CCADORecordSet adoRecordSet; CCADOCommand adoCommand; str sql; Inventtable inventtable; SysDictTable dictTable = new SysDicttable(inventTable.TableId); SysDictField dictFieldID = new SysDictField(dicttable.id(), fieldnum(InventTable, ItemID)); SysDictField dictFieldName = new SysDictField(dicttable.id(), fieldnum(InventTable, ItemName)); ; //Neu Verbindung adoConnection = new CCADOConnection(); adoConnection.connectionString(strfmt("Dsn=%1",dsnName)); adoConnection.open(); //Neu Command adoCommand = new CCADOCommand(); adoCommand.activeConnection(adoConnection); //Tabelle l?schen wenn sie existiert /* sql = strfmt("DROP Table IF EXISTS %1", dictTable.label()); adoCommand.commandText(sql); adoCommand.execute(); */ //Tabelle erzeugen sql = strfmt("Create Table %1 (%2 %3(%4), %5 %6(%7))", strrem(dictTable.label(), " "),//Leerzeichen l?schen strrem(dictFieldID.label(), " "), dictFieldID.baseType(),//Datentyp festlegen dictFieldID.stringLen(),//Gr??e festlegen strrem(dictFieldName.label(), " "), dictFieldName.baseType(), dictFieldName.stringLen()); adoCommand.commandText(sql); adoCommand.execute(); //Datens?tze in die neue Tabelle schreiben while select inventtable { sql = strfmt("Insert into %1 (%2,%3) values ('%4','%5')", strrem(dictTable.label(), " "), strrem(dictFieldID.label(), " "), strrem(dictFieldName.label(), " "), inventtable.ItemId, inventtable.itemName); adoCommand.commandText(sql); adoCommand.execute(); } } Es wird keine Haftung oder Gew?hrleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Axel K?hn (Aku's AX Blog, http://blog.ak-home.net) and Mathias F??ler (jinx's AX Blog, http://starside.eu) More... |
|
|
|