Announcement

Collapse
No announcement yet.

zugriff auf access2000 datenbanken

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

  • zugriff auf access2000 datenbanken

    hallo,
    ich habe ein problem.
    ich will ein programm schreiben welches aus einer access2000 datenbank die tabellenblätter samt inhalt in eine zweite datenbank kopiert bzw. verschiebt.

    leider reicht mein wissen über ado o.ä. nicht soweit um das programm zu verwirklichen!

    desshalb wollte ich euch fragen ob ihr möglichkeiten kennt bzw. tutorials in diese richtung habt (oder wisst wo welche zu finden sind)?!

    gruß martin

  • #2
    Hallo,

    das folgende Beispiel demonstriert, wie man mit Hilfe der Jet Engine eine Tabelle (Bsp: Customer) aus einer ACCESS-Datenbank in die verschiedenen Formate exportieren kann:

    <pre>
    <b>procedure</b> TForm1.ButtonExportClick(Sender: TObject);
    <b>resourcestring</b>
    cSQL1 = <font color="#9933CC">'SELECT * INTO [Export.%s] IN &quot;C:\Temp&quot; &quot;%s;&quot; FROM Customer'</font>;
    cSQL2 = <font color="#9933CC">'SELECT * INTO %s IN &quot;C:\Temp\%s&quot; &quot;Excel 8.0;&quot; FROM Customer'</font>;
    cSQL3 = <font color="#9933CC">'SELECT * INTO [%s] IN &quot;C:\Temp\%s&quot; FROM Customer'</font>;
    <b>var</b>
    sSQL : <b>String</b>;
    iRows: Integer;
    <b>begin</b>
    <b>case</b> RadioGroupExport.ItemIndex <b>of</b>
    0 : sSQL := Format(cSQL1, [<font color="#9933CC">'dbf'</font>, <font color="#9933CC">'dBASE 5.0'</font>]);
    1 : sSQL := Format(cSQL1, [<font color="#9933CC">'db'</font>, <font color="#9933CC">'Paradox 5.x'</font>]);
    2 : sSQL := Format(cSQL1, [<font color="#9933CC">'htm'</font>, <font color="#9933CC">'HTML Export'</font>]);
    3 : sSQL := Format(cSQL1, [<font color="#9933CC">'txt'</font>, <font color="#9933CC">'Text'</font>]);
    4 : sSQL := Format(cSQL2, [<font color="#9933CC">'Tabelle1'</font>, <font color="#9933CC">'Export.xls'</font>]);
    5 : sSQL := Format(cSQL3, [<font color="#9933CC">'Cust'</font>, <font color="#9933CC">'Test1.MDB'</font>]);
    <b>end</b>;
    ADOConnection1.Connected := True;
    ADOConnection1.Execute(sSQL, iRows);
    ADOConnection1.Connected := False;
    ShowMessage(Format(<font color="#9933CC">'Es wurden %d Datensätze exportiert.'</font>, [iRows]));
    <b>end</b>;

    </pre>

    Wenn die Tabellen aus einer ACCESS-Datenbank in eine andere ACCESS-Datenbank kopiert werden sollen, darf die <i>Zieltabelle</i> noch nicht in dieser Datenbank vorhanden sein. Die Jet Engine kann diese Aufgabe direkt über SQL erledigen:

    SELECT * INTO [<i>Zieltabelle</i>] IN "C:\<i>Zielverzeichnis</i>\<i>Zieldatenbank</i>" FROM <i>Quelltabelle</i>

    Die TADOConnection-Komponente ist in diesem Fall mit der <i>Quelldatenbank</i> verbunden

    Comment


    • #3
      hi andreas,
      ich werd es gleich mal ausprobieren!

      vorher noch eine frage: bedeutet "Die Jet Engine kann diese Aufgabe direkt über SQL erledigen" das ich einen SQL server brauche?

      oder ist damit nur die verfahrensweise gemeint

      Comment


      • #4
        hallo ich nochmal,

        neue frage: wenn aber die tabelle in der zieldatenbank schon vorhanden ist.. was mache ich, um dann trotzdem die inhalte der quelltabelle in die zieltabelle zu bekommen?

        oder: was ist wenn ich die tabelle in der zieldatenbank lösche und dann aus der quelldatenbank einfüge? gehen dann alle beziehungen mit den anderen tabellen, etc. verloren?

        danke im voraus für antworten

        gruss marti

        Comment


        • #5
          Hallo,

          &gt;..was mache ich, um dann trotzdem die inhalte der quelltabelle in die zieltabelle zu bekommen?

          Was in jedem Fall geht, ist der Weg über zwei aktive Datenbankverbindungen. Die eine Verbindung liest die Datensätze der Quelltabelle in einer Schleife aus, und die zweite Verbindung kopiert die Inhalt aller Spalten der Quelltabelle (DataSet1) in die Zieltabelle (DataSet2):
          <pre>

          <b>var</b>
          iFields : Integer;
          i : Integer;
          <b>begin</b>
          ADODataSet2.Append;
          <b>with</b> ADODataSet1 <b>do</b>
          <b>begin</b>
          iFields := FieldCount - 1;
          <b>for</b> i := 0 <b>to</b> iFields <b>do</b>
          <b>if</b> RecordSet.Fields[i].Properties[<font color="#9933CC">'ISAUTOINCREMENT'</font>].Value = False <b>then</b>
          ADODataSet2.FieldByName(Fields[i].FieldName).Assign(
          FieldByName(Fields[i].FieldName));
          <b>end</b>;
          ADODataSet2.Post;
          StatusBar1.SimpleText := <font color="#9933CC">'Datensatz in die 2. Tabelle kopiert'</font>;
          <b>end</b>;

          </pre&gt

          Comment


          • #6
            hi andreas,
            danke für den tipp, nur leider funktioniert es bei mir nicht richtig!

            was brauche ich ausser den DataSet´s noch (z.b. ADOConnection oder ADOTable oder ...)?

            gruss marti

            Comment


            • #7
              hi,
              ich habs soweit erstmal hinbekommen.

              ein problem habe ich leider noch, der meckert bei vorhandenen datensätzen rum ..
              meine frage: wie kann ich das umgehen und sagen das die funktion nur datensätze kopiert welche noch nicht vorhanden sind?

              bitte um antwort

              gruss marti

              Comment


              • #8
                hi,

                wäre schon nicht schlecht wenn mir einer antworten könnte..

                weil ich habs inzwischen aufgegeben, brauche dieses programm aber trotzdem! :/

                gruß marti

                Comment


                • #9
                  Hallo,

                  nicht ohne Grund verkaufen viele Firmen für teueres Geld spezielle Software für die Replikation von Datenbeständen :-)

                  Es steht immer noch der Weg offen, vorher in der Zieltabelle nachzusehen, ob es bereits einen Datensatz mit diesem Primärschlüsselwert gibt. Wenn ja, muss man den Datensatz aktualisieren

                  Comment

                  Working...
                  X