Announcement

Collapse
No announcement yet.

StoredProcedure dupliziert ersten Datensatz!?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StoredProcedure dupliziert ersten Datensatz!?

    Hallo miteinander. Ich habe da ein Problem mit einer SP, die mehrere Datensätze in eine Ziel-Tabelle einfügen soll. Diese läuft auch problemlos durch, jedoch werden die ersten aus der Quell-Tabelle gelesenen Datensätze dupliziert. Warum? Der Code sieht folgendermaßen aus:<br>
    <pre>
    procedure TwzPlandatenCopy.Update_P_1(Sender: TObject);
    begin
    PlandatenQ.Open;
    PlandatenQ.First;
    while PlandatenQ.EOF = False do begin
    with Plandaten_CPY do begin
    ParamByName('JAHR').AsInteger := VariantenJAHR.Value;
    ParamByName('VARIANTE').AsInteger := VariantenVARIANTE.Value;
    ParamByName('TARIFERH').AsFloat := VariantenTARIFERH.Value;
    ParamByName('NUMMER').AsString := PlandatenQNUMMER.Value;
    ParamByName('GBESTANDTEIL').AsInteger :=
    PlandatenQGBESTANDTEIL.Value;
    ParamByName('ERH').AsString := PlandatenQERH.Value;
    ParamByName('JAN').AsFloat := PlandatenQTJAN.Value;
    ParamByName('JANZU').AsFloat := PlandatenQTJANZU.Value;
    ParamByName('FEB').AsFloat := PlandatenQTFEB.Value;
    ParamByName('FEBZU').AsFloat := PlandatenQTFEBZU.Value;
    ParamByName('MAR').AsFloat := PlandatenQTMAR.Value;
    ParamByName('MARZU').AsFloat := PlandatenQTMARZU.Value;
    ParamByName('APR').AsFloat := PlandatenQTAPR.Value;
    ParamByName('APRZU').AsFloat := PlandatenQTAPRZU.Value;
    ParamByName('MAI').AsFloat := PlandatenQTMAI.Value;
    ParamByName('MAIZU').AsFloat := PlandatenQTMAIZU.Value;
    ParamByName('JUN').AsFloat := PlandatenQTJUN.Value;
    ParamByName('JUNZU').AsFloat := PlandatenQTJUNZU.Value;
    </pre>
    und so weiter...<pre>

    Plandaten_CPY.Prepare;
    Plandaten_CPY.ExecProc;
    end;
    PlandatenQ.Next;
    end;
    PlandatenQ.Close;
    end;</pre>
    Wer weiß Rat? Bin für jede Hilfe dankbar.

  • #2
    1. Die Prepare-Anweisung würde ich vorziehen und nur einmal Ausführen

    2. Am Ende der Schleife fehlt noch eine UnPrepare

    3. Wieso läßt Du diese Kopieraktion nicht über eine SQL-Anweisung ablaufen:

    INSERT INTO ZielTabelle(Feld1, Feld2, ...) AS SELECT Feld1_1, Feld2_2, ... FROM UrsprungsTabell

    Comment


    • #3
      Danke für den Hinweis mit Prepare und Unprepare.
      Ich war der Auffassung, eine StoredProc wäre die elegantere Lösung. Es werden ja Sätze aus der Tabelle Plandaten in die Tabelle Plandaten kopiert, wobei lediglich die Primärschlüssel neu geschrieben werden (Varianten). Kann ich denn, wenn ich Deinem Vorschlag folge, irgendwie eine entsprechende where-Bedingung setzen

      Comment


      • #4
        Danke für den Hinweis mit Prepare und Unprepare. Ich war der Auffassung, eine StoredProc wäre die elegantere Lösung. Es werden ja Sätze aus der Tabelle Plandaten in die Tabelle Plandaten kopiert, wobei lediglich die Primärschlüssel neu geschrieben werden (Varianten). Bei der Verwendung einer SQL-Anweisung gibt's Probleme mit Foreign Keys.

        Nochmal zur Verdeutlichung:
        Die Tabelle/Query "Plandaten" enthält Detailsätze. Wenn ich nach der Kopieraktion in der Mastertabelle/Query den ersten Datensatz auswähle, stelle ich fest, daß in den Detaildaten (Plandaten) der erste Datensatz doppelt vorhanden ist. Alles andere ist OK

        Comment


        • #5
          Sorry, weis auf die schnelle auch keinen Tipp/Hinweis, was diesen Fehler verursachen könnte

          Comment

          Working...
          X