Mr.Brot Geschrieben 1. September 2004 Geschrieben 1. September 2004 Hi, hab folgendes Problem: Ich greife mir VB6 und ADO auf eine Oracle DB zu und will die Daten in einer Excel.Datei ausgeben. Es funktioniert auch alles wunderbar,.. nur für ca.60.000 Datensätze brauche ich ca. 1,5 Stunden bis alles in der Excel.Datei steht. Kennt jemand eine Methode mit der dies schneller geht. Über Excel ein Query auf ne Oracle.DB zu machen und die Daten dann in Excel anzuzeigen geht ja auch recht flott ca. 1min bei 60.000 Datensätze.. Ich muß dies aber in VB realisieren. Gibts es irgendwelche alternativen??? Zitieren
-roTekuGeL- Geschrieben 1. September 2004 Geschrieben 1. September 2004 Gibts es irgendwelche alternativen??? wäre vielleicht nicht ganz uninteressant wie du das in VB momentan machst... schreibst du dir alle daten erst in ne textfile und dann in excel oder liest du aus der db einen satz und schreibst den gleich in excel? Zitieren
Mr.Brot Geschrieben 1. September 2004 Autor Geschrieben 1. September 2004 Ich lese die Daten mit einem Recordset aus... ach ich post mal den code: Set objConnect = New ADODB.Connection Set objRecset = New ADODB.Recordset objConnect.Open "Provider=msdaora;Data" & "Source=" & strDataSource & ";" & "User Id=" & strUsername & ";" & _ "Password=" & strPassword & ";" objRecset.Open strSQL, objConnect, adOpenKeyset, adLockOptimistic dblRowstart = 15 For i = 1 To objRecset.Fields.Count - 1 objExcel.Worksheets(1).Cells(dblRowstart, i) = objRecset.Field(i).Name Next i While Not objRecset.EOF dblRowstart = dblRowstart + 1 For j = 1 To objRecset.Fields.Count - 1 objExcel.Worksheets(1).Cells(dblRowstart, j) = objRecset.Fields(j) Next j objRecset.MoveNext Wend Zitieren
kLeiner_HobBes Geschrieben 1. September 2004 Geschrieben 1. September 2004 Liegt vielleicht daran, daß es bei der 1min-Methode fest eingebaute Routinen sind, während bei VBA die Zeilen 60.000mal interpretiert werden ... *nachdenkt* Zitieren
-roTekuGeL- Geschrieben 1. September 2004 Geschrieben 1. September 2004 also ich vermute sehr stark dass es daran liegt dass du das zeug aus der DB holst und jeden satz einzeln ins Sheet schreibst... sowas braucht zeit... versuchs doch mal erst in ne textdatei zu schreiben, also normal mit print... das sollte dann schon schneller gehn... und dann alles auf einmal in die excel file haun... Zitieren
Mr.Brot Geschrieben 1. September 2004 Autor Geschrieben 1. September 2004 Werde ich wohl versuchen müssen... Hab grad mit einem ehemaligem Azubi von uns gelabert und der hat dies auch als noch einzige alternative gesehen... Anderen Oracle Treiber hab ich auch schon probiert, aber von der Zeit her hab ich keinen unterschied bemerkt. Danke euch schon mal für eure Aufmerksamkeit und Zeit die ihr erübrigen konntet!!! Falls aber jemand doch noch n Gedankenblitz hat... herdamit!! :WD Zitieren
developer Geschrieben 2. September 2004 Geschrieben 2. September 2004 Das Problem liegt nicht an der Oracle Datenbank, dessen Treiber oder dem Zugriff im Allgemeinen. Das Bottleneck ist das Einfügen in die Excel-Datenbank! Du musst jede Zeile einzeln in Excel einfügen, zur nächsten Zeile gehen, dann dort einfügen etc. Das dauert! Schreibt doch in Excel mal ein kleines Makro, dass in jede Zelle der 1. Spalte einen Buchstaben reinschreibt, du wirst sehen... *gähn* Ausserdem ist bei Excel die ANzahl der Rows auch begrenzt, das solltest du unbedingt im Hinterkopf behalten! Ich würde evtl. über ein Grid gehen und als Databound die Oracle-Datenbank angeben. Was du dann allerdings noch machen musst, ist das Grid als Excel-Tabelle zu konvertieren. Aber das alles zusammen sollte AFAIK wesentlich schneller gehen, zumal du den Zeitaufwand auch erst beim Speichern hast. Der Benutzer müsste erst zum Schluss ein wenig warten. Zitieren
Mr.Brot Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 Gelobt sei "Microsoft Excel Visual Basic-Referenz"!! :mod: objExcel.Worksheets(1).Range(strRowstart).CopyFromRecordset objRecset, lngRowmax Mehr braucht man nicht um einen Recordset in Excel anzuzeigen!! Zitieren
maxim_42 Geschrieben 3. September 2004 Geschrieben 3. September 2004 Eigendlich kommst du ja mit einem ForwardOnly Cursor aus. Der ist schneller als der von dir verwendete. Zitieren
Mr.Brot Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 Eigendlich kommst du ja mit einem ForwardOnly Cursor aus. Der ist schneller als der von dir verwendete. wiemeinen??? zeig mal n Code-Beispiel.. Zitieren
Mr.Brot Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 argh... des is ja DAO... wer benutzt den noch DAO!?!? 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.