Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Löschen von Daten in der Zieltabelle vor dem befüllen

Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #408

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Hallo,

ich möchte gezielte Einträge in der Zieltabelle vor dem Befüllen löschen.

Kriterium soll beispielsweise das erste Feld aus dem ersten Datensatz der Readtabelle sein.
Beispiel:

Readtabelle(erste Datensatz):

Feld1 Feld2
FR 2230


Zieltabelle:
Feld1 Feld2
FR 2230
ES 9888
IT 5544
FR 4544

Jetzt sollen alle Daten mit "FR" in der Zieltabelle gelöscht werden, bevor Sie neu befüllt wird.

Wie mache ich das?

Viele Grüße
Sven Majali
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #416

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
Das können Sie mit Hilfe des .NET Skript Heater und folgenden kleinen Skript durchführen.
public object DoWork()
{
  // nicht im Testmodus ausführen
  if (AdapterWrite.OnlyTest == false)
  {
    string sTemp = (string)InValues[0].GetString();
    if (sTemp != null)
    {
      // Hier den SQL Tabellen und Feldnamen anpassen
      AdapterWrite.Execute("delete from IHRE_TABELLE where IHR_FELD = '" + sTemp + "'");
    }
  }

  // 1. Eingangsparameter für weitere Verarbeitung wieder zurückliefern
  return InValues[0].GetValue();
}

Ziehen Sie dazu einen .NET Script Heater in die Verbindung vom Feld1. Öffnen Sie den Konfigurationsdialog über einen Doppelklick und kopieren oben stehenden Code hinein. Jetzt müssen Sie noch den SQL Tabellen und Feldnamen im Skript an Ihre Umgebung anpassen, siehe Kommentar im Skript.

Achtung: Bitte das Skript mit Vorsicht genießen. Wenn Sie hier falsche Parameter angeben wird unter Umständen der komplette Inhalt gelöscht.
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #418

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Moin Robert,
leider funktioniert es nicht. Kannst du dir das bitte kurzfristig angucken? Ich benötige dringend diese Funktion:

// Diese Funktion ist zwingend erforderlich!
public object DoWork()
{
// nicht im Testmodus ausführen
if (AdapterWrite.OnlyTest = false)
{
string sTemp = (string)InValues[0].GetString();
if (sTemp != null)
{
// Hier den SQL Tabellen und Feldnamen anpassen
AdapterWrite.Execute("delete from ISALE where CompanyID = '" + sTemp + "'");
}
}

// 1. Eingangsparameter für weitere Verarbeitung wieder zurückliefern
return InValues[0].GetValue();
}

VG
Sven
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #419

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
Hallo Sven,

wenn das Feld CompanyID ein Zahlenfeld ist muss das Skript leicht angepasst werden.
public object DoWork()
{
  // nicht im Testmodus ausführen
  if (AdapterWrite.OnlyTest == false)
  {
    string sTemp = (string)InValues[0].GetString();
    if (sTemp != null)
    {
      // evtl. Tausendertrennzeichen entfernen
      sTemp = sTemp.Replace(".", "").Replace(",", "");

      // Hier den SQL Tabellen und Feldnamen anpassen
      AdapterWrite.Execute("delete from IHRE_TABELLE where IHR_FELD = " + sTemp);
    }
  }

  // 1. Eingangsparameter für weitere Verarbeitung wieder zurückliefern
  return InValues[0].GetValue();
}
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #420

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Kann es sein, das der Prozess jetzt extrem langsam läuft.......vorher lief Alles erheblich schneller.....ob es funktioniert kann ich noch nicht sagen, da die Verarbeitung noch läuft...
Das Kriterium sollte nur aus dem ersten Satz und nur einmal aus der Sourcetabelle gelesen werden.....
Kann es sein, das er immer wieder liest? Es läuft einfach nur langsam!
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #423

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
Hallo Sven,

ja, das Skript löscht pro Datensatz die Einträge der Tabelle neu. Das ist natürlich ziemlich zeitaufwändig.
Ich hab das Skript etwas angepasst. Es merkt sich jetzt bereits gelöschte Werte und führt hierfür keinen SQL DELETE mehr auf der WRITE Seite aus. Das Ganze sollte jetzt erheblich schneller laufen!
// bereits gelöschte Werte merken
string sWerte = String.Empty;

public object DoWork()
{
  // nicht im Testmodus ausführen
  if (AdapterWrite.OnlyTest == false)
  {
    string sTemp = (string)InValues[0].GetString();
    if (sTemp != null)
    {
      bool bDelete = true;
      char [] c = { ';' };

      foreach(string sWert in sWerte.Split(c))
      {
        if (sWert == sTemp)
        {
          // bereits gelöscht, wird übersprungen
          bDelete = false;
          break;
        }
      }
	
      if (bDelete)
      {
        // Diesen Wert merken für nächsten Durchlauf
        if (sWerte.Length != 0)
          sWerte += ";";
        sWerte += sTemp;
        
      // evtl. Tausendertrennzeichen entfernen
      sTemp = sTemp.Replace(".", "").Replace(",", "");

      // Hier den SQL Tabellen und Feldnamen anpassen
      AdapterWrite.Execute("delete from IHRE_TABELLE where IHR_FELD = " + sTemp);      }
    }
  }

  // 1. Eingangsparameter für weitere Verarbeitung wieder zurückliefern
  return InValues[0].GetValue();
}
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #425

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Moin Robert,
ich glaube es ist mine Schuld, ich hatte mich falsch ausgedrückt. Ich schrieb das Kriterium soll !beispielsweise! das erste Feld aus dem ersten Satz sein. Ich meinte damit , das !nur! der erste Satz und z.B. das erste Feld als Löschkriterium dienen sollen.
Ich teste jetzt dein neues Script und melde mich wieder.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #426

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Leider fällt das Script mit folgender Meldung auf die Nase:
Conversion failed when converting the nvarchar value 'DDIEED' to data type int.
Merkwürdigerweise kommt der Wert 'DDIEED' aus einem ganz anderen Feld.
Könntest du das Script in VB schreiben, C# beherrsche ich leider nicht.
Diese Fehlermeldung kommt immer wieder, auch bei anderen Files, wo es den Wert 'DDIEED' gar nicht gibt. Er behält es offenbar im Speicher......

Ich habe dir die Definition mal angehängt.

Also, ausschließlich der erste Satz und z.B. der Wert des ersten Feldes soll vor dem Befüllen der Zieltabelle als Löschkriterium dienen. Erst !einmal löschen(Kriterium : Feld1 aus dem ersten Satz der Sourcetabelle.), danach befüllen.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #427

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
Hallo Sven,

Hier ein Skript, das nur beim 1. Datensatz die Tabelle leert. Leider auf die schnelle in C#. VB.NET dauert leider etwas länger, liefere ich noch nach.
bool bFirst = true;

public object DoWork()
{
  // nicht im Testmodus ausführen sowie nur einmalig
  if (AdapterWrite.OnlyTest == false && bFirst == true)
  {
    // Nur beim 1. Datensatz ausführen
    bFirst = false;

    string sTemp = (string)InValues[0].GetString();
    if (sTemp != null)
    {      	             
      // evtl. Tausendertrennzeichen entfernen
      sTemp = sTemp.Replace(".", "").Replace(",", "");

      // Hier den SQL Tabellen und Feldnamen anpassen
      AdapterWrite.Execute("delete from IHRE_TABELLE where IHR_FELD = " + sTemp);      
    }
  }

  // 1. Eingangsparameter für weitere Verarbeitung wieder zurückliefern
  return InValues[0].GetValue();
}

PS: Anlagen bitte vorher immer zippen!
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #428

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Immer noch folgender Fehler:
Conversion failed when converting the nvarchar value 'DDIEED' to data type int

Es wird nichts weggeschrieben!
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Löschen von Daten in der Zieltabelle vor dem befüllen 5 Jahre 6 Monate her #430

  • Sven
  • Svens Avatar
  • Offline
  • Senior Member
  • Beiträge: 45
Hi Robert,

suuuuuuuupppppper, jetzt funktioniert es!!!!!!!!!! Die Version 2 baue ich gleich morgen früh in meine Prozesse ein.

Vielen, vielen Dank!

Beste Grüße
Sven

p.s.: Das macht einen exzellenten Service aus!!!!!!!!!!!!!
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.091 Sekunden