PDA

Vollständige Version anzeigen : Array aus Recordset füllen


Nachricht Von Sam
25.09.2005, 21:37
Hallo,

ich würde gerne folgendes Array aus folgenden RS füllen


strsql = " Select Spieler.* " & _
" From Spieler


Public Sub test1()

Dim spieler(20)

spieler(1) = "Anja"
spieler(2) = "Werner"
spieler(3) = "Hans"
spieler(4) = "Otto"
spieler(5) = "Klaus"

spanz = 5

For x = 1 To spanz
For v = 1 To spanz

For Y = x + 1 To spanz
For w = v + 1 To spanz

Debug.Print spieler(x) & "/" & spieler(v) & ":"; spieler(Y) & spieler(w)

Next

Next

Next

Next
End Sub


kann mir jemand helfen?

Liebe Grüsse

Nouba
25.09.2005, 21:54
Public Sub test1
Dim Spieler() As String
Dim rs As DAO.Recordset
Dim i As Long

Set rs = DBEngine(0)(0).OpenRecordset("SELECT Spielername FROM Spieler", dbOpenSnapshot)
rs.MoveLast ' ich bin mir nicht sicher, ob das bei einem Snapshot notwendig ist
rs.MoveFirst
ReDim Spieler(rs.RecordCount - 1)

Do While Not rs.EOF
Spieler(i) = rs(0)
rs.Move.Next
i = i + 1
Loop
rs.Close
Set rs = Nothing
End Sub

Achtung - der erste Spieler steht in Spieler(0).

Nachricht Von Sam
25.09.2005, 23:35
Hi Nouba,

ups, mein Array funzt schon richtig. hab das mal so umgewandelt, damit schon mal einige Doublikate weg sind:


Public Function test1()

Dim spieler(20)

spieler(1) = "Anja"
spieler(2) = "Werner"
spieler(3) = "Hans"
spieler(4) = "Otto"
spieler(5) = "Klaus"

spanz = 5

For x = 1 To spanz
For v = 1 To spanz

For y = x + 1 To spanz
For w = v + 1 To spanz

If x <> v And x <> y And x <> w And v <> y And v <> w And y <> w Then
Debug.Print spieler(x) & "/" & spieler(v) & ":" & spieler(y) & "/" & spieler(w)
End If
Next

Next

Next

Next
End Function


damit erhalte ich:


?test1()
Anja/Werner:Hans/Otto
Anja/Werner:Hans/Klaus
Anja/Werner:Otto/Hans
Anja/Werner:Otto/Klaus
Anja/Werner:Klaus/Hans
Anja/Werner:Klaus/Otto

Anja/Hans:Werner/Otto
Anja/Hans:Werner/Klaus
Anja/Hans:Otto/Klaus
Anja/Hans:Klaus/Otto
Anja/Otto:Werner/Klaus
Anja/Otto:Hans/Klaus

Werner/Anja:Hans/Otto
Werner/Anja:Hans/Klaus
Werner/Anja:Otto/Hans
Werner/Anja:Otto/Klaus
Werner/Anja:Klaus/Hans
Werner/Anja:Klaus/Otto

Werner/Hans:Otto/Klaus
Werner/Hans:Klaus/Otto

Werner/Otto:Hans/Klaus

Hans/Anja:Otto/Werner
Hans/Anja:Otto/Klaus
Hans/Anja:Klaus/Werner
Hans/Anja:Klaus/Otto

Hans/Werner:Otto/Klaus
Hans/Werner:Klaus/Otto

Otto/Anja:Klaus/Werner
Otto/Anja:Klaus/Hans

Otto/Werner:Klaus/Hans


mhhhhhhhhhhhhh, richtig wäre doch:


Anja/Werner : Hans/Otto
Anja/Werner : Hans/Klaus
Anja/Werner : Otto/Klaus

Anja/Hans : Werner/Otto
Anja/Hans : Werner/Klaus
Anja/Hans : Otto/Klaus

Anja/Otto : Werner/Hans
Anja/Otto : Werner/Klaus
Anja/Otto : Hans/Klaus

Anja/Klaus : Werner/Hans
Anja/Klaus : Werner/Otto
Anja/Klaus : Hans/Otto


bei der umsetzung von nouba's code,

Public Function test2()Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strsql As String
Dim i As Long
Dim spieler() As String


strsql = " SELECT Test.Vorname " & _
" FROM Test"

Set db = CurrentDb()
Set rs = db.OpenRecordset(strsql, dbOpenSnapshot)

rs.MoveLast
rs.MoveFirst
spanz = rs.RecordCount
ReDim spieler(rs.RecordCount - 1)

Do While Not rs.EOF
spieler(i) = rs(0)
rs.MoveNext
i = i + 1
Loop

For x = 0 To spanz
For v = 0 To spanz

For y = x + 0 To spanz
For w = v + 0 To spanz
If x <> v And x <> y And x <> w And v <> y And v <> w And y <> w Then
Debug.Print spieler(x) & "/" & spieler(v) & ":" & spieler(y) & "/" & spieler(w)
End If
Next
Next
Next
Next

rs.Close
Set rs = Nothing
Set db = Nothing

End Function



wird der code nach


?test2()
Anja/Werner:Hans/Otto
Anja/Werner:Hans/Klaus


abgebrochen

markiert wird:

Debug.Print spieler(x) & "/" & spieler(v) & ":" & spieler(y) & "/" & spieler(w)

mit der MSG


Laufzeitfehler 9:

Index ausserhalb des gültigen Bereichs.


gibts dafür überhaubt eine Lösung?

Liebe Grüsse

Marita

Nachricht Von Sam
26.09.2005, 08:48
Guten Morgen zusammen,

keiner eine Idee?

Liebe Grüsse

Smaug
26.09.2005, 08:53
zum Füllen eines Arrays aus Recordset-Daten kann man sehr gut die GetRows-Methode verwenden:
Dim rs As DAO.Recordset, varArray As Variant
‘Aus der gesamten Tabelle wird nur ein Feld,das ausgewertet werden soll, eingelesen
Set rs = CurrentDb.OpenRecordset ("Select Vorname Test",dbOpenSnapshot)
rs.MoveLast ’da das Recordset noch leer ist, muss es zuerst gefüllt werden
rs.MoveFirst
varArray = rs.GetRows (rs.RecordCount) ’überführt das gesamte Recordset in ein Variant-Array
rs.Close
Set rs = Nothing
End Sub

Nachricht Von Sam
26.09.2005, 11:23
Danke für die liebe Hilfe,

aber es scheitert schon daran, dass ich nicht die richtigen Zuordnungen erreiche.


Public Function test1()

Dim spieler(4)

spieler(1) = "Anja"
spieler(2) = "Werner"
spieler(3) = "Hans"
spieler(4) = "Otto"
'spieler(5) = "Klaus"

spanz = 4

For x = 1 To spanz
For v = 1 To spanz

For y = x + 1 To spanz
For w = v + 1 To spanz

If x <> v And x <> y And x <> w And v <> y And v <> w And y <> w Then
Debug.Print spieler(x) & "/" & spieler(v) & " : " & spieler(y) & "/" & spieler(w)
End If

Next

Next

Next

Next
End Function


ergibt


?test1()
Anja/Werner : Hans/Otto
Anja/Werner : Otto/Hans
Anja/Hans : Werner/Otto
Werner/Anja : Hans/Otto
Werner/Anja : Otto/Hans
Hans/Anja : Otto/Werner


richtige wäre aber:


Anja/Werner : Hans/Otto
Anja/Hans : Werner/Otto
Anja/Otto : Werner/Hans


wo hab ich denn den Knoten im Hirn ?

wie bekomme ich die doppelten da heraus?

Liebe Grüsse

Nouba
26.09.2005, 11:42
Das Thema (Kombinationen) ist recht interessant und scheint eine kleine Kopfnuss zu sein. Ich denke dabei an eine reine Abfragelösung. In Oracle läßt sich die Aufgabenstellung, wenn ich sie recht verstanden habe, mit einem Multiset lösen - für Access müßte ich mal meinen Grips anstrengen (wird nicht vor heute Abend stattfinden).

Nachricht Von Sam
26.09.2005, 12:00
Danke für Deine Unterstützung und Interesse.

Ich probiere es auch weiter.

Ein Lösung auf Abfragenbasis hatte ich noch ins Visir gefasst.

Hört sich auch gut an.

Bin weiter sehr gespannt, wie das zu lösen ist.

Liebe Grüsse

Nachricht Von Sam
26.09.2005, 21:21
Guten Abend,

ich hab jetzt sämtliche IF's ausprobiert. Keine vernünftige Lösung gefunden.

Hat noch jemand eine zündende Idee, wie man/frau das lösen kann?

Nouba's Idee mit den Query's würd mich auch noch interessieren.

Liebe Grüsse

Nouba
26.09.2005, 23:13
Hallo Sam,

ich habe folgendes nicht auf Herz und Nieren geprüft.

<table border="1" class="tabletext"><tr><td class="tablehead1" colspan="7">Struktur der Tabelle <strong>tblSpieler</strong></td></tr><tr><td class="tablehead1" align="center"><strong>Feldname</strong></td><td class="tablehead1" align="center"><strong>Feldtyp</strong></td><td class="tablehead1" align="center"><strong>Default</strong></td><td class="tablehead1" align="center"><strong>Format</strong></td><td class="tablehead1" align="center"><strong>Eingabeformat</strong></td><td class="tablehead1" align="center"><strong>Eing. erf.</strong></td><td class="tablehead1" align="center"><strong>G&uuml;ltigkeitsregel</strong></td></tr><tr><td class="tabletext2">ID</td><td class="tabletext2">AutoWert</td><td class="tabletext2">&nbsp;</td><td class="tabletext2">&nbsp;</td><td class="tabletext2">&nbsp;</td><td class="tabletext2" align="center">[ &nbsp;]</td><td class="tabletext2">&nbsp;</td></tr><tr><td class="tabletext2">SPIELER</td><td class="tabletext2">Text (20)</td><td class="tabletext2">&nbsp;</td><td class="tabletext2">&nbsp;</td><td class="tabletext2">&nbsp;</td><td class="tabletext2" align="center">[x]</td><td class="tabletext2">&nbsp;</td></tr><tr><td class="tablehead1" colspan="7"><font size="-2">Tabellenentwurf mit <a href="http://home.arcor.de/ar/arne.d/datenbanken/tabtoweb/" target="_blank">TabToWeb 0.74</a> nach HTML 4.01 transferiert.</font></td></tr></table><br><table border="1" class="tabletext"><tr><td class="tablehead1" colspan="4">Indizes der Tabelle <strong>tblSpieler</strong></td></tr><tr><td class="tablehead1" align="center"><strong>Index</strong></td><td class="tablehead1" align="center"><strong>Eindeutig</strong></td><td class="tablehead1" align="center"><strong>Null ignor.</strong></td><td class="tablehead1" align="center"><strong>Feld(er)</strong></td></tr><tr><td class="tabletext2"><strong>PrimaryKey</strong></td><td class="tabletext2" align="center">[x]</td><td class="tabletext2" align="center">[ &nbsp;]</td><td class="tabletext2">ID</td></tr><tr><td class="tabletext2">SPIELER</td><td class="tabletext2" align="center">[ &nbsp;]</td><td class="tabletext2" align="center">[ &nbsp;]</td><td class="tabletext2">SPIELER</td></tr><tr><td class="tablehead1" colspan="4"><font size="-2">Indizes mit <a href="http://home.arcor.de/ar/arne.d/datenbanken/tabtoweb/" target="_blank">TabToWeb 0.74</a> ausgelesen und nach HTML 4.01 transferiert.</font></td></tr></table>ID Spieler
1 Anja
2 Werner
3 Hans
4 Otto
5 Klaus
SELECT
S1.SPIELER & "/" & S2.Spieler & " : " & S3.SPIELER & "/" & S4.SPIELER AS Paarung
FROM
tblSpieler AS S1
, tblSpieler AS S2
, tblSpieler AS S3
, tblSpieler AS S4
WHERE
S2.ID > S1.ID AND
S3.ID > S1.ID And
S3.ID <> S2.ID AND
S4.ID > S3.ID And
S4.ID <> S2.ID
ORDER BY S1.SPIELER & "/" & S2.Spieler & " : " & S3.SPIELER & "/" & S4.SPIELER
<table border="1" class="tabletext"><tr><td class="tablehead1" colspan="1">Daten der Abfrage <strong>qselPaarungen</strong></td></tr><tr><td class="tablehead1" align="center"><strong>Paarung</strong></td></tr><tr><td class="tabletext2">Anja/Hans : Otto/Klaus</td></tr><tr><td class="tabletext2">Anja/Hans : Werner/Klaus</td></tr><tr><td class="tabletext2">Anja/Hans : Werner/Otto</td></tr><tr><td class="tabletext2">Anja/Klaus : Hans/Otto</td></tr><tr><td class="tabletext2">Anja/Klaus : Werner/Hans</td></tr><tr><td class="tabletext2">Anja/Klaus : Werner/Otto</td></tr><tr><td class="tabletext2">Anja/Otto : Hans/Klaus</td></tr><tr><td class="tabletext2">Anja/Otto : Werner/Hans</td></tr><tr><td class="tabletext2">Anja/Otto : Werner/Klaus</td></tr><tr><td class="tabletext2">Anja/Werner : Hans/Klaus</td></tr><tr><td class="tabletext2">Anja/Werner : Hans/Otto</td></tr><tr><td class="tabletext2">Anja/Werner : Otto/Klaus</td></tr><tr><td class="tabletext2">Werner/Hans : Otto/Klaus</td></tr><tr><td class="tabletext2">Werner/Klaus : Hans/Otto</td></tr><tr><td class="tabletext2">Werner/Otto : Hans/Klaus</td></tr><tr><td class="tablehead1" colspan="1"><font size="-2">Abfrageinhalte mit <a href="http://home.arcor.de/ar/arne.d/datenbanken/tabtoweb/" target="_blank">TabToWeb 0.74</a> nach HTML 4.01 transferiert.</font></td></tr></table>

Nachricht Von Sam
27.09.2005, 07:53
Guten Morgen,

also die Idee ist Genial *****

Und liefert das richtige Ergebnis.

Test mit 4 Spielern => 3 Paarungen

Suuuuuuuuuuper*****


Liebe Grüsse

Marita