Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe ein Makro geschrieben, was aus ISAM Dateien über ODBC Datensätze in eine Excel Tabelle importiert. Das funktioniert auch soweit, nur kann Excel 2010 eben nur knapp über eine Millionen Datensätze, und es sind leider mehr. Etwas Quellcode:

  With Worksheets(DATEI).ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=ACU", _

        Destination:=Range("$A$1")).QueryTable

        .CommandText = Array( _

        "SELECT * FROM " + DATEI)

        .RowNumbers = False

        .FillAdjacentFormulas = False

        .PreserveFormatting = True

        .RefreshOnFileOpen = False

        .BackgroundQuery = True

        .RefreshStyle = xlInsertDeleteCells

        .SavePassword = False

        .SaveData = True

        .AdjustColumnWidth = True

        .RefreshPeriod = 0

        .PreserveColumnInfo = True

        .ListObject.DisplayName = "Tabelle_Abfrage_von_" + DATEI

        .Refresh BackgroundQuery:=False

    End With

Jetzt habe ich überlegt, ich könnte ja einfach die Anzahl pro Worksheet auf eine Millionen begrenzen, und bei Bedarf ein weiteres Worksheet anlegen. Nur komme ich ja gar nicht zwischen die Abfrage, d.h. der holt erst alle Daten, und speichert die dann in dem Worksheet ab. Hat jemand eine Idee?

Und ja, Excel ist dafür auch nicht gedacht, aber es geht leider nicht anders, weil ich über den ODBC Treiber die Daten nicht in Access importieren kann.

Hi Carsten,

ich würde an deiner Stelle, die Verbindung über ein ODBC Connection Object erstellen, und die Daten dann erstmal in ein das ein Recordset Object schreiben.

Das kannst du dann Durchloopen und row für row dann entweder in die Excel Datei, oder was vermutlich sinnvoller wäre, gleich in eine sauber formatierte CSV schreiben.

Bei Bedarf kann ich dir n bissl Quellcode raussuchen / schreiben als Beispiel.

Du kannst aber eigentlich Excel dann auch gleich weglassen, und dir das ganze in C# oder VB.NET schreiben, da haste dann weniger Probleme mit.

Gruß

Sven

  • Autor

Hi Sven,

danke erstmal für den Hinweis. Recordset Object, das klingt gut, probiere ich morgen mal aus und gebe Rückmeldung. Es soll(te) eigentlich gar nicht so groß werden, aber wie es nunmal so ist in der IT, wird das vermutlich ein Mammutprojekt. :)

bah .... geh nie mit nem schotten in nem irish pub einen sauffe, und zahl den abend, während der schotte ****en is ....

Anyway ....

Ich würd dir raten, wenn du Excel VBA "musst", setz nen verweis auf die mscore.lib

Das gibt dir in Excel VBA das recht komplette .Net Framework.

Hashtables, Dictionarys was das Herz begehrt.....

bei 1.5 mio rows record sets, würd ich mich nicht freiwillig auf excel vba begrenzen wollen muss ich sagen. (Ich geb dem ne 50:50, dass Excel mit ner out of memory aussteigt.....)

Gruß

Sven

  • Autor

Hi,

ok, also ich habs jetzt mit nem Recordset gemacht, allerdings stoße ich genau auf die Speicherproblematik. Im Grunde brauche ich Excel gar nicht, es reicht mir auch, wenn ich die Daten direkt in Access einlesen könnte. Hast du da auch einen Tipp? Also dass ich quasi per ODBC direkt in eine neue (leere) Access DB schreiben kann.

Also dass ich quasi per ODBC direkt in eine neue (leere) Access DB schreiben kann.

In Access kann man Tabellen als Referenzen einbinden (bitte eine Suchmaschine dafür benutzen). Alternativ führe das SQL Select direkt über den Treiber aus und fülle die Daten in die Accesstabelle "INSERT INTO target VALUES SELECT * FROM source"

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.