Hallo Herr Richter,
Über das Batch-Modul haben Sie die Möglichkeit mit den Aufrufoptionen
/ReadFileName dateiname bzw. /WriteFileName dateiname
den Dateinamen und Pfad, der in der Definition hinterlegt/gespeichert ist vor der Ausführung zu überschrieben. Dies funktioniert allerdings nur zusammen mit dem TextFile Adapter bzw. dem Excel Adapter.
Sie möchten vermutlich auch noch auf der WRITE Seite vor dem Import eine neue Tabelle dynmaisch anlegen? Das würde zusammen mit dem .NET Script Heater und einen wenig Code funktionieren.
Erstellen Sie dazu ganz normal Ihre CSV Import Defintion. Nachdem Sie den Import getestet haben ziehen Sie einen .NET Script Heater per Drag & Drop in eine bestehende Verbindung und fügen weiter unten stehenden .NET Script Code ein.
Wichtig: Der .NET Script Heater muss zwischen eine bestehende Verbindung gezogen werden da sonst der Code nicht dynamisch ausgeführt wird!
Der Code legt pro Import eine neue Tabelle t_DynImport + Aktuelles Datum und Uhrzeit an. Als Basis werden die auf der WRITE Seite vorhandenen Felder verwendet. Schauen Sie sich das ganze einmal an. Anpassungen am Tabellennamen bzw. Aufbau der Tabelle z.B. Primary Key können relativ schnell durchgeführt werden.
bool bFirst = true;
public object DoWork()
{
if (bFirst)
{
// nur vor 1. Datensatz aufrufen
bFirst = false;
bool primary = true;
string tabelle = "t_DynImport_" + DateTime.Now.ToString("yyyyMMdd_hhmmss");
BaseDBAdapter adapter = (BaseDBAdapter)AdapterWrite;
adapter.SQL = "select * from " + tabelle;
string sql = "create table " + tabelle + " (";
int len = 0;
int count = 0;
foreach(Field f in adapter.Fields)
{
BaseDBAdapterField field = (BaseDBAdapterField)f;
if (count > 0)
sql += ", ";
sql += "[" + field.Name + "] ";
switch(field.DataType)
{
case DataType.String:
len = field.Length;
if (len == 0)
len = 100;
//SQL Datentyp für strings
sql += "varchar(" + len.ToString() + ")";
break;
case DataType.Date:
case DataType.Time:
case DataType.DateTime:
//SQL Datentyp für datetime
sql += "datetime";
break;
case DataType.Bool:
//SQL Datentyp für Bool: bei MSSQL bit verwenden!
sql += "boolean";
break;
case DataType.Int:
//SQL Datentyp für Int (Ganzzahl)
sql += "Integer";
break;
case DataType.Double:
case DataType.Currency:
//SQL Datentyp für Double und Currency, evtl. auch numeric(18,2) ...
sql += "Float";
break;
}
if (primary) {
primary = false;
sql += "not null ";
}
count++;
}
sql += " );";
//File.WriteAllText("C:\\Temp\\sql.txt", sql);
// Tabelle anlegen
adapter.Execute(sql);
}
// Eingangsparameter einfach wieder zurückliefern!
return InValues[0].GetValue();
}