Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Variable Dimensionierung eines Arrays
zurück: Programmcode anhalten während Formulareingabe weiter: Performance Problem Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
indscho
Weiß sich zu helfen, meist jedenfalls ...


Verfasst am:
22. Feb 2013, 16:28
Rufname:

Variable Dimensionierung eines Arrays - Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo,
ich möchte eine Funktion string_tp_array() schreiben die einen SQL-String in ein Array packen soll.

Das Befüllen des Arrays wird mir keine Schwierigkeiten bereiten, da ich die Spalten- und Zeilenanzahl kenne. Einzig die Festlegung der Dimensionen des Arrays ist mir nicht klar. Ich kann zwar über rs.fields.count feststellen, wie viele Dimensionen ich benötige, aber wie stelle ich die REDIM-Funktion auf? Konkreter: Ich muss je nach Bedarf ein
Code:
REDIM arrData(15, 1)             oder
REDIM arrData(15, 1, 1)          oder
REDIM arrData(15, 1, 1, 1)       usw.
erzeugen.

Hat jemand eine gute Idee?

Vielen Dank im Voraus!

Gruß Ingo
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
22. Feb 2013, 17:31
Rufname:


AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo,

der Sinn Deiner Frage ist mir nicht ganz klar geworden. Mal abgesehen davon, daß man tabellarische Daten in einer Datenbank am einfachsten in einer Tabelle verwaltet - wozu brauchst Du x Dimensionen? Wenn es nur um Felder eines Recordsets geht, gibt es nur eine Dimension.

Um die Frage grundsätzlich zu beantworten: Ich würde hier ein Variant-Array verwenden. Im Gegensatz zu anderen Arrays kann man ein Variant-Array äußerst flexibel erweitern. Der Grund ist, daß ein Array, das aus Variants besteht, ja nicht festlegt, welcher Datentyp in ein Element hineinkommt, im Gegensatz zu allen anderen Datentypen, wo (etwa bei String) festgelegt ist, daß es im Beispiel ein String-Element wird und nichts Anderes. Da in einem Variant-Array jedes Element wieder ein Variant ist, kann jedes Element auch wieder ein Array sein oder was auch immer.
So benötigt man immer nur eindimensionale Arrays, die dann statt mit "x(1,2,3)" mit "x(1)(2)(3)" angesprochen werden.

Variant-Arrays haben dabei auch noch eine spezielle Methode zum Speicherkopieren, so daß man sogar das Variant-Array in sich selbst hineinkopieren kann. Es würde also funktionieren, wenn man schreibt "x(1) = x". Das geht ausschließlich mit Variant-Arrays. Nun enthält das erste Element von x eine Kopie aller Elemente aus dem alten x-Array. Das kann man beliebig weitertreiben. Die Anzeige im Lokalfenster kann man dabei sehr schnell an ihre Leistungsgrenzen kriegen... denn wenn man danach schreibt "x(1)(1) = x", dann hat man in das Variant-Array des Elementes 1 den kompletten Array-Baum des Variant-Arrays hineinkopiert, womit also irgendwann auch ein "x(1)(1)(1)(1)(1)(1)(1) = x" zustandekommen kann und wenn man das im Lokalfenster aufklappt, kann man Access bis auf 0-Tempo herunterschrauben... Very Happy
Aber sowas macht man ja nicht, was aber interessant ist, daß es eben geht und man mit Variant-Arrays auf diese Weise komplexe Strukturen aufbauen kann, ganz ohne Redim.

Gruß

Christian
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Feb 2013, 17:32
Rufname:
Wohnort: NRW

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo,
Zitat:
Das Befüllen des Arrays wird mir keine Schwierigkeiten bereiten, da ich die Spalten- und Zeilenanzahl kenne.
dann sollte das Dimensionieren doch ebenfalls kein Problem sein. Ersetze die Konstanten durch Variablen und sieh für jede mögliche Variante (Anzahl der Dimensionen) einen Befehl vor.

Wie sieht dieses "kennen" denn konkret aus? Woher leitest du die benötigten Informationen ab?

_________________
Gruß MissPh!
Nouba
nicht ganz unwissend :)


Verfasst am:
22. Feb 2013, 17:37
Rufname:
Wohnort: Berlin

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo,

Recordsets haben die Methode GetRows (siehe VBA OL-Hilfe), die Dir das Dimensionieren und Befüllen des Datenfelds (Arrays) abnimmt.

_________________
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Feb 2013, 17:47
Rufname:
Wohnort: NRW


AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Zitat:
die einen SQL-String in ein Array packen soll.
Du meinst wohl eher ein Abfrageergebnis. Rolling Eyes
Tabellen bzw. Datenblätter (oder eben auch Recordsets) sind aber nunmal stets zweidimensional. Was hast du mit den anderen Dimensionen vor?

_________________
Gruß MissPh!
indscho
Weiß sich zu helfen, meist jedenfalls ...


Verfasst am:
22. Feb 2013, 18:59
Rufname:

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

indscho am 22. Feb 2013 um 17:13 hat folgendes geschrieben:
Nouba,
du hast mir schon so viel Arbeit erspart Surprised)

Vielen Dank!

Falls jemand anders mal so eine Funktion benötigt (um z. B. später dynamisch Diagramme zu erzeugen) habe ich meine Funktion einfach mal gepostet:
Code:
Function sql_to_array(strSQL As String) As Variant
'Gibt ein Array aus einem SQL-String zurück
On Error GoTo Err_Handler
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
               
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
    If rs.RecordCount <> 0 Then
        rs.MoveLast
        rs.MoveFirst
        sql_to_array = rs.GetRows(rs.RecordCount)
    End If
    Set rs = Nothing
    Set db = Nothing
Exit_Err:
    Exit Function
Err_Handler:
    MsgBox Err.Description
    Resume Exit_Err
End Function
Vielleicht hilft es ja jemand anderen auch.

Einen schönen Abend noch,

Gruß Ingo

Sorry, ich muss das Thema noch mal kurz öffnen:

Die Methode rs.getrows gibt mir ein transponiertes Array zurück, d .h. die Datensätze einer Tabellenspalte werden in einer Arrayzeile ausgegeben, Beispiel:
1 2 3 (city_id)
Frankfurt Berlin München (city)
F B M (citycode)

Ich benötige aber folgendes Array
1 Frankfurt F
2 Berlin B
3 München M

Wie stelle ich das an?

Gruß Ingo
Nouba
nicht ganz unwissend :)


Verfasst am:
22. Feb 2013, 19:47
Rufname:
Wohnort: Berlin

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo Ingo,

man kann nur raten, was Du willst: Changing the Record Source for a Graph Object in Reports

_________________
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Feb 2013, 21:55
Rufname:
Wohnort: NRW

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo.
Zitat:
Die Methode rs.getrows gibt mir ein transponiertes Array zurück
Möglicherweise liest du den Array nur falsch aus, weil du die Hilfe zur GetRows-Methode nicht gelesen hast. Wink
Access-Hilfe hat folgendes geschrieben:
Der erste Index identifiziert das Feld und der zweite die Zeilennummer. Beispielsweise stellt intField das Feld dar und intRecord bezeichnet die Zeilennummer.
Code:
avarRecords(intField, intRecord)

_________________
Gruß MissPh!
indscho
Weiß sich zu helfen, meist jedenfalls ...


Verfasst am:
25. Feb 2013, 16:14
Rufname:

AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

Hallo MissPH!,
ich habe die Hilfe zu GetRows gelesen, aber ehrlich gesagt nicht verstanden. Daran hat sich bis jetzt auch nichts gändert. Wie müsste der Befehl im obigen Skript denn lauten, damit das Array nicht transponiert ausgegeben wird? Wäre schön, das noch zu erfahren, dann könnte ich mir den folgenden Funtionsaufruf zum Transpronieren eines Arrays sparen:
Code:
Function array_transpose(arrData As Variant) As Variant
'Transponiert ein Array mxn zu nxm
On Error GoTo Err_Handler
    Dim arrDataNew() As Variant
    Dim b As Byte
    Dim i As Integer
    Dim iXmax As Integer
    Dim iYmax As Integer
   
    iXmax = UBound(arrData, 2)
    iYmax = UBound(arrData, 1)
    ReDim arrDataNew(iXmax, iYmax)
    For b = 0 To iXmax
        For i = 0 To iYmax
            arrDataNew(b, i) = arrData(i, b)
        Next i
    Next b
    array_transpose = arrDataNew
Exit_Err:
    Exit Function
Err_Handler:
    MsgBox Err.Description
    Resume Exit_Err
End Function

Liebe Grüße
Ingo
MissPh!
Office-VBA-Programmiererin


Verfasst am:
25. Feb 2013, 16:32
Rufname:
Wohnort: NRW


AW: Variable Dimensionierung eines Arrays - AW: Variable Dimensionierung eines Arrays

Nach oben
       Version: Office 2007

An dem Script ist nichts zu ändern, die Frage ist doch, wie du anschließend mit dem Array umgehst.

Und was an dem Auszug aus der Access-Hilfe nicht zu verstehen ist, musst du mir auch erst noch erklären.

_________________
Gruß MissPh!
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: DoCmd.TransferText in variable Datei 0 ipeters 229 05. März 2013, 12:45
ipeters DoCmd.TransferText in variable Datei
Keine neuen Beiträge Access Tabellen & Abfragen: Variable in SQL (Abfrage) 9 Sham 417 03. Sep 2012, 13:25
Sham Variable in SQL (Abfrage)
Keine neuen Beiträge Access Tabellen & Abfragen: SQL-Abfrageergebnis aus VBA in Variable speichern 1 gast11111 1215 27. Jun 2012, 13:51
KlausMz SQL-Abfrageergebnis aus VBA in Variable speichern
Keine neuen Beiträge Access Tabellen & Abfragen: variable Abfrage bei verknüpften Tabellen 2 Gast 305 14. Dez 2011, 17:06
clemens25 variable Abfrage bei verknüpften Tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: Variable Datumswerte in einer SQL-Developer Abfrage 2 mbbrth10 1252 03. Mai 2011, 17:16
mbbrth10 Variable Datumswerte in einer SQL-Developer Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mit variable als kriterium 11 mütze0815 304 24. März 2010, 02:53
mütze0815 Abfrage mit variable als kriterium
Keine neuen Beiträge Access Tabellen & Abfragen: Variable aus Formular an Anfügeabfrage übergeben 2 Gast 926 10. Aug 2009, 19:31
Gast Variable aus Formular an Anfügeabfrage übergeben
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mit Variable? 7 Ferialpraktikant 398 06. Aug 2009, 13:49
Ferialpraktikant Abfrage mit Variable?
Keine neuen Beiträge Access Tabellen & Abfragen: Aktualisierungsabfrage variable Anzahl Felder 0 schmello 1230 20. März 2009, 09:57
schmello Aktualisierungsabfrage variable Anzahl Felder
Keine neuen Beiträge Access Tabellen & Abfragen: Variable in Pfad für Tabellenerstellungsabfrage einbauen 6 damoddin 1936 30. Okt 2008, 17:28
damoddin Variable in Pfad für Tabellenerstellungsabfrage einbauen
Keine neuen Beiträge Access Tabellen & Abfragen: variable Spalte 3 Eva22 511 03. Jun 2008, 17:06
Willi Wipp variable Spalte
Keine neuen Beiträge Access Tabellen & Abfragen: ODBC-Verbindung DSN aus ini-Datei oder Variable 2 Ichbindabei 2128 22. Apr 2008, 08:44
Ichbindabei ODBC-Verbindung DSN aus ini-Datei oder Variable
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Project