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.

Visual Basic Excel Oracle

Empfohlene Antworten

Veröffentlicht

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???

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?

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

Liegt vielleicht daran, daß es bei der 1min-Methode fest eingebaute Routinen sind, während bei VBA die Zeilen 60.000mal interpretiert werden ... *nachdenkt*

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...

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

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.

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!! :D

Eigendlich kommst du ja mit einem ForwardOnly Cursor aus.

Der ist schneller als der von dir verwendete.

Eigendlich kommst du ja mit einem ForwardOnly Cursor aus.

Der ist schneller als der von dir verwendete.

wiemeinen???

zeig mal n Code-Beispiel..

argh... des is ja DAO... :rolleyes:

wer benutzt den noch DAO!?!? ;););)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.