Forum > ASP > Generella frågor
Hur gör man för att läsa in en databastabell i en array med en loop?
Set RecSet = Conn.Execute(SQL)
Do Until RecSet.EOF
xxx = RecSet("data")
RecSet.MoveNext
Loop
Sedan en följdfråga. Hur lägger jag till och tar bort värden ifrån den array'en för att sedan spara ner den i en annan databas?
| Skriv utKan du inte använda GetRows?
Annars:
Dim arr()
If Not RecSet.EOF
ReDim Preserve arr(RecSet.RecordCount)
dim i
Do Until RecSet.EOF
arr(i) = RecSet("data")
i = i + 1
RecSet.MoveNext
Loop
End If
Fördelen med GetRows är att du kan fortare stänga ner ditt RecordSet objekt och till och med ditt Connection Objekt -> Vilket kan ge bättre prestada då Databasen inte behöver slita allt för mycket att börja köra igenom via ett RecordSet, ASPn lagrar som en 2D-array och låta databasen vila.
Om det bara är "data" du vill hämta ut från ditt Recordset:
dim arr
Set Recset = Conn.Execute("SELECT data FROM table")
If Not RecSet.EOF Then arr = RecSet.GetRows
If IsArray(arr) Then
For i = 0 To UBound(arr, 2)
Response.Write arr(0, i ) & "<br />" ' This is just an Example.
Next
End If
Redigerad av voigtan
Anledning:
"Sedan en följdfråga. Hur lägger jag till och tar bort värden ifrån den array'en för att sedan spara ner den i en annan databas?"
Får man fråga i vilket Scenario du skulle vilja göra det? Om det är ifrån en databas så är det absolut enklast att bara filtrera ut den datan du inte vill hämta ut.
Redigerad av voigtan
Anledning:
Jag har en mängd flervalsdata som ligger i separata tabeller nu, som vill jag samla ihop till en array istället (nån sa att det skulle vara bättre) och placera i en. Men det är x antal hundra, så jag tänkte det går snabbare att loopa igenom hela databasen och sen dumpa det i den nya.
Sen vill jag samtidigt ta bort en del av alternativen och lägga till nya i array'en. Men det där du skrev fungerade inte. Den sa på alt. 2, att en ohanterad datatyp påträffades? Då har jag skrivit;
Set Recset = Conn.Execute("SELECT film FROM filmer")
If Not RecSet.EOF Then arr = RecSet.GetRowsPå Alt 1, fick jag tillbaka Felaktigt matrisindex:
Att loopa ut koden och dumpa ner den i en array kommer inte göra koden snabbare, den måste ju ändå loopa igenom hela recordsetet.
Hur ser "arr" ut i exempel två? (har du dimat den? den skall inte vara dim arr() på exempel två).
Alt1: Du kan prova skriva dim arr(0) i början... men fortfarande är detta enligt mig inte någon acceptabel lösning. sortera ut data gör ändå en SQL bättre än vad en LOOP gör (offtast).
Jo den dimmad som du skrev, utan ().
Men det gör alltså ingen skillnad att ha x antal data i en array i en tabell, än att ha dom var för sig?
Är det inte enklare att hämta hela array'en och ändra t.ex. arr(3) till något och sedan spara tillbaka, eller "enklare"... vilket är mest effektivt? snabbast?
Om jag t.ex. har en multiselect, och vill spara valen ur den, är det inte bäst då att spara dessa i en array?
Redigerad av KentA
Anledning:
1. GetRows sparar ner rådatan i en 2D array, den loopar inte ut något ifrån RecordSet - Vilket ger ett resultat att koden blir snabbare, och att du kan stänga ner ditt Recordset och även din Connection fortare än om du skulle använda Recordset att loopa osv.
2. MultiSelect? Menar du en <select> box med flera värden?
Vad vill du uppnå (rent praktiskt) med detta? du vill hämta ut "film" från databasen. vad ska du göra med alla "film":er du får ut? Skall du lista i en <select>? Och isåfall: var ska "ändring / tabort" saken komma in på?
Rent praktiskt. T.ex. kan en medlem i ett community välja saker som favoritfilm, bok, dryck, mm. och istället för att ha alla dessa val i separata kolumner i databasen, är det inte smartare att ha dessa i en array?
Nej, en databas måste du väl ha om man skall kunna lägga till fler filmer, annars måste du uppdatera arrayn statiskt hela tiden. Du kommer inte använda arrayn (Recordsetet) för att spara någon data av användaren utan användaren kommer välja vilka filmer hon gillar från en lista? Då kommer du få en "array" med IDn (om du har gjort:
<select name="movies" multiple="multiple" size="40">
<option value="1">Film 1</option>
<option value="2">Film 2</option>
<option value="3">Film 3</option>
<option value="4">Film 4</option>
<option value="5">Film 5</option>
</select>
Nej men snälla... det är väl självklart att jag ska ha en databas. Förstod du verkligen inte det? Driver du med mej?
Det var ju istället för att ha kanske ett tiotal kolumner med dessa data, som jag villa samla alla i en array, och sedan naturligtvis spara ner den i en kolumn.
Jo men du började skriva om att du vill spara från en array istället?
Att man exempelvis spara data i ett fält en tabell som:
film1, film2, film3 är inte ett korrekt sätt att spara data.
Även om du hade gjort:
en ny tabell och sen en ny post per film:
film1
film2
film3
som kopplas till användaren är ett mer korrekt sätt att lagra data på, och i slut ändan enklare att underhålla och lättare att använda på ett mer korrekt sätt (om vi ska hämta ut alla användare som gillar film3 exempelvis).
Så att lagrna ner alla filmer/böcker en användare gillar är mitt förslag:
Lagra det i en tabell med en ny post per uppgift, ger ingen onödig dubbellagring.
så att svara på frågan: "är det inte smartare att ha dessa i en array?" Nej det är det inte i mina ögon. Men om du har löst det på ett sätt som fungera för dig så.