Mr.Brot Geschrieben 1. September 2004 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-roTekuGeL- Geschrieben 1. September 2004 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Brot Geschrieben 1. September 2004 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kLeiner_HobBes Geschrieben 1. September 2004 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-roTekuGeL- Geschrieben 1. September 2004 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Brot Geschrieben 1. September 2004 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
developer Geschrieben 2. September 2004 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Brot Geschrieben 3. September 2004 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maxim_42 Geschrieben 3. September 2004 Teilen Geschrieben 3. September 2004 Eigendlich kommst du ja mit einem ForwardOnly Cursor aus. Der ist schneller als der von dir verwendete. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Brot Geschrieben 3. September 2004 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Brot Geschrieben 3. September 2004 Autor Teilen Geschrieben 3. September 2004 argh... des is ja DAO... wer benutzt den noch DAO!?!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.