Announcement

Collapse
No announcement yet.

Kopieren von Tabellen unterschiedlicher Datenbanken

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

  • #16
    Ich hab's!

    Nachdem ich mir die beiden Artikel auf Mario's Link durchgelesen habe, habe ich jetzt die Lösung für das Problem. Nur falls es jemanden interessiert bzw. jemand das gleiche Problem hat hier meine Lösung:

    Ich habe nach einer Möglichkeit gesucht mit der ich relativ schnell Datensätze zwischen zwei Tabellen unterschiedlicher Datenbanken kopieren kann. Die Datensatzstruktur beider Tabellen ist gleich.

    Komponenten:
    1) ADOConnection = Datenbank aus der kopiert werden soll (Source)
    2) ADOCommand mit ADOConnection aus 1)

    SQL-Statement:

    INSERT INTO Kunden IN '\\ckast\exports\KundenDatenbank\kunden.mdb'
    SELECT *
    FROM Kunden
    WHERE NOT EXISTS
    (SELECT * FROM Kunden as Source IN '\\ckast\exports\KundenDatenbank\Kunden.mdb'
    WHERE Source.Kundennummer = Kunden.Kundennummer)

    Auf diese Weise gleiche ich innerhalb von nicht mal einer Sekunde zwei Datenbanken mit zur Zeit ca. 17.000 Datensätze ab! Das geht sogar schneller als mit zwei TTables unter BatchMove!
    Ungewöhnlich für mich war hier das IN-Kommando. Wird das Sub-Select-Statement nicht angegeben würde das INSERT INTO - Statement versuchen den gleichen Datensatz nochmal einzufügen was zur Exception führt. In diesem Beispiel ist die Kundennummer der Primärschlüssel

    Viele Grüße

    Christop

    Comment


    • #17
      Hallo

      Bitte entschuldige, wenn ich obiges Thema nochmals aufgreife.

      Aber mir sind im Beispiel noch einige Sachen unklar.

      Arbeitest Du mit nur einer ADOConnection? Wo genau ist denn das Ziel festgelegt?

      Ich habe genau dasselbe Problem und würde mich freuen, wenn Du mir weitere Infos (ev. Quellcode) zukommen lassen könntest.

      Besten Dank
      Ben

      Comment


      • #18
        Hi Beni,

        in der letzte Zeit habe ich so viel programmiert dass ich die Hälfte schon wieder vergessen habe. Bin aber wieder fündig geworden:

        Wir haben eine Access-Datenbank für unsere CAD-Anlage. Gleichzeitig habe ich eine Datenbank erstellt in der wir bestimmte Produkte mit Bild und diversen Angaben hinterlegen um sie Kunden zu präsentieren. Nun hatte ich das Problem dass ich Daten aus der CAD-Datenbank in meine Datenbank kopieren. Die Benutzer arbeiten in diesem Fall mit den kopierten Daten, nicht mit den Daten der Original Datenbank.

        Dafür habe ich ein Programm erstellt das jeden Tag die Daten der Original-Datenbank in die zweite Datenbank einliest.

        Ich arbeite mit einer TADOConnection die auf den Netzwerkpfad der Original-Datenbank verweist.

        Beispiel:
        Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=\\Casimir\cad_sys\datacenter\dcenter.mdb;Mo de=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDBatabase Password="";Jet OLEDB:Engine Type=5;Jet OLEDBatabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDBon't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False

        Innerhalb der Original-Datenbank gibt es drei Tabellen die kopiert werden. Die Kopie der Datenbank enthält natürlich die gleiche Tabellenstruktur.

        Hierfür habe ich für jede Tabelle eine TADOCommand angelegt. Der CommandText schaut wie folgt aus:

        insert into company in '\\ckast\exports\displaysteckbrief\dbdisplay.mdb'
        select * from company
        where not exists
        ( select * from company as Artios in
        '\\ckast\exports\displaysteckbrief\dbdisplay.mdb'
        where Artios.companyid = company.companyid)

        Wobei hier '\\ckast\exports\displaysteckbrief\dbdisplay.mdb' die Kopie der Datenbank, also das Ziel, darstellt.Entscheidend war das 'insert into xxxxx' - Statement wobei hier xxxxx bzw 'company' die Tabelle innerhalb der Datenbank darstellt in die geschrieben werden soll.

        Ich hoffe Dir geholfen zu haben

        Viele Grüße

        Christop

        Comment

        Working...
        X