Daten von einer Datenbank in andere Datenbank kopieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Daten von einer Datenbank in andere Datenbank kopieren

    Hi Leute,

    ich arbeite an einem Projekt, von dem es eine Online- und eine Offline-Variante geben soll. Also das Haupt-Modul läuft auf einem Server, auf den über das Internet zugegriffen werden kann.

    Jeder User hat nun auch einen eigenen Laptop, auf dem das PHP-Programm auch läuft. Nun soll er seine Daten, in meinem Fall seine Aufträge (praktisch nur SQL-Einträge), offline eingeben, bearbeiten und löschen könnnen. Das ist nicht das Problem, denn das steht schon.

    Nun soll der User aber seine neuen Aufträge - also Einträge - über das Internet (online) auf den Hauptserver übertragen können. Also müssen die Daten von der lokalen Datenbank des Users in die Haupt-Datenbank übertragen werden. Die Datenbankstruktur ist natürlich genau gleich!

    Ist das möglich? Ich müsste dann ja dann zwei Connections parallel laufen lassen, oder?

    Danke für eure Hilfe!!!

    MfG Lukas

  • #2
    zwei connections is schon richtig
    aber wie stellst Du sicher dass jeder nur wirklich das überschreibt was er kennt?
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Hi MelloPie!

      Vielen Dank erstmal für deine Antwort. Ich verstehe nicht ganz, was du meinst. Könntest du deine Frage vielleicht anders formulieren?

      Ich werde mal erklären, was genau passiert. Also das Projekt ist eine Auftragsverwaltung für Vertreter. Es gibt eine Kunden- und Auftragsverwaltung. Der Vertreter legt einen neuen Kunden an und weist ihm aus einem Shop bestimmte Artikel zu. Nach der Zuweisung speichert er diese Artikel als Auftrag ab. Nun ist dieser Auftrag, der einen oder mehrere Datensätze auf seinem Laptop mit der Anmerkung "noch nicht übertragen" gespeichert. Wenn er nun das nächste Mal zum Haupt-Server verbindet, werden alle Aufträge (Einträge), die "noch nicht übertragen" sind, auf den Hauptserver kopiert und lokal als "übertragen" markiert.

      Ich muss mir natürlich noch überlegen, wie ich das mache, dass er nicht einfach eine eigene Connection zur DB herstellen kann, weil ich ja das Passwort der Datenbank am Laptop für die Verbindung zur Datenbank im Klartext stehen lassen muss. Vielleicht kann ich das mit Zugriffsberechtigungen von Windows regeln lassen. Der Laptop wird nämlich von der Firma, für die ich das Projekt mache, zur Verfügung gestellt und somit können die bestimmen, welche Rechte der Vertreter dann hat.

      Aber danke für jede Anregung von dir!!! Könntest du mir vielleicht in einem Ansatz zeigen, wie ich die Daten von der Datenbank "mbs_vertretername" / Tabelle "mbs_orders_vertretername" in die Datenbank "mbs_main" / Tabelle "mbs_orders_main" übertrage?

      Falls das zuviel verlangt ist, sag's einfach! Ich weiß nicht, wie aufwändig das ist!

      Danke, Lukas

      Kommentar


      • #4
        du könntest auch einen dump der daten machen und per hidden post an
        ein script senden, das die daten wiederum einträgt. wäre imho sicherer
        Kissolino.com

        Kommentar


        • #5
          das Übertragen is ja wohl das kleinste problem
          Nur was wenn einer einen Datensatz verändert und der nächste einen altenb stand auf seinem laüptop hat?
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            nur bei den dump hat er ein problem..... was auch mello indirekt meinte....

            wenn die leute nun alle gleichzeitig die aktuellen onlinedaten saugen, ist z.b. in einer tabelle die id=15 (auto_inc) aktuell.

            nun sind die z.b. 20 mennekes unterwegs und tragen in die tabelle ein. evtl noch in verbindungen mit anderen tabellen, die verbunden sind.

            alle diese 20 leutz haben nun beim ersten insert id=16 usw drin.

            und jetzt kommt der erste und schubst seinen daten zurück auf den server. ok. mag noch klappen.

            jetzt kommt der zweite ... id=16 ist nun auf dem server schon belegt. was nun?

            was passiert mit den id's der verknüpften tabellen?

            usw.



            BTW. *VERSCHIEB* zum BS


            EDIT:
            da war mello ja doch nochmal da....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              mit hidden post hab ich etwas anderes verfolgt (scheint mir einfacher, als
              rechte im windoof zu vergeben)

              ansonsten:
              könnte er für die datensätze eines jeden vertreters
              - einen eindeutigen schlüssel generieren, unabhängig von der id
              - die verknüpfungen innerhalb der tabellen laufen über diesen schlüssel
              - die generelle zuordnung würde über die vertreter-id erfolgen

              damit wäre imho eine id per auto_increment nur noch notwendig, um einen
              einzelnen ds zu identifizieren, wenn überhaupt

              korrigiert mich, wenns schwachfug ist.
              Kissolino.com

              Kommentar


              • #8
                Hi Leute,

                also vielen Dank für eure zahlreichen Antworten. Echt nett!!!

                Also meine erste Frage: Was ist ein Dump? Kenne diesen Begriff nicht...

                Zu dem Problem mit mehreren Zugriffen. Es saugt keiner die Onlinedaten. Die Kundenstammdaten bleiben ja immer nur auf dem Laptop des Vertreters, der den Kunden gewonnen hat. Nur wenn er einen neuen Auftrag hat, legt er ihn an und überträgt ihn dann auf den Hauptserver, damit der Admin die Aufträge an die Produzenten weiterleiten kann. Der Auftrag auf dem Laptop kann ja dann gelöscht werden, da der Vertreter mit dem uploaden des Auftrags die Artikel bestellt.

                Gesaugt wird also nichts. Nur übertragen! Die Tabelle "main_orders" hat eine Auto-ID (auto_increment). Mit dem Auftrags-Datensatz wird die ID des Vertreters und die Auftrags-ID mitgesendet und auf den Haupt-Server miteingetragen. Also ist alles eindeutig. Ich verstehe nicht ganz, was ihr mit den IDs meint.

                Danke nochmals, Lukas

                Kommentar


                • #9
                  Damit hättest du aber immer noch das Problem wenn die ID in der Tab schon existiert.
                  Du kannst die Daten ja aber auch eintragen ohne die ID auf dem Laptop. Somit müsste dieses Problem ja eigentlich aus der Welt sein.
                  DUMP = Backup/Kopie
                  mfg
                  Günni


                  Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                  Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                  Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                  City-Tiger - Online durch die Straßen tigern...

                  Kommentar


                  • #10
                    ich verstehe nicht genau, was du mit der ID meinst. Beispiel:

                    Auto-ID ist derzeit 121. Vertreter 1 überträgt 5 Datensätze, somit 122, 123, 124, 125, 126. Vertreter 2 überträgt nun 3 Datensätze, somit 127, 128, 129. Die Auftrags-ID des Auftrags am Laptop ist eine andere, als die Auto-Increment. Die Auftrags-ID ist nur eine Nr., damit man die einzelnen Artikel als Auftrag zusammen halten kann. Diese setzt sich z.B. aus dem Benutzernamen, z.B. "huber_order_nr_128" zusammen und ist somit eindeutig. Die Auto-Increment der Main-Datenbank ist ja eine eigene.

                    Korrigiere mich bitte, wenn ich einen Denkfehler übersehe.

                    Könnte mir vielleicht bitte mal jemand in einem Ansatz zeigen, wie ich die Daten von der Datenbank "mbs_vertretername" / Tabelle "mbs_orders_vertretername" in die Datenbank "mbs_main" / Tabelle "mbs_orders_main" übertrage? Wäre super, danke!

                    Ich hoffe, dass das nicht zu aufwändig ist!!!

                    Danke, Lukas

                    Kommentar


                    • #11
                      Hallo!

                      Als erstes musst Du wirklich höllisch aufpassen wegen den ID's, wie meine Vorredner schon sagten, da kann leicht was schiefgehen.......
                      Bzw., was passiert wenn in der Haupt-DB mal neue Artikel, also Stammdaten vorhanden sind, die müssen doch dann auch auf die Laptops der Vertreter übertragen werden...naja, aber das ist nur nebensächlich.
                      Zu Deinem Problem:
                      Wie Du schon erkannt hast, brauchst Du 2 Connects. ABER: Deine Hauptdatenbank MUSS Zugriffe von außen erlauben, was eine Großteil der Provider unterbindet.
                      Ich würde zuerstmal die Daten der lokalen DB, die noch nicht übertragen sind selektieren, also so in etwa: "SELECT * FROM mbs_orders_vertretername WHERE status=-1"; // =nicht übertragen
                      Dann eine while-Schleife durchlaufen und die Daten mit INSERT in die DB-Tabelle "mbs_orders_main" einfügen, also mittels des 2. Connects!

                      Was ich auch noch empfehlen würde, wäre den Primärschlüssel der "mbs_orders_main" nicht einer id zuzuweisen, sondern der Primärschlüssel sollte sich aus der Vertreter-ID und dessen Auftragsnummer zusammensetzen. Damit wäre gewährleistet, daß jeder Eintrag in der "mbs_orders_main" eindeutig identifizierbar wäre. Außerdem könnten die Vertreter dann auch Auftragsänderungen in die Haupt-DB übertragen, was nach ursprünglicher Methode nicht möglich wäre.

                      Aber ich denke, das Hauptproblem wird der Zugriff von außen auf die Haupt-DB sein, solltest Dein Auftraggeber nur bei einem Provider hosten.

                      So, viel Glück dann noch!!!

                      Gruß,
                      Lugi.

                      Kommentar


                      • #12
                        @lugi27

                        Hi & vielen Dank für deine Antwort!

                        Das mit den IDs ist jetzt mal das kleinste Problem. Dafür habe ich mir schon eine Logik ausgedacht und werde sie demnächst testen.

                        Das mit dem Unterbinden von Connections von außen habe ich gar nicht bedacht. Das ist natürlich schlimm. Hast du oder vielleicht jemand anders eine Lösung dafür?

                        Wie wäre es, wenn ich

                        1. einen eigenen Server bei einem Provider miete oder
                        2. einen eigenen Server zu Hause hoste und über I-NET zugänglich mache?

                        Kann ich dann steuern, ob man eine Connection aufbauen kann?

                        Werde mal bei meinem Provider nachfragen.

                        Danke für deine Hilfe!
                        Grüße Lukas

                        Kommentar


                        • #13
                          @skalu

                          ich will dir ja nicht zu nahe treten, aber kann es sein, dass der job dich
                          etwas überfordert? ich weiss ja nicht, wie sensibel die daten sind und
                          welche erwartungshaltung das unternehmen an dich hat bzw. welche
                          standards die gewohnt sind, würde dir aber trotzdem empfehlen, den
                          job abzugeben bzw. einen professionellen freelancer zu beauftragen
                          (damit mein ich nicht mich, bevor jemand auf falsche gedanken kommt).

                          nimms als gut gemeinten rat.
                          Kissolino.com

                          Kommentar


                          • #14
                            Es wäre möglich die Daten Lokal in einer Datei zu speichern, diese dann hochzuladen und über ein Skript in die DB einfügen.
                            Es wäre aber auch ebenfalls möglich ein extra Programm zu schreiben das dies übernimmt. Die Daten eintragen müssen aber auf alle Fälle über ein Skript gehen, da der zugriff von außen ja verboten ist.
                            Außer man würde ein Programm schreiben, dass auf dem Server ausgeführt wird und dies dann macht. In C++ oder Java...
                            mfg
                            Günni


                            Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                            Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                            Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                            City-Tiger - Online durch die Straßen tigern...

                            Kommentar


                            • #15
                              @Wurzel

                              Ich fasse das nicht böswillig auf. Danke für deine Sorge, aber ich denke, dass ich das hinbekomme!

                              @Günni

                              Ich habe gerade bei meinem Provider nachgefragt und es ist möglich, den externen Zugriff freizuschalten.

                              @all

                              Hat vielleicht jemand eine Idee, wie ich es verhindern kann, dass ich das Datenbankpasswort für den Haupt-Server im Klartext am Laptop stehen haben muss?

                              Tnx 4 Help!
                              Grüße Lukas

                              Kommentar

                              Lädt...
                              X