24. maj 2012 - 15:05Der er
12 kommentarer og 1 løsning
Hvordan får jeg mit recordset læst ind i et array?
Jeg har en sql til en access db som retunere mig et recordset rst, men hvordan får jeg læst mit recordset ind i et array?
---------------------------------------- Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset With rst Src = "SELECT [NIIDSNo] & ' ' & [name] AS NiidsName......
rst.Open Src, con, adOpenForwardOnly, adLockReadOnly End With
iTal = 0 Do While Not rst.EOF iTal = iTal + 1 xArray(iTal) = ?????????? rst.MoveNext Loop
drop dit -------- iTal = 0 Do While Not rst.EOF iTal = iTal + 1 xArray(iTal) = ?????????? rst.MoveNext Loop -------- brug dette: -------- if rst.eof then rst.close response.write "Intet fundet." else arr=rst.getrows() rst.close antal=ubound(arr,2) ' behandl de enkelte linjer i et loop for i = 0 to antal response.write arr(0,i) 'det første felt i sql-sætningen response.write "<br>" response.write arr(1,i) 'det andet felt i sql-sætningen response.write "<hr>" next end if
mit var til udtræk til en hjemmeside - men den andet kan da tilrettes. Hvilket felt (nummer i rækkefølgen i udtrækket) skal du have i combo. før loop skal du tømme combo for evt gamle data ComboBox1.Clear og i loop er det så for i = 0 to antal ComboBox1.Add arr(0,i) 'det første felt i sql-sætningen next
Blander mig lige med min løsningsmåde i tillæg til de udmærkede svar.
For at isolere sig fra, i forskellige kodestumper, VBA's lavnivea indeks gymnastik, er det bekvemt med en 'put i array' subrutine:
Sub add2list(V, i) On Error Resume Next ReDim Preserve V(UBound(V) + 1) If err.Number = 13 Then ReDim V(0) If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i End Sub
Det anvendes således, idet jeg kun fokusere på array tildelingen.
dim arr with rsi(<sql>): while not .eof add2list arr,!fldname wend: end with
Man kan putte hvad som helst i arrayet - også andre arrays og objekter.
Med forkærlighed for generelle løsninger, ud over hvad spørgsmålet går på: Skulle man have den ambition at det resulterende array skal være 'flat', at tilsætning af arrays der potentielt indeholder arrays og så videre i recursiv forstand, skal bliver til et array der ikke indeholder arrays, løser følgende subrutine det:
'add simple types to list Sub addS2list(V, i) Dim ai On Error Resume Next If IsArray(i) Then For Each ai In i addS2list V, ai: Next Else ReDim Preserve V(UBound(V) + 1) If err.Number = 13 Then ReDim V(0) If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i End If End Sub
Hej Claes57 Så er den i skabet...... takker. Hvordan er det nu med point hvordan får jeg givet dig dem? mangler en "guk" box med "svar" i dit indlæg
--- If rst.EOF Then rst.Close Choice_UserForm.ComboBox2.AddItem "Error in connection" Else recArray = rst.GetRows() ' Behandl de enkelte linjer i et loop For i = 0 To UBound(recArray, 2) ' Det første felt i sql-sætningen Choice_UserForm.ComboBox2.AddItem recArray(0, i) Next End If --------
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.