carstenj Geschrieben 23. Juli 2012 Geschrieben 23. Juli 2012 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. Zitieren
streffin Geschrieben 23. Juli 2012 Geschrieben 23. Juli 2012 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 Zitieren
carstenj Geschrieben 23. Juli 2012 Autor Geschrieben 23. Juli 2012 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. Zitieren
streffin Geschrieben 23. Juli 2012 Geschrieben 23. Juli 2012 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 Zitieren
carstenj Geschrieben 24. Juli 2012 Autor Geschrieben 24. Juli 2012 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. Zitieren
flashpixx Geschrieben 24. Juli 2012 Geschrieben 24. Juli 2012 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" Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.