Re: Nachtrag 2 - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Sander (8133 Beiträge) am Donnerstag, 7.April.2005, 14:15.
    Re: Nachtrag 2

      delete $_put{Feldname};


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Thomas H. (180 Beiträge) am Montag, 4.April.2005, 21:22.
    Datensatz kopieren

      Hallo,

      da ich öfters ähnliche Eingaben mache, möchte ich eine Kopierfunktion einbauen. Es soll also ein bestehender Datensatz in die gleiche Db kopiert werden. Aus 2 Forumsbeiträgen habe ich mir den nachstehenden Code zusammengebastelt. Im Prinzip scheint er auch zu funktionieren, aber der kopierte Datensatz bekommt jetzt die gleiche ID Nummer.

      Zwei gleiche ID Nummern sollen natürlich nicht sein.
      Irgendwas stimmt nicht.

      Gruß
      Thomas



      <perl>
      get "Id==$Id", "dbname";
      while (get_next("dbname"))
      {
      %_put=%_loop;
      $_put{_amount}=1;
      put undef,"dbname";
      }
      </perl>
      

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Montag, 4.April.2005, 21:30.
    Nachtrag

      Ich habe jetzt noch einen Fehler entdeckt.

      Die Übergabe der ID scheint auch nicht zu funktionieren. Das Kopieren an sich funktioniert nur dann, wenn ich z.B. zum Test

      get "Id==50", "dbname";
      
      etc.

      eingebe. Gebe ich aber

      get "Id==$Id", "dbname";
      

      ein, funktioniert auch die "Kopierung" nicht.

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Montag, 4.April.2005, 21:44.
    Nachtrag 2

      Kommando zurück. :-)

      Das mit der Übergabe der ID funktioniert.
      Ich hatte einen Denkfehler.

      Aber das Problem mit den 2 gleichen ID Nummern ist immer noch.

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Dienstag, 5.April.2005, 08:35.
    Re: Nachtrag 2

      Außer Id alle anderen Werte aus der Id vom %_loop ins %_put übernehmen.

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Dienstag, 5.April.2005, 08:46.
    Re: Nachtrag 2

      Hallo Ruben,

      irgendwie stehe ich noch auf dem Schlauch.
      Wie schließe ich die Übernahme der ID aus?




      Thomas

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Dienstag, 5.April.2005, 09:45.
    Re: Nachtrag 2

      mhm - günstiger in diesem Falle wäre das gesamte Key/WertPaar aus dem %_get löschen, einfach so:
      delete $_put{Id}

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Dienstag, 5.April.2005, 10:07.
    Re: Nachtrag 2

      Also wenn ich´s so mache bekomme ich eine Fehlermeldung.
      Warscheinlich steht´s an der falschen Stelle.


      <perl>
      get "Id==$Id", "datenbank";
      while (get_next("datenbank"))
      {
      %_put=%_loop;
      $_put{_amount}=1;
      delete $_put{Id}
      put undef, "datenbank";
      }
      </perl>
      

      Kann man den nicht einfach den Wert der ID um 1 erhöhen, oder ist die Vergabe der ID Nummern in bp nicht beeinflussbar?

     Antworten

    Beitrag von hermpelr (4 Beiträge) am Dienstag, 5.April.2005, 10:18.
    Re: Nachtrag 2

      Semikolon zum Abschluss der Befehlszeile!

     Antworten

    Beitrag von mike (12 Beiträge) am Dienstag, 5.April.2005, 10:20.
    Re: Nachtrag 2

      Die ID um 1 erhöhen wäre warscheinlich keine gute Idee,
      selbst wenn es es geht.
      Das würde dann nur funktionieren, wenn Du den letzten Datensatz kopierst, aber was ist, wenn es eine andere ID ist? Dann überscheibst Du möglicherweise eine Andere.

      Das Problem mit dem Kopieren habe ich auch. Habe aber auch noch keine Lösung dafür gefunden.

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Dienstag, 5.April.2005, 10:28.
    Es funktioniert :-) Das Semikolon war´s mal wieder

      Danke Ruben,

      Gruß
      Thomas

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Dienstag, 5.April.2005, 10:33.
    Re: Nachtrag 2

      Mit dem Erhöhen der ID ist auch kein Problem, du musst nur vorher die letzte vergebene holen und dann halt die nächsthöhere vergeben.
      Das ist aber Doppelt gemoppelt, weil genau das baseportal intern beim Speichern (also Ausführung von put) macht.
      (BasePortal nutzt ja leider keine eineindeutigen Id's sondern nur eindeutige, das heisst, dass freigewordene Id's u.U. wieder neu vergeben werden, wenn die freigegebenen zufälligerweise die letzte[größte] war...).
      Deshalb also vom zu kopierenden Datensatz(hash) einfach die Id entfernen, das ist das gleiche als wenn man in nem Formular nen neuen Datensatz eingibt. Feldvariablen haben Inhalte, durch das feldname:= wandern sie in den put-Hash, dieser wird aktiviert durch den Wert 1 des Elements _amount und führt dann das Speichern mit Vergabe der neuen ID aus. Wenn ne ID vorhanden ist, dann wird die einfach mit abgespeichert und es kommt zu Problemen.
      Es ist also "nur" darauf zu achten, dass KEINE Id mit beim Speichern im Put-Hash vorhanden ist. Probleme wird es natürlich bei dieser einfachen Version mit Dateifeldern geben, wie die Dateinamen da behandelt werden, weiss ich nicht, da mmüsste sich Christoph mal dazu äussern.
      Aber ansonsten ist das schon o.k. so - was soll da nicht funktionieren?

     Antworten

    Beitrag von Thomas H. (180 Beiträge) am Dienstag, 5.April.2005, 10:55.
    Re: Nachtrag 2

      Stimmt, wenn ich die letzte Datensatz ID hole, dann kann ja nichts überschrieben werden.


      Ich habe das Script mal ins Glossar gestellt. Zum Wiederfinden.
      Ich glaube das Problem kommt öfters vor.



      Thomas

     Antworten

    Beitrag von Bernd (213 Beiträge) am Donnerstag, 7.April.2005, 14:10.
    Re: Nachtrag 2

      Hallo,

      das mit der Kopierfunktion ist ne tolle Sache.
      Gibt es auch die Möglichkeit, einen Eintrag zu kopieren, aber bestimmte
      Felder leer zu lassen, bzw. deren Inhalte nicht zu kopieren?



      <perl>
      get "Id==$Id", "datenbank";
      while (get_next("datenbank"))
      {
      %_put=%_loop;
      

      $_put{_amount}=1;
      delete $_put{Id};
      put undef, "datenbank";
      }
      </perl>
      

     Antworten

    Beitrag von Sander (8133 Beiträge) am Donnerstag, 7.April.2005, 14:15.
    Re: Nachtrag 2

      delete $_put{Feldname};

     Antworten

    Beitrag von Bernd (213 Beiträge) am Donnerstag, 7.April.2005, 15:46.
    Re: Nachtrag 2

      Danke

     Antworten

    Beitrag von richard (1187 Beiträge) am Dienstag, 5.April.2005, 09:55.
    Re: Datensatz kopieren

      Und 2 Dezimalstellen sind auch dabei.

     Antworten


     
 Liste der Einträge von 24901 bis 25051:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.07s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!