MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 13.06.2018, 21:43   #1
trekking1
MOF Profi
MOF Profi
Standard Acc2013 - 1:n Beziehung in Arrray abbilden

Hallo Miteinander,

habe ein Recordset für die "1" Tabelle, das ich mit Do Until durchlaufe.
Innerhalb der Schleife gibt es ein weiteres Recordset der "n" Seite das alle Werte wieder gibt, die den Schlüssel der "1" Seite beinhalten.
Diese Datensätze werden dann in ein Exceltabellenblatt geschrieben.

Meine Frage ist, ob es auch möglich wäre so etwas mit Arrays zu machen. Also die Recordsets in Arrays einlesen und diese dann abzuarbeiten.
Falls ja, wäre ein Beispielcode oder ein Link super.
Die weitere Frage hierzu wäre ob dies die Perfromance deutlich verbessert. Arrays sind ja in der Regel schneller als recordsets.

Danke und viele Grüße
trekking
trekking1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.06.2018, 22:33   #2
Nouba
MOF Guru
MOF Guru
Standard

Beispiel:
Code:

   Dim a As Variant

   '...
   a = DeinAdoRecordset.GetRows()
Nouba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.06.2018, 23:45   #3
trekking1
Threadstarter Threadstarter
MOF Profi
MOF Profi
Standard

Danke für die Anregung Nouba.

Wie lese ich das dann aber aus und arbeite es in einer Schleife ab. Der Recordset besteht ja aus mehreren Feldern.

Viele Grüße
trekking
trekking1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 00:26   #4
Nouba
MOF Guru
MOF Guru
Standard

Dem Array geht es ähnlich wie dem Recordset - es ist zweidimensional, so dass alle Spaltenwerte in der zweiten Dimension angeordnet sind. D.h. in a(0, 0..NumRecs-1) stehen die Werte der ersten, in a(1, 0..NumRecs-1) die der zweiten Spalte, usw.
Nouba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 07:16   #5
markusxy
MOF Meister
MOF Meister
Standard

Zitat: von trekking1 Beitrag anzeigen

Die weitere Frage hierzu wäre ob dies die Perfromance deutlich verbessert.

Natürlich sind Arrays viel schneller.
Schau dir auch die Parameter der Methode an.
Es gibt auch Unterschiede zwischen ADO und DAO.
Du hast halt den Overhead für das Kopieren - was aber erstaunlich schnell geht.
Ich verwende das jedenfalls häufig.

LG M
markusxy ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 08:38   #6
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Wie lese ich das dann aber aus und arbeite es in einer Schleife ab.

Wer Performance nach Rennen in Schleifen beurteilt, hat da eine eingeschränkte Sicht. Klar, ein Array ist nur etwas reservierter Platz im Speicher, der im Rahmen seiner Deklaration des Datentyps alles aufnimmt und nix weiter verwalten muss. Ein Recordset dagegen bildet eine Tabelle / Abfrage ab, kennt immer noch Datentypen, gewährleistet gar eine Aktualisierung der verknüpften Tabelle munter Berücksichtigung der hinterlegten referentiellen Integrität usw.

Aus Performancegründen sollte man aber berücksichtigen, dass in der Regel Massendatenverarbeitung und dessen Methoden schneller sind als serielle Einzelverarbeitung (Schleifen über Einzelwerte). Das betrifft nicht nur SQL-Anweisungen statt Schleife in Recordset, sondern durchaus auch Aktionen in Excel: Performance (1) - Vorwort + Schleifen die keiner braucht

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 09:39   #7
CatboyJones
MOF User
MOF User
Standard

Das Nadelöhr ist hier doch eher das Beschreiben der Excel-Tabelle.
Vlt. wäre es besser, ein passendes Recordset zu erstellen und
dieses mit CopyFromRecordset zu übertragen.
Formatierungen könnte man dann per Range/Column durchführen,
falls das ausreicht.
CatboyJones ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 09:45   #8
markusxy
MOF Meister
MOF Meister
Standard

So weit habe ich wieder mal gar nicht gelesen - Export nach Excel.
Schnell macht man das per einfachem SQL Insert nach Excel.
markusxy ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 12:23   #9
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

1:n Beziehung in Arrray abbilden

Wenn ich so über den Thementitel nachdenke: Ein Array kann viel mehr als nur zweidimensional sein, sondern da sind so um die 60 (sechzig) Dimensionen möglich, also genug Futter um da eine nachgelagerte Tabelle einzubauen.

Mein Vorstellungsvermögen beginnt zwar schon in Verwendung der vierten Dimension zu wanken, meine Person ist aber auch kein Maßstab. Für Experimentalprogrammieren und Schleifenläufe sind ein paar Dimensionen mehr in Verwendung doch ein hervorragend ergiebiges Feld.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 13:01   #10
markusxy
MOF Meister
MOF Meister
Standard

Zitat: von ebs17 Beitrag anzeigen

Ein Array kann viel mehr als nur zweidimensional sein, sondern da sind so um die 60 (sechzig) Dimensionen möglich

Ob eine oder 60 Dimensionen macht real keinen Unterschied, außer dass die Adressierung via SafeArray etwas träger wird.
Um bei deinem Termiuns zu bleiben - "nur etwas reservierter Platz im Speicher" Da Gackern ja die Hühner.

Wenn man will reicht ein eindimensionales Array um es mit 100 Dimensionen zu belegen.
markusxy ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 21:02   #11
trekking1
Threadstarter Threadstarter
MOF Profi
MOF Profi
Standard

Hallo alle Miteinander,

vielen Dank für die vielne Antworten. Das mit dem Datenübergeben nach Excel geht bei der Anwendung nicht in einem Rutsch, da diese entsprechend Formatiert werden.

Wenn Eberhardt sagt, dass er bei einem Array >4 Dimensionen die Segel streicht, dann setze ich da gerade etws früher an.

Wie ich die Daten in das Array bekomme ist mir jetzt klar. Das genaue Auslesen ist mir immer noch nicht ganz klar. Vermutlich benutze ich eine For Next Schleife mit LBound und Ubound als Grenzen. Wie muss der Code aber aussehen um diesen dann Variablen zuzuweisen? Steh da gerade irgendwie auf dem Schlauch. Kommt wohl daher, dass ich anstatt Arrays meist collections in Klassen benutze. Einfache Arrays in die ich mit Split Text einfüge sind mir geläufig, aber das Auslesen eines eingelesenen Recordsets will irgendwie nicht in meinen Kopf. Würde mcih freuen, wenn da jemand den entpsrechenden Code oder einen link posten könnte wo es gut erklärt ist.

Danke und Viele Grüße

trekking
trekking1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.06.2018, 21:59   #12
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Das genaue Auslesen ist mir immer noch nicht ganz klar.

Das Wesen eines Arrays ist simpel: Pro Dimension gibt man die Indexnummer an und adressiert so den gewünschten Inhalt zum Lesen oder Schreiben:
Code:

Sub arraytest()
    Dim A(5, 6, 7) As Long
    Dim i As Long, j As Long, k As Long
    
    ' beispielhafte Zuweisungen
    A(1, 2, 3) = 45
    A(2, 3, 5) = 66
    A(5, 2, 3) = 112
    
    ' alles auslesen
    For i = 0 To UBound(A, 1)
        For j = 0 To UBound(A, 2)
            For k = 0 To UBound(A, 3)
                Debug.Print k, j, i, A(i, j, k)
            Next
        Next
    Next
    
End Sub

Zitat:

aber das Auslesen eines eingelesenen Recordsets will irgendwie nicht in meinen Kopf

Nouba nannte bereits GetRows. Diese Methode eines Recordsets, sowohl in DAO als auch in ADODB, übergibt das Recordset im Stück an ein Array (=> Massendatenverarbeitung). Allerdings entsteht ein transponiertes Array. Das kann man nachlesen in der Hilfe zu GetRows oder spätestens hier: ADO und Excel (3) - Ausgabe des Recordsets

Natürlich kann man auch per Schleifen über Felder und Datensätze eines Recordsets das Array punktuell füllen. Einzeln ist zwar langsamer, aber intellektuell einfacher und daher oftmals bevorzugt.

Zitat:

entsprechend Formatiert werden

Auch Arrays übergeben nur Inhalte, also keine Zellformate für ein Arbeitsblatt.
Daher sehe ich immer noch keinen Vorteil, den ein Array bringen könnte. Ein Recordset kann man mit CopyFromRecordset im Stück oder auf Zeilen und/oder Spalten begrenzt direkt in ein Arbeitsblatt einfügen und braucht nur eine Startadresse für den zu belegenden Bereich. Feldnamen wären, wenn gebraucht, extra zu übertragen. Dann hätte man auch seine, wenn auch einfache, Schleife.

Zitat:

Wenn Eberhardt sagt, dass er bei einem Array >4 Dimensionen die Segel streicht

trakko, das ist eine blanke Fehlinformation. Wanken heißt noch lange nicht aufgeben, und Vorstellungsvermögen kann man durch praktische Übungen an einem verständlichen Realobjekt ergänzen und mehren. Für vier Dimensionen kann man noch die Vorstellung haben, dass sich ein Körper (Länge, Breite, Höhe) durch die Zeit bewegt. Für weitere Dimensionen sind dann Fallbeispiele aus der Praxis nicht mehr so geläufig.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (14.06.2018 um 22:09 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.06.2018, 11:44   #13
trekking1
Threadstarter Threadstarter
MOF Profi
MOF Profi
Standard

@Eberhard

Zitat:

trakko, das ist eine blanke Fehlinformation. Wanken heißt noch lange nicht aufgeben

Sorry fürs mal wieder falsch schreiben Deines Namens.
Ist einfach drin und wenn ich in Eile bin, dann Tippe ich leider oft das t.
Ich weiß, dass Du nicht so leicht aufgibst (sonst würdest Du mir ja nicht mehr helfen ), wollte Dir nicht zu nahe treten

Das einlesen über GetRows hatte ich gesehen. Beim Zeilenweise abarbeiten geht es nicht ums einlesen sondern ums auslesen. Kam eventuell nicht richtig rüber.

Zitat:

Auch Arrays übergeben nur Inhalte, also keine Zellformate für ein Arbeitsblatt.

Ist mir bekannt. Es geht auch nicht darum Formatierte Inhalte zu erhalten, sondern nach dem auslesen diese ins Ziel Tabellenblatt zu schreiben und dort dann zu formatieren. Deshalb bringt eine Massenberarbeitung an der Stelle nichts. Auch wie CatBoy vorgeschlagen hat die Daten ins Tabellenblatt zu schreiben und dann zu formatieren geht nicht.

Werde mir mit euren Infos nun einen Test aufsetzen und mir dann die entsprechenden Daten ansehen und schauen wie ich die verwenden kann.

Danke an alle

Viele Grüße
trekkiing
trekking1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.06.2018, 13:15   #14
Nouba
MOF Guru
MOF Guru
Standard

So ein Array bezogen aus GetRows() kann z.B. in einem Listen- oder Kombifeld der MSForms-Bibliothek eine feine Sache sein. Ob dieses Array auch für Deine, uns geheimen Vorstellungen sinnvoll (im Sinne von performant) genutzt werden kann, wissen wir nicht. Daten aus einer 1:n-Beziehung könnte man ja auf mannigfaltige Art in einem Excel-Blatt darstellen wollen.
Nouba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.06.2018, 15:20   #15
trekking1
Threadstarter Threadstarter
MOF Profi
MOF Profi
Standard

@Nouba
Arrays habe ich für Listenfelder schon öfter benutzt in Excel Forms. Da sind die wirklich eine feine Sache.
Geheim ist das nicht was ich da mache, dachte allerdings nicht, dass das Ergebnis der Arbeit an der Stelle wichtig ist für die Fragestellung

Im Prinzip wird ein Excel erstellt, dass auf mehreren Tabellenblättern verschiedene Fragen, Unterfragen, Multiple Choice Fragen,Tabellen etc. enthält. Dazu gibt es ein enstsprechend normalisiertes Datenmodell.
Dies enthält Tabellen zu Fragen, Unterabfragen, Unter_Unterabfragen, Tabellen etc.
Beim erstellen der Tabellenblätter gibt es entsprechend Äußere, Innere,Innerste und eventuell noch ein Innerreres Recordset. (Sorry da gibt es bestimmt einen tollen Ausdruck dafür aber den kenne ich nicht und so sollte es jeder verstehen Es funktioniert alles und läuft wirklich gut. Der einzige Pferdefuß ist die Performance. Das erstellen des Excel dauert je nach Umfang bis zu drei Minuten. (OK, wenn ich das gleiche von Hand mache brauche ich ne Woche dazu, warum jammer ich eigentlich )Es ist akzeptabel aber kontinuierlich versuche ich es schneller zu machen.

Die Recordsets sind alle disconnected und das hatte auch eine Verbesserung gebracht. Jetzt eben noch die Idee mit den Arrays, da diese eventuell auch noch eine Verbesserung bringen könnten.

Collection Klassen dürften mir an der Stelle eher nicht helfen, da das einlesen länger dauert wie mit GetRows infolge des Zeilenweisen abarbeitens.

Viele Grüße
trekking
trekking1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.