Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Flerdimensionella arrayer

Postades av 2003-01-20 23:27:14 - Peter Björklund, i forum asp - allmänt, Tråden har 6 Kommentarer och lästs av 464 personer

Försöker att initiera värden i en två dimensions array men jag lyckas inte.
Kan någon ge mig en hint vad jag gör fel. Så här ser koden ut som jag jobbar med.

Först en kod som funkar eftersom det då endast gäller en en-dimensionell array.

START FUNKAR ------------------------------------------------------

Dim arrData

Call main()

Private Sub main()
ReDim arrData(0)
Call CreateRS()
Call KillRS()
End Sub

Private Sub CreateRS()
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT TOP 5 * FROM ads ORDER BY IDAd DESC"
objRS.Open strSQL, objCon, adLockReadOnly, adCmdText
Do While Not objRS.EOF
ReDim Preserve arrData(UBound(arrData) + 1)
arrData(UBound(arrData)) = objRS("IDAd")
objRS.MoveNext
Loop
End Sub

SLUT FUNKAR -------------------------------------------------

I nedanstående kod vill jag jobba med en två dimensionell array och det är här felet uppstår.

START FUNKAR INTE -----------------------------------------

Dim arrData

Call main()

Private Sub main()
ReDim arrData(0,0)
Call CreateRS()
Call KillRS()
End Sub

Private Sub CreateRS()
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT TOP 5 * FROM ads ORDER BY IDAd DESC"
objRS.Open strSQL, objCon, adLockReadOnly, adCmdText
Do While Not objRS.EOF
ReDim Preserve arrData(UBound(arrData,1) + 1, arrData(UBound(arrData,2) + 1))
arrData(UBound(arrData,1)) = objRS("IDAd")
arrData(UBound(arrData,2)) = objRS("AdText")
objRS.MoveNext
Loop
End Sub

SLUT FUNKAR INTE --------------------------------------------------

Det gäller alltså sättet att initiera värden i en flerdimensionell array som jag inte får till.

Någon??!!

Tack på föhand


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-20 23:38:42 - Ronny Thörnvall

Lite osäker här men jag tror nog samma sak gäller för ASP här som gäller för VB. Du KAN INTE omdimensionera en arrays första dimension, endast den sista dimensionen (den andra i detta fall) kan ÖKAS, om jag minns rätt så finns denna begränsning bara när du använder ReDim...

Nu hann jag inte kika närmare på koden, det brukar finnas andra sätt att lösa problemet på som undviker ovanstående begränsning, i sista hand skulle du kanske annars få kopiera de gamla värdena till en helt ny, tom, array med rätt dimensioner, men detta brukar bli tidsödande när arrayerna blir lite större.

Anledningen till denna begränsning är hur data lagras internt i minnet av VB, har för mig att all data lagras successivt, och skulle du då öka på en inre dimension så måste all senare data flyttas, därför tillåts inte detta...

Det GÅR annars att skapa ett eget objekt, t ex nå'n länkad kedja som kan lösa ovanstående problem, fast då handlar det ju inte om arrayer längre... :-)

// Qez


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-20 23:48:08 - Ronny Thörnvall

Slängde ett öga på koden...

Om jag såg rätt så vill du egentligen bara flytta över två värden från databasfrågan till en array?! och så ökar du arrayen för att få plats med dessa värden?! Du skulle väl kunna ta reda på hur många poster du fick tillbaka i ditt recordset och sedan bara göra en dimensionering för att få plats med alla dessa på en gång, och slippa reDim i varje varv i loopen!?

Vill du ändå ReDimma, så ändra den sista dimensionen enligt mitt förra svar, t ex:

<code>

Private Sub CreateRS()
Set objRS = Server.CreateObject("ADODB.Recordset")
' Undvik '*' i SQL-Queries, hämta bara de intressanta kolumnerna
strSQL = "SELECT TOP 5 IDAd, AdText FROM ads ORDER BY IDAd DESC"
objRS.Open strSQL, objCon, adLockReadOnly, adCmdText
Do While Not objRS.EOF
' Ökar sista dimensionen i arrayen, den första är fast på 2 platser
ReDim Preserve arrData(1 To 2, UBound(arrData,2) + 1)
' Minns inte om VB började RS-arrayen på 0 eller 1?!
arrData(1,UBound(arrData,2)) = objRS(0)
arrData(2,UBound(arrData,2)) = objRS(1)
objRS.MoveNext
Loop
End Sub

</code>

Hoppas detta hjälper nå't?!

// Qez


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-21 09:22:55 - Peter Björklund

Det vill sig inte ändå. Får samma felmeddelande.
Jag får väl strunta i flerdimensionsarryer oc hitta på något annat.


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-21 09:46:19 - Fredrik Hjälte

Är det inte så att du ökar din array med +1 i varje dimension.
Det betyder att din array ökar så här
array(1,1)
array(2,2)
array(3,3)

Du får ju då en array som blir mer än tvådimensionell..... du skulle bara öka storleken på arrayen där du matar in rader.

Ex:
array(1,2)
redim....
array(2,2)
redim....
array(3,2)

Annars får du ju en ofantligt stor array till slut.

Sen matar du in värden i platserna

Dim a
a = array

Redim a(4,2)
a(0,0) = "Måndag"
a(1,0) = "Onsdag"
a(2,0) = "Fredag"
a(3,0) = "Lördag"
a(0,1) = "2"
a(1,1) = "4"
a(2,1) = "6"
a(3,1) = "7"

response.write a(0,0)


Sen är det sant att du inte kan köra Redim Preserve på den första "kolumnen"

Du kan alltså inte Redim Preserve a(5,2)
Där emot kan du Redim Preserve a(4,3)

Däremot kan du köra Redim a(5,2), men då rensar du allt data från arrayen.


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-21 10:51:18 - Peter Björklund

Jag kan förmodligen inte hantera fler dimensioner än en.

Tack alla som ville hjälpa. Jag gjorde så här istället - oklokt eller inte?
Kommentera gärna.

Dim arrDataID, arrDataText

Call main()

Private Sub main()
ReDim arrDataID(0)
ReDim arrDataText(0)
Call CreateRS()
Call KillRS()
End Sub

Private Sub CreateRS()
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT TOP 5 IDAd, AdText FROM ads ORDER BY IDAd DESC"
objRS.Open strSQL, objCon, adLockReadOnly, adCmdText
Do While Not objRS.EOF
ReDim Preserve arrDataID(UBound(arrDataID) + 1)
ReDim Preserve arrDataText(UBound(arrDataText) + 1)
arrDataID(UBound(arrDataID)) = objRS("IDAd")
arrDataText(UBound(arrDataText)) = CutString(objRS("AdText"))
objRS.MoveNext
Loop
End Sub

Sedan loopar jag ut innehållet i arrayerna så här:

For Each sItemText in arrDataText
If sItemText <> EMPTY Then
j = j + 1
For i = j To j
sItemID = arrDataID(i)
Response.Write sItemID & " " & sItemText
Next
End if
Next


Svara

Sv: Flerdimensionella arrayer

Postades av 2003-01-21 16:12:19 - Andreas Hillqvist

Jag skulle skrivit så här:
<code>
<%
Dim arrData

Const adOpenForwardOnly = 0
Const adLockReadOnly = 1
Const adCmdText = 1

Call main

Private Sub main()
Dim objCon
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Inetpub\wwwroot\AdDB.mdb"

arrData = CreateRS(objCon)

objCon.Close
Set objCon = Nothing

End Sub

Private Function CreateRS(objCon)
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "SELECT TOP 5 IDAd, AdText FROM ads ORDER BY IDAd DESC", _
objCon, _
adOpenForwardOnly, _
adLockReadOnly, _
adCmdText

If objRS.EOF Then
Else
CreateRS = objRS.GetRows()
End If

objRS.Close
Set objRS = Nothing
End Function

Dim Index
For Index = 0 To UBound(arrData, 2)
Response.Write arrData(0, Index) & " - " & arrData(1, Index) & "<br>" & vbCrLf
Next


%>
</code>


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 812
27 960
271 761
534
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies