Announcement

Collapse
No announcement yet.

Textfile in SQL-Server 7.0 DB einlesen?

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

  • Textfile in SQL-Server 7.0 DB einlesen?

    Hallo,
    ich hoffe Ihr könnt mir helfen.

    Ich habe eine Textdatei in Tabellenform welche immer eine einheitliche Struktur hat. Dazu eine Datenbanktabelle einer SQL Server DB im Netzwerk, deren Struktur ich an die Textfile angepaßt habe.

    Jetzt mein Problem. Die Textfile ist ca. 10 MB groß, es sind letztlich ca. 60.000 Datensätze für die Tabelle. Ich habe über Visual BAsic 6.0 eine Einleseprozedur geschrieben, welche <pre>
    - einen Recordset auf die Tabelle öffnet
    - für jede Zeile der Textfile (also jeden Datensatz) einen Record hinzufügt (Addnew) und füllt (rs!Feld1 = Mid(zeile,34,6), ...)
    - Wenn alle Felder belegt sind, mit Update die DB aktualisiert.
    </pre>
    Nur, das dauert extrem lange, ca. 2 Stunden! Und es kommen noch Dateien, die 5mal so groß sind.
    An der Datenmenge kann es nicht liegen: Wenn die Textfile übers Netz von einem Rechner auf den anderen kopiere, dann geht das in Sekundenschnelle.

    Wie kriege ich das schneller hin?

    Vielleicht liegt der Schlüssel zur Lösung des Problems darin, die Datei mit einem Mal zum Server zu kopieren und von dort aus erst die DB zu füllen.
    Vielleicht mittele einer Stored Procedure?

    Hat irgendjemand irgend einen Tipp oder Anregung für mich?

    Danke
    Steffen

  • #2
    Hallo,

    warum wird nicht der <b>DTS-Import/Export-Assistent</b> des MS SQL Servers genutzt, um das Ganze visuell zusammenzuklicken? Außerdem gibt es da noch <i>bcp.exe</i> bzw. die SQL-Anweisung <b>BULK INSERT</b>. Alle diese Weg können Massendaten mit hoher Geschwindigkeit einfügen, ohne das jede einzelne Aktion im Rahmen Log separat mitprotokolliert werden muss

    Comment


    • #3
      Ich weiß ja dass das so geht, aber ich muss es so machen, dass alles aus meinem VB-Programm heraus geschieht. Gibt es vielleicht eine Möglichkeit, den DTS-Assistenten aus Visual Basic 6.0 heraus anzusprechen

      Comment


      • #4
        Hallo,

        aus VB6 heraus kann das einmal visuell zusammengestellte DTS-Paket jederzeit programmgesteuert ausgeführt werden: <br>
        a) aus Datei laden: DTS.Package.<b>LoadFromStorageFile</b>, oder <br>
        b) aus Datenbank laden: DTS.Package.<b>LoadFromSQLServer</b><br>
        Über die Package-Methode <b>Execute</b> wird das DTS-Paket dann aus VB6 heraus gestartet

        Comment


        • #5
          Danke, das klingt vielversprechend! Eine Frage noch... Ich kann nirgends eine Klasse/Library finden die obige Anweisungen zuläßt. Das heißt, laienhaft ausgedrückt (ich bin ein Laie!): mir fehlt die Klasse DTS in VB.

          Kann/muß man die sich runterladen? Wenn ja, wo gibt's die?

          Verwendet VB dann das DTS-Paket des SQL-Servers oder hat es dann sozusagen ein "eigenes"?

          Vielen Dank für Zeit & Geduld!!

          Comment


          • #6
            Verdammt entschuldige die blöde Frage eben. Jetzt habe ich es verstanden. Problem weiterhin: Wie bekomme ich in VB das DTS-Objekt?

            Geht das auch mit SQL Server 7.0? Und auch wenn die Textfile lokal auf dem Rechner ist und der SQL Server im Netzwerk

            Comment


            • #7
              Hallo,

              das sind ganz normale COM-Objekte, so dass der erste Schritt in VB darin besteht, den Verweis auf die Typbibliothek von DTS (<i>Microsoft DTSPackage Object Library</i>) einzubinden. Ab dann ist der direkte Zugriff möglich.

              &gt; Geht das auch mit SQL Server 7.0?

              Ja.

              &gt;Und auch wenn die Textfile lokal auf dem Rechner ist und der SQL Server im Netzwerk?

              Kein Problem - solange sich das Programm erfolgreich beim SQL Server anmelden kann und die DTS-Objekte lokal vorgefunden werden. Microsoft hat in seiner <i>Knowlegde Base</i> sogar eine Schritt-für-Schritt-Beschreibung, wie man die DTS-Objekte sogar auf einem Rechner nachträglich und lizenzfrei installieren kann, wenn dort keine Client-Software für den MS SQL Server installiert ist :-

              Comment


              • #8
                Danke schön, eine Frage noch.

                Wenn ich die Verweise gewetzt habe und es auch läuft, wird es dann auch auf dem Rechner laufen auf dem ich das Prg installiere (Install-Vers. mit Paket-u.Weitergabeassistent) und der auch keine SQL Server Client-Software hat? Sprich: Reicht es, wenn dort die entsprechenden DLL's installiert und registriert werden?

                OK das war es dann an meinen Fragen, werde mich morgen mal dran machen.

                Danke noch mal!!

                Comment


                • #9
                  Hallo,

                  &gt;Reicht es, wenn dort die entsprechenden DLL's installiert und registriert werden?

                  Ja

                  Comment


                  • #10
                    Hallo,

                    Danke für die vielen Auskünfte, leider muß ich noch was fragen...
                    Habe die notwendigen DTS-Packages erstellt und auf dem Server gespeichert. Wie kann ich sie später (also jetzt) finden?

                    Danke...
                    Steffe

                    Comment


                    • #11
                      So ich habe jetzt folgendes gemacht:

                      - Das Paket visuell erstellt. Ich habe die auf der Festplatte meines Rechners befindliche Textdatei übergeben.
                      - Das DTS-Paket als Datei auf meinem Rechner gespeichert,
                      - In VB die Anweisungen gesetzt:
                      <pre>
                      Public Sub DTS_Ausfuehren_Bohren()
                      Dim Package As New DTS.Package
                      Package.LoadFromStorageFile App.Path & "\DTS__koordb.dts", "Admin", , , "DTS__koordb"
                      Package.Execute
                      End Sub
                      </pre>

                      Es funktioniert, aber mir ist einiges unklar. Es soll ja von zig Arbeitsstationen aus funktionieren. Reicht es, wenn ich die DTS-Datei dem Install-Paket hinzufüge und holt es sich beim Ausführen die einzulesende Textdatei auch direkt aus dem gleichen Verzeichnis?
                      Wenn dem nicht so ist, wie kann man so etwas lösen?

                      Danke für die Geduld...
                      Steffe

                      Comment


                      • #12
                        Hallo,

                        wenn sichergestellt werden muss, dass jeder Client-Rechner garantiert mit der exakt gleichen DTS-Paketversion arbeiten soll und wenn auch der Update-Aufwand minimiert werden soll, würde ich das DTS-Packet auf dem SQL-Server speichern (siehe Speichern unter...-Dialog im DTS-Designer des Enterprise Managers) und im Client über Package.LoadFromSQLServer laden.

                        Einem DTS-Paket darf man "globale Variablen" zuordnen, die im VB-Client mit Werten gefüllt werden. Außerdem gibt es da ja noch die dynamischen Eigenschaften, die man innerhalb des DTS-Pakets auf externe Quellen (wie zum Beispiel eine INI-Datei) legen kann. Somit kann jeder Client-Rechner eigene Konfigurationen vornehmen, obwohl jeder Client mit dem gleichen DTS-Paket arbeitet.
                        &#10

                        Comment


                        • #13
                          Danke das stimmt mich hoffnungsvoll...

                          Wenn ich ein DTS-Package auf dem SQL-Server abspeichere, wie finde ich es später wieder? Wie erfahre ich die ID dieses Pakets? Und wo kann ich im SQL-Server bzw. über VB diese globalen Variablen festlegen?

                          Sorry, es kommen sicher noch mehr Fragen... Ich tappe auf diesem Gebiet etwas im dunkeln, muß es aber hinkriegen...

                          Vielen Vielen Dank..

                          Comment

                          Working...
                          X