Announcement

Collapse
No announcement yet.

Daten von einer Tabelle in eine Andere

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

  • Daten von einer Tabelle in eine Andere

    Hallo,
    ich möchte Daten aus einer Tabelle in eine andere übertragen, verzweifel aber fast. Die Datenbanken sind vom Format Paradox 7 und ich nutze für die SQL-Anweisungen den SQL-Explorer von Borland. Die beiden betreffenden Felder sind vom Typ und Grösse identisch. Ich gehe dabei mit folgender Anweisung vor:

    insert into dbo_KdSt2 (Ansprechpartner1)
    select nachname
    from dbo_AspKdst a
    where a.KdNr = KdNr;

    Problem dabei ist, das die Daten nicht den entsprechenden Kundennummern zugeordnet werden, sondern es werden neue Sätze angelegt und unten angefügt. Muss für einen solchen Vorgang die Update-Funktion verwendet werden oder liege ich mit Insert richtig?
    Für jede noch so kleine Hilfe danke ich im Voraus.
    Gruss
    Dirk Schmitz

  • #2
    Hallo Dirk,

    wenn Du insert verwendest ist es normal das ein neuer Datensatz angelegt wird. Wenn Du bestehende Daten manipulieren willst solltest Du update verwenden:
    <pre>
    update dbo_KdSt2 set Ansprechpartner1 = (
    select nachname from dbo_AspKdst a where a.KdNr = KdNr)
    </pre>
    die Unterabfrage auf die Tabelle dbo_AspKdst darf dabei nur einen und muß einen Datensatz zurückliefern ansonsten gibt es einen Fehler. Ist dies durch die Datenstruktur nicht sichergestellt müßtest Du die Abfrage noch etwas erweitern, so in der Form:
    <pre>
    update dbo_KdSt2 set Ansprechpartner1 = (
    select distinct nachname from dbo_AspKdst a where a.KdNr = KdNr)
    where dbo_KdSt2.KdNr in (select b.KdNr from dbo_AspKdst b)
    </pre>

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,
      erst mal danke für Deine prompte Antwort. Ich habe beide Deiner Versionen ausprobiert, obwohl es sich um mehrere Datensätze handelt. Die 2. wäre dann die Richtige. Beide Versionen rufen denselben Fehler hervor. Dieser lautet: BDE-Fehler 11954, Unterabfrage mit einer Zeile erzeugt mehr als eine Zeile.
      Hast Du vielleicht noch eine andere Idee?
      Gruss
      Dir

      Comment


      • #4
        Hallo Dirk,

        du mußt auf alle Fälle sicherstellen das die Unterabfrage nur <b>einen</b> Datensatz zurückliefert. Da ich davon ausgegangen bin, das zu einer Kdnr nur ein Name gehört sollte das mit select distinct sichergestellt sein. Anscheinend gibt es aber zu einer a.KdNr mehrere Nachname. Für diesen Fall mußt Du ein zusätzliches Kriterium heranziehen um in der Unterabfrage mit where einen <b>eindeutigen</b> Datensatz kenzeichnen zu können. (z.B. alle zu Übernehmenden Datensätze besitzen ein Feld 'Status' = 1 - dann könnte man ... where a.KdNr = KdNr and a.Status = 1 ... versuchen.

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hallo Falk,
          es ist richtig, dass zu einer KdNr mehrere Namen existieren. Die Tabelle dbo_AspKdSt ist eine Tabelle, in der verschiedene, teilweise bis zu 10 Ansprechpartner enthalten sind (z.B. KdNr 5 hat 6 Ansprech-
          partner). Die 2. Tabelle ist der Kundenstamm. Um Redundanzen zu vermeiden, will ich die beiden Tables verschmelzen. Eigentlich steckt hinter meiner Formulierung noch ein logischer Fehler. Ist es per SQL möglich, den 1. gefundenen Namen aus AspKdSt in das Feld Ansprechpartner1 in Tabelle KdSt, den 2. gefundenen Namen in das Feld Ansprechpartner2 in Tabelle KdSt usw. zu übertragen oder verlange ich da zuviel von SQL?
          Es handelt sich hierbei um über 1000 Datensätze, die ich nach Möglichkeit nicht per Hand übertragen möchte.
          Oder wäre es eine Möglichkeit, eine komplette, neue und leere Tabelle anzulegen und diese beiden dorthin zu übertragen?
          Ich hoffe, ich konnte Dir auf die Schnelle das Problem verständlich machen.
          Gruss
          Dir

          Comment


          • #6
            Hallo Dirk,

            das was du vorhast ist mit SQL nicht machbar. SQL ist eine Abfrage- und keine Scriptsprache. Für dein Vorhaben mußt du dich dann eines Sciptes für deinen DB-Server bedienen oder du schreibst dir in Delphi ein kleines Tool was dir zu jedem Datensatz in KdSt die zugehörigen Ansprechpartner aus dbo_AspKsSt raussucht und die gewünschten Felder füllt. Da bist Du wesentlich flexibler. Und bei 1000 Datensätzen sollte es zeitlich keine Rolle spielen ob ein kleines Tool die Datensätze umschaufelt oder das Ganze direkt auf dem Server läuft.

            Gruß Fal
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hallo,
              schade, hatte ich mir fast gedacht. Wäre auch zu einfach gewesen?
              Das Tool in Delphi ist eine gute Idee.
              Nochmals Vielen Dank.

              Gruss
              Dirk

              P.S. Nicht schlecht, dieses Forum. Ist ja fast so schnell wie Chatten oder hatte ich nur Glück??

              Comment


              • #8
                Das Forum ist schon gut :-) aber heute hattest Du auch Glück ;-
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Geht nicht gibts nich, wollte och gerade sage, aber da Paradox die SQL Datenbank ist, geht es wohl tatsächlich nicht.

                  Warum willst Du die Architektur denn Ändern, die normalisierten Ansprechpartner sind doch besser als eine Widerholgruppe im Hauptsatz, oder?

                  Welche Redundanzen sind denn drin?

                  Ggf. würde ich das Design andern ändern

                  Comment

                  Working...
                  X