Announcement

Collapse
No announcement yet.

TBatchmove + ADO???

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

  • TBatchmove + ADO???

    1)
    Ich versuche Daten zu <b>importieren und auszulagern</b> , aber mit <b>TBatchmove</b> kann ich nicht auf <b>TADOTable oder TADOQuery</b> zugreifen?

    Wieso?? Wie kann ich sonst importieren??????

    2)
    Mit dem <b>Microsoft Jet 4.0 OLE DB Provider</b> kann ich nicht auf Access 1.0/1.1/2.0 zugreifen oder?? NUR AUF ACCESS 2000 oder?

  • #2
    Hallo,

    zur Frage 1: <br>
    Mit ADO ist TBatchMove völlig überflüssig, da alle Fähigkeiten bereits in den ADO-Objekten vorhanden sind. Das folgende Beispiel demonstriert die Vorgehensweise für den Export in eine dBASE- und Paradox-Tabelle:
    <pre>
    procedure TForm1.ButtonParadoxClick(Sender: TObject);
    begin
    FExportSQL := 'SELECT * INTO [Export.db] IN "C:\Temp" "Paradox 5.x;" FROM Customer';
    DoExport;
    end;

    procedure TForm1.ButtondBASEClick(Sender: TObject);
    begin
    FExportSQL := 'SELECT * INTO [Export.dbf] IN "C:\Temp" "dBASE 5.0;" FROM Customer';
    DoExport;
    end;

    procedure TForm1.DoExport;
    var
    iRows : Integer;
    begin
    ADOConnection1.Connected := True;
    ADOConnection1.Execute(FExportSQL, iRows);
    ADOConnection1.Connected := False;
    ShowMessage(Format('Es wurden %d Datensätze exportiert.', [iRows]));
    end;
    </pre>
    Der gleiche Weg geht auch beim Import, indem die Daten direkt aus der Originalquelle (Textdatei, XLS-Datei, Datenbank etc.) ausgelesen werden.

    zu Frage 2: <br>
    Auch mit ADO kann man flexibel die verschiedenen JET ENGINE-Versionen ansprechen, indem die geweils benötigte Version im ConnectionString angegeben wird. Im MDAC-SDK sind die Details zur Eigenschaft <b>OLEDB:Engine Type</b> zu finden, der folgende Eintrag erzwingt eine ACCESS2000-Datenbank: <i>OLEDB:Engine Type=5</i>.<br>
    Allerdings ist das <b>nur dann erfolgreich</b>, wenn diese anderen Versionen bereits auf diesem Rechner installiert waren, diese Versionen gehören <b>nicht</b> zu MDAC und werden daher nur von den Microsoft-Anwendungsprogrammen (ACCESS, Office etc.) installiert

    Comment


    • #3
      Welche Möglichkeiten gibt es dann?

      Kann ich nicht die benötigten Treiber für Access1.1 mit installieren damit ich dann auf meine "alten" data.mdb's zugreifen kann um diese dann zu importieren(in Access2000)??

      Ich versuche die ganze Zeit irgendwie auf meine Access1.1 mdb's zuzugreifen, aber ich schaffe es nicht, es muß doch einen Zugriff auf Access1.1 geben!!!

      Eine Möglichkeit gibt es vielleicht, wenn ich in einer "ältere" Delphi Version ein Programm schreibe, das die Daten(Access1.1) in Paradox speichert und mein Program ruft dann die Paradoxtabelle auf, das sollte gehen? Oder können ältere Delphiversionen noch gar nicht auf Access1.1 zugreifen?????

      Comment


      • #4
        Die Kunden haben hoffentlich <b>KEIN </b> ACCESS1.1 installiert!!!
        außerdem gibt es das kaum noch <b> schätze ich </b&gt

        Comment


        • #5
          Habe Probleme mit dem

          <pre><b>FExportSQL := 'SELECT * INTO [Export.dbf] IN "C:\Temp" "dBASE 5.0;" FROM Customer'; </b></pre>


          Wenn ich eine Access2000 data.mdb exportieren möchte:

          <pre><b>FExportSQL := 'SELECT * INTO [Name.mdb] IN "C:\Test" "Access2000;" FROM name; </b></pre>

          so geht das nicht oder

          Comment


          • #6
            Hallo,

            die Zeichenkette für das Zielformat legt der OLE DB-Provider fest, in diesem Fall der <b>JET 4.0 OLE DB-Provider</b>. Im MDAC-SDK ist die umfangreiche Tabelle mit alle Format-Zeichenketten zu finden, die je nach verwendeter MDAC-Version (2.1 bzw. 2.5) erlaubt ist. Einen Eintrag für ACCESS-Datenbanken gibt es dort jedoch nicht

            Comment


            • #7
              Sorry aber das verstehe ich nicht.

              Also kann ich keine Access importieren oder wie

              Comment


              • #8
                Hallo,

                auch ein Export in eine ACCESS-Datenbank ist möglich, allerdings geht ACCESS schon immer eigene Wege ;-) <br>
                Beim Export in eine ACCESS-Datenbank muss die <b>leere</b> MDB-Datei bereits vorhanden sein, nur die Tabelle wird mit den Daten neu angelegt. Das folgende Beispiel exportiert die Tabelle CUSTOMER aus der Delphi-Beispieldatenbank DBDEMOS.MDB in die Exporttabelle CUST der Datenbank TEST1.MDB:
                <pre>
                procedure TForm1.Button1Click(Sender: TObject);
                var
                sSQL : String;
                iRows : Integer;
                begin
                sSQL := 'SELECT * INTO [Cust] IN "C:\Temp\Test1.MDB" FROM Customer';
                ADOConnection1.Connected := True;
                ADOConnection1.Execute(sSQL, iRows);
                ADOConnection1.Connected := False;
                ShowMessage(Format('Es wurden %d Datensätze exportiert.', [iRows]));
                end;
                </pre&gt

                Comment


                • #9
                  kann ich so (mit SQL) jetzt auch auf Access1.1 zugreifen um diese zu importieren?

                  Comment


                  • #10
                    Ja mit Hilfe der TADODataSet sehe ich meine data.mdb,..

                    Ich sehe die Felder in den einzelnen Tabellen, aber ich kann sie nicht öffnen.

                    <pre>
                    'SELECT * from T Person '
                    </pre>

                    Die Tabelle heißt T_Person in Access1.1, wenn ich aber Delphi die Felder hinzufügen lassen dann schreibt er mir 'SELECT * from T Person

                    Aber ich bekomme eine Fehlermeldung "Das Microssoft Jet-Datenmodul findet die Eingangstabelle oder Abfrage'T' nicht.Stellen Sie sicher das sie existiert... "

                    <b>1)Wie greife ich darauf zu?</b>

                    <B>2)Und wie importiere ich sie in meine Access2000 Datenbank???</b&gt

                    Comment


                    • #11
                      zu <b> 1) </b>
                      also ich mußte Command Type auf adCmsTable setzen dann kann ich mal die Daten in einen DBGrid anzeigen lassen.

                      zu <b> 2) </b> WIE IMPORTIERE ICH DIE JETZT?

                      Comment


                      • #12
                        Hallo,

                        wenn die Daten über TADODataSet als Datenmenge geöffnet und im DBGrid angezeigt werden, sollte folgende Abfrage in einer zweiten TADODataSet-Instanz zum Erfolg führen:

                        sSQL := 'SELECT * INTO [Import] IN "C:\Temp\Test.MDB" FROM [T_Person]';

                        P.S: Es war keine gute Idee, das Zeichen "_" im Tabellennamen zu verwenden

                        Comment


                        • #13
                          Zum P.S
                          des hab ich mir auch gedacht, aber in Delphi reicht es wenn ich T Person angebe.

                          Das Programm in Access1.1 hat eine Programmiererin vor mir gemacht, keine Ahnung warum sie die Tabellen so benannt hat:_

                          Comment


                          • #14
                            Ähm noch was lieber Andreas dir struktur der Access1.1 und der Access2000 Datenbank ist nicht gleich was passiert wenn ich
                            <pre>
                            sSQL := 'SELECT * INTO [Import] IN "C:\Temp\Test.MDB" FROM [T_Person]';
                            </pre>
                            ausführe

                            Comment


                            • #15
                              Das mit der AdoConnection.Execute funktioniert eigentlich ganz toll.<br>
                              Bedauerlich ist, dass jeweils eine neue Tabelle in der Datenbank angelegt wird.<br>
                              Dadurch habe ich Probleme mit Indizees und Relations. Leider konnte <br>
                              ich auch nicht das Problem lösen wie bei Passwort - Schutz zu verfahren ist.<br>
                              So das ich eigentlich sagen muß, diese Variante scheidet für mich aus.<br>
                              Oder gibt es eine Möglichkeit ein "batAppendUpdate" wie beim TBatchMove <br>
                              einzustellen? Ich habe ein bißchen mit ADOCommand experimentiert und versucht <br>
                              das Recordset einer Query der Zieltabelle zuzuweisen, leider lief das auch nicht so <br>
                              gut, da die Query über mehrere Tabellen selektiert und dann statt "FELD1" dann "A.FELD1" <br>
                              drinsteht. Gibt es da eine Abhilfe?
                              Hendri

                              Comment

                              Working...
                              X