24. januar 2004 - 23:01Der er
17 kommentarer og 2 løsninger
Problemer med rs.RecordCount
Hej
Det er aldrig lykkedes mig at få rs.RecordCount til virke i mysql, selvom der er masse af records i et recordset. Den retunrer altid -1. Måske kan den slet ikke bruges i mysql, eller også skal den bruges på en bestemt måde. Jeg ved det ikke.
strQuery = "SELECT ID, URL, GRAFIK, VISNINGER FROM PLUSPROFIL_BANNER WHERE Type = 'maxi' AND VISNINGER < MAXVISNINGER ORDER BY VISNINGER / (to_days(now()) - to_days(Oprettelse)) LIMIT 0,3" set rs = dataConn.execute(strQuery) response.write "<br>antal: " & rs.RecordCount
Om Recordcount funktionen virker afhænger af den valgte cursor-type (client/server side / forward etc) og af om driveren understøtter recordcount.
Check MSDN for låsetyper og check på hjemmesiden hos det softwarehus har leveret den driver du benytter til MySQL - der må være noget whitepaper der fortæller hvad de har implementeret og hvad de ikke har.
Recordcount er, underligt nok, noget der ofte er udeladt...
Du har ret i det hele, trer, undtagen lige "Recordcount er, underligt nok, noget der ofte er udeladt..."
Det er ikke underligt, for det er en kostbar oplysning at give fra sig. Man er fx nødt til at vente på at sql-serveren bliver helt færdig med sin forespørgsel, før man overhovedet kan behandle den første række. Derfor udelades den tit.
erikjacobsen> På fx Ms SQL Server er den ikke specielt kostbar da statistikkerne ret præcist fortæller antal rækker - og ellers gør index det. I udarbejdelsen af Query planen skal optimizeren alligevel benytte oplysninger.
Men selvfølgelig - andre database motorer, andre forhold...
Spændende debat, men er der en, som har et konkret bud på, hvordan jeg får min kode til at virke :-D
strQuery = "SELECT ID, URL, GRAFIK, VISNINGER FROM PLUSPROFIL_BANNER WHERE Type = 'maxi' AND VISNINGER < MAXVISNINGER ORDER BY VISNINGER / (to_days(now()) - to_days(Oprettelse)) LIMIT 0,15" set rs = dataConn.execute(strQuery) randomize rs.Move(int(rs.RecordCount * rnd))
if not rs.eof then and not rs.eof then response.write "<a target=""_blank"" href=""" & rs("URL") & """><img border=""0"" width=""468"" height=""60"" src=""" & rs("Grafik") & """ onmouseover=""filters.alpha.opacity=100"" style=""FILTER: alpha(opacity:90)"" onmouseout=""filters.alpha.opacity=90""></a>" else response.write "<br>fejl" end if
PS. Husk at det er rs.RecordCount som giver -1, hvorfor det ikke virker.
>Måske kan du ved at åbne recordsæt rigtigt Er det da en forkert måde? ;) Og hvad er den grundlæggende forskel på at lave et recordset med "execute" og med "open"? (Og hvorfor dog have to måder at gøre det samme på.... ;))
Du kan sætte flere parametre på med rs.open. En conn.execute giver kun een af mulighederne, så vidt jeg husker blot almindelig fremadskridende læsning af dit rs.
Kan I hjælpe lidt? SKAL jeg have 2 select-sætninger?
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
strQuery = "SELECT ID, URL, GRAFIK, VISNINGER, COUNT(ID) as Banner_count FROM PLUSPROFIL_BANNER WHERE Type = 'maxi' AND VISNINGER < MAXVISNINGER ORDER BY VISNINGER / (to_days(now()) - to_days(Oprettelse) + 1) LIMIT 0,10" set rs = dataConn.execute(strQuery) randomize rs.Move(int(rs("Banner_count") * rnd))
Jeg kastede mig ikke over getrows, men fik i stedet count til at virke... koden er dog ikke så flot med count, fordi jeg nu har to select-sætninger.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.