menar du:
Dim rs
Set rs = conn.execute("select * from tabell")
Do Until rs.eof
response.write rs("fält") & "<br>"
rs.movenext
loop
19 svar · 286 visningar · startad av Ricki
Tjena,
Jag undrar om det går att hämta poster från en databas utan att använda ett recordset. Typ såhär:
Conn.Execute "Select * From Tabell"
Hur gör jag sedan för att skriva ut alla poster som finns i tabellen?
menar du:
Dim rs
Set rs = conn.execute("select * from tabell")
Do Until rs.eof
response.write rs("fält") & "<br>"
rs.movenext
loop
Det där kommer inte att få, för connection objectet stöder inte EOF och movenext
Jodå, connectionobjektet stödjer visst movenext och EOF...
det gör det visst det, det blir automatiskt ett recordset när den känner av att det kommer något ur en databas.
recordset ska du bara använda när du ska hämta poster, aldrig annars.
Har för mig att jag läst någonstans om hur man sparar resultatet från eb databasfråga i en vanlig array... minns inte riktigt vart jag läste det
Jag hör av mig om jag hittar det.
Recordset behöver du inte använda när du hämtar poster...
Man behöver inte initiera objektet Recordset för att hämta poster ur databasen...
ok, vide, men vad är det du får tillbaka när du skriver set rs = conn.execute (blaha)?
ä de'nte ett recordset, månne?
Jo, visst är det det. Man måste ha ett recordset för att returnera raderna i sökningen.
Ni missförstår mig nog... visst, ett recordset skapas automatiskt genom att exekvera connetcionsobjektet med en SQLsats... via detta skapas ett recordset (Set RS = ...), men du behöver aldrig skapa det mauellt (Set Rec = server.createobject(ADODB.recordset)) för en hämtning av poster... Vi menar samma sak, fast med olika ord...
getrows?..
genom att använda bengt = rs.getrows(), så får du en array som ser ut precis som ditt recordset. sen kan du lägga den i ett applicationobjekt om du vill, och bara snurra igenom arrayen för att visa olika dynamiska menyval, eller rubriker i en produktkatalog till exempel.
Men man måste fortfarande använda recordset för att kunna använda den.
Då är ju getrows ganska värdelös.
danmagnus: visst måste du använda recordsetet för att fylla på med data, men när arrayen väl är skapad så kan du ju stänga recordsetet och bara läsa från arrayen.
Förstår inte varför man vill bli av med recordset:et....
Handlar det om serverresurser får man använda adUseClient, så att man kan stänga kopplingen till databasen, men fortsätta att använda recordset:et
jag kan berätta varför jag gjort det:
i utgångspunkt hade vi vårt affärssystem på en sql server v6.5, och vi hade en hel mängd sql-frågor från vår e-handelslösning. många av dessa sql-frågor var samma, och syftade till att plocka fram en katalogstruktur för vårt produktsortiment (c:a 60000 artiklar). vi vill ju inte visa rubriker som inte har några artiklar i sig.
hur som helst: dessa frågor resulterade i processer som av outgrundlig anledning låste andra processer, typ rapportkörningar o.dyl.
då satte jag upp lite kod i application onstart som läser ut hela den aktuella katalogstrukturen till arrayer, med getrows(), som jag sedan sparade ner i application-objekt. när sedan någon av mina kollegor gjorde ändringar i strukturen, som påverkade katalogstrukturen, gjorde de också en uppdatering av application-objekten.
inte nog med att vi blev av med de låsande processerna, prestandan blev oerhört mycket bättre i systemet.
därför, emission, kan man vilja undvika att jobba med recordsets.