Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array aus Excel in Access-DB schreiben

Array aus Excel in Access-DB schreiben
12.09.2021 13:38:46
Peter
Hallo zusammen,
ich baue gerade eine Anwendung, die Aktienkursdaten in Excel und Access bearbeitet/speichert.
Dabei stehe ich vor folgender Herausforderung:
Zu einem Wertpapier speichere ich in Access die Informationen
WKN // Tag // TagNummer // Woche // Öffnungskurs // Höchstkurs // Tiefstkurs // Schlusskurs // Datenquelle // Importdatum
Nun führe ich über PowerQuery monatlich Datenupdates vor und füge diese dann in Access hinzu.
Dazu prüfe ich dann jeweils ab, ob zu einem Datum schon ein Kurs vorliegt oder nicht.
Wenn ja, dann lösche ich den entsprechenden Datensatz und schreibe meinen neuen Datensatz in die Datenbank.
Wenn nein, dann wird der Datensatz "einfach so" in die Datenbank geschrieben.
Das Hinzufügen der Datensätze mache ich für ca. 1000 Wertpapiere ... und es dauert ewig. Wahrscheinlich, weil ich für jeden einzelnen Datensatz eine Anfrage an Access schicke.
Daher meine Frage: Kann ich die Daten zu einem Wertpapier auch in einem Rutsch per SQL in die Datenbank schieben?
Wenn ja, dann würde ich einfach in einem ersten Schritt alle Datensätze in der Datenbank ab dem Zeitpunkt löschen zu denen ich neue Daten habe ... und dann die neuen Daten in die Datenbank schreiben
Aktuell sieht mein Code wie folgt aus:
' Neue Daten in die Datenbank schreiben
For lngLoop3 = lngStartChange To UBound(varAlleTage)
If varAlleTage(lngLoop3, 10) = "Neu" Then
rstKURS.Open "SELECT * FROM Kurse WHERE WKN = '" & strWKN & "' AND Kursdatum = " & strDateSQL(CDate(varAlleTage(lngLoop3, 1))) & ";"
If rstKURS.RecordCount = 0 Then
rstKURS.Close
ElseIf rstKURS.RecordCount = 1 Then
rstKURS.Delete
rstKURS.Close
End If
rstKURS.Open "Kurse"
rstKURS.AddNew
rstKURS.Fields("WKN") = strWKN
rstKURS.Fields("Kursdatum") = CDate(varAlleTage(lngLoop3, 1))
rstKURS.Fields("TagNr") = CLng(varAlleTage(lngLoop3, 2))
rstKURS.Fields("Woche") = CLng(varAlleTage(lngLoop3, 3))
rstKURS.Fields("Open") = CDbl(varAlleTage(lngLoop3, 4))
rstKURS.Fields("Close") = CDbl(varAlleTage(lngLoop3, 7))
rstKURS.Fields("High") = CDbl(varAlleTage(lngLoop3, 6))
rstKURS.Fields("Low") = CDbl(varAlleTage(lngLoop3, 5))
rstKURS.Fields("Quelle") = CStr(varAlleTage(lngLoop3, 8))
rstKURS.Fields("Importdatum") = Date
rstKURS.Update
rstKURS.Close
End If
Next lngLoop3
Vielen Dank für Eure Ideen zur Verbesserung ... und einen schönen Sonntag
Peter

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array aus Excel in Access-DB schreiben
13.09.2021 08:58:44
ChrisL
Hi Peter
In einem Rutsch glaube ich weniger.
Was ich allerdings machen würde ist auf SELECT zu verzichten und direkt ein "DELETE FROM tb WHERE..." schicken. Wenn das Kriterium nicht erfüllt ist, dann wird auch nichts gelöscht.
cu
Chris
AW: Array aus Excel in Access-DB schreiben
13.09.2021 09:03:04
Peter
Moin Chris,
danke für Deine Antwort.
Das baue ich ein ... und zum Rest forsche ich weiter ... oder lebe damit :-)
Grüße
Peter
AW: Array aus Excel in Access-DB schreiben
13.09.2021 10:03:43
ChrisL
Hi Peter
Du kannst die ganze Zeile mittels einem einzigen SQL Statement übergeben:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
Allerdings glaube ich nicht, dass du damit spürbar Performance gewinnst.
Schlussendlich müssen die Daten/Information übertragen werden, was bei einem Umfang von 1000 Zeilen seine Zeit braucht. Wenn die Access-DB für den Übertrag lokal gespeichert ist, gewinnst du etwas Zeit im Vergleich zum Übertrag auf einen Server.
cu
Chris
Anzeige
AW: Array aus Excel in Access-DB schreiben
13.09.2021 15:17:01
Luschi
Hallo Peter,
im Prinzip gehst Du z.Z so vor:
- aus 1er Access-Tabelle per SQL 1 Recordset herausfiltern
- der 1 oder keinen Datensatz enthält
- wenn 1 Datensatz (DS) enthalten ist, dann diesen Löschen
- schon das ist nicht wirklich produktiv
- da Access DS nie wirklich löscht, sonder nur als gelöscht markiert
- der DS bleibt in der Datentabelle, bis die resamte Access-Datei reorganisert wird
- durch dieses Vorgehen schleppst Du 1 Haufen Ballast mit Dir herum, den man zwar nicht sieht
- aber das Kraut (spricht Datenbank) auch fett (spricht viel Datenmüll) macht
- hier heißt das Zauberwort DS aktualisieren 'Update'
- oder wenn nix vorhanden, dann neuen DS erzeugen
- Du aber schließt den Recordset
- erstellst einen neuen Recordset mit allen DS der Tabelle und
- hängst einen neuen DS ran und schließt wieder den Recordset
- und dann beginnt das selbe Spielchen in der Schleife von vorn
- R-Set aufmachen/filtern, DS deleten oder nix machen, R-Set schließen
- wieder RSet auf, neuen DS ranhängen, RSet wieder schließen
- und nächster Schleifendurchlauf
- das dies total unökonomisch und zeitintensiv ist, siehst Du hoffentlich ein
Wenn Du ein Demobeispiel mit Access- und Exceldatei vorbereitest, helfe ich Dir gern weiter.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Array aus Excel in Access-DB schreiben
13.09.2021 16:24:35
Peter
Hallo Luschi,
dass mein Weg nicht den größten Geistesblitz darstellt ... hab' ich mir durchaus gedacht :-)
Ich baue Dir gerne ein kleines Beispiel zusammen. Hast Du eine Mail-Adresse zum Schicken ...?
Grüße nach Klaa-Paris (bin ein paar Meter daneben aufgewachsen)
Peter
AW: Array aus Excel in Access-DB schreiben
13.09.2021 20:09:40
Oberschlumpf
Hi Peter,
kannst du die Bsp-DB und alles, was dazu gehört, nicht hier per Upload zeigen?
Dann hat doch jeder was davon, den es interessiert.
Ciao
Thorsten
AW: Array aus Excel in Access-DB schreiben
14.09.2021 17:04:34
Luschi
Hallo Peter,
habe mir Dein Problem mal angeschaut, mir ist aberFolgendes unklar:
- woran erkennt man, ob die WKN schon in der Access-DB vorhanden ist oder nicht?
- wie berechnet man den TagNr-Wert
- OC2 ist sicher (Open+Close)/2 ?!?
Gruß von Luschi
aus klein-Paris
AW: Array aus Excel in Access-DB schreiben
15.09.2021 09:18:00
Peter
Hallo Luschi,
vielen Dank für Deine Beschäftigung mit meinem "Problem".
  • Ab Zeile 112 im Makro sKursdatenErgänzenOnVista hole ich mir die Liste alle WKN in der Datenbank. Und in der Ergänzungsschleife ab Zeile 129 führe ich dann die ganzen Aktionen nur für diese WKN durch.

  • Der Wert TagNr ist in Blatt Admin definiert. Der 01.01.2010 ist Tag Nummer 1 und dann wird für jeden Wochentag um eins hochgezählt.

  • Und bei OC2 liegst Du mit Deiner Vermutung richtig. Zu Beginn hatte ich Open, High, Low und Close mitgezogen ... da ich aber nur mit dem Mittelwert aus Open und Close arbeite berechne ich jetzt direkt diesen Wert und schreibe auch nur ihn in die Datenbank.

  • Herzliche Grüße
    Peter
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige