/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
access/asp error
Fra : Christian Epstein


Dato : 25-06-04 21:22

Kære NG

Er der nogen der kan se noget forkert i denne her kode, den skulle gerne
tælle antallet af recordsets og gå til et tilfældigt record set af de
tilgængelige

<!-- kode start -->

'rsmon count code
Dim strRsmonCount
rsmon.movelast
strRsmonCount = rsmon.GetRows()
strRsmonCount = UBound(strRsmonCount, 2) + 1
response.write "There were " & strRsmonCount & " matches."

'rsmon find id
Dim strMonId
Function RandomNumber(intHighestNumber)
   Randomize
   RandomNumber = Int(Rnd * intHighestNumber) + 1
End Function
strMonId = RandomNumber(strRsmonCount)
response.write "You selected id " & strMonId

rsmon.Move strMonId

<!-- kode slut -->

For en

Microsoft OLE DB Provider for ODBC Drivers error '80040e24'

Rowset does not support fetching backward.

/epstein/orpg/includes/getrandommonster.inc, line 17

fejl...

???/christian

på forhånd tak

spørgsmålet er også stillet i access gruppen

 
 
Jens Gyldenkærne Cla~ (25-06-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-06-04 22:33

Christian Epstein skrev:

> Er der nogen der kan se noget forkert i denne her kode, den
> skulle gerne tælle antallet af recordsets

Nej - du har kun ét postsæt (recordset) i din kode. Du har til
gengæld sikkert flere poster (records) i postsættet.

Man kan godt arbejde med flere postsæt, men det er ikke det du gør
her.


> og gå til et tilfældigt record set af de tilgængelige

Så er det en meget ineffektiv metode du har valgt.

Pt. gør du følgende:


a) Hent data til et postsæt

b) Rul frem til sidste post

c) Gem data fra postsættet i et array (rsmon.getrows())

d) Find et tilfældigt nr. via index-værdierne fra arrayet

e) Forsøg at flytte postsættet til en specifik post


Der er flere problemer med denne fremgangsmåde. For det første skal
du, hvis du vil benytte getrows, glemme alt om at læse direkte fra
postsættet. Du kan altså springe punkt b og e over i listen
herover, og hente data direkte fra dit array.

Selv med denne metode er der stadig en del overflødige data der
flyttes fra databasen til asp-parseren - eftersom du henter alle
poster bare for at vise en enkelt. Hvis datasættet ikke opdateres
dynamisk, kan du bruge en kode som denne:

' Maksværdien for id-feltet i tabellen
Const maxID = 42

Dim findNumber

' Find et tilfældigt nummer mellem 1 og maxID + 1
findNumber = RandomNumber(maxID)

Dim sql

sql = "SELECT TOP 1 * FROM tabel WHERE id <= " & Cstr(findNumber)


Metoden virker også selv om der er "huller" i id-rækken, men den
giver i så fald ikke en perfekt ligefordeling mellem værdierne.
Hvis det ikke er et problem, skulle den virke fint.

Man kan også udbygge den så maxID findes fra databasen i stedet.
Det giver et ekstra kald, men det bør stadig være væsentlig
hurtigere end først at hente alle data fra en stor tabel og
derefter finde en enkelt post herfra.


> spørgsmålet er også stillet i access gruppen

Dårlig ide - specielt når der ikke også er krydspostet. Spørgsmålet
hører hjemme i asp-gruppen, også selv om det er Access der bruges
som database. Det er asp-koden der volder problemer - ikke
sql/databasekoden.

Læs i øvrigt gerne siden her:
<http://usenet.dk/netikette/crosspost.html>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Christian Epstein (26-06-2004)
Kommentar
Fra : Christian Epstein


Dato : 26-06-04 15:21

Jens Gyldenkærne Clausen wrote:
> Christian Epstein skrev:
>
>
>>Er der nogen der kan se noget forkert i denne her kode, den
>>skulle gerne tælle antallet af recordsets
>
>
> Nej - du har kun ét postsæt (recordset) i din kode. Du har til
> gengæld sikkert flere poster (records) i postsættet.
>
> Man kan godt arbejde med flere postsæt, men det er ikke det du gør
> her.

Det er jeg med på, dårligt formuleret fra min side undskyld.

>
>
>
>>og gå til et tilfældigt record set af de tilgængelige
>
>
> Så er det en meget ineffektiv metode du har valgt.
>
> Pt. gør du følgende:
>
>
> a) Hent data til et postsæt
>
> b) Rul frem til sidste post
>
> c) Gem data fra postsættet i et array (rsmon.getrows())
>
> d) Find et tilfældigt nr. via index-værdierne fra arrayet
>
> e) Forsøg at flytte postsættet til en specifik post
>

Det er den eneste måde jeg har fundet der har været bare i nærheden af
det jeg vil, nemlig at først finde antal af records (med to krav i en
AND sætning) nemlig at det det bruger level brugeren har er større end
min level (fra database) og mindre end max level (en anden post i database)


>
> Der er flere problemer med denne fremgangsmåde. For det første skal
> du, hvis du vil benytte getrows, glemme alt om at læse direkte fra
> postsættet. Du kan altså springe punkt b og e over i listen
> herover, og hente data direkte fra dit array.
>

Det vidste jeg ikke... (tak)

> Selv med denne metode er der stadig en del overflødige data der
> flyttes fra databasen til asp-parseren - eftersom du henter alle
> poster bare for at vise en enkelt. Hvis datasættet ikke opdateres
> dynamisk, kan du bruge en kode som denne:
>
> ' Maksværdien for id-feltet i tabellen
> Const maxID = 42
>
> Dim findNumber
>
> ' Find et tilfældigt nummer mellem 1 og maxID + 1
> findNumber = RandomNumber(maxID)
>
> Dim sql
>
> sql = "SELECT TOP 1 * FROM tabel WHERE id <= " & Cstr(findNumber)
>
>
> Metoden virker også selv om der er "huller" i id-rækken, men den
> giver i så fald ikke en perfekt ligefordeling mellem værdierne.
> Hvis det ikke er et problem, skulle den virke fint.
>
> Man kan også udbygge den så maxID findes fra databasen i stedet.
> Det giver et ekstra kald, men det bør stadig være væsentlig
> hurtigere end først at hente alle data fra en stor tabel og
> derefter finde en enkelt post herfra.

Men det kan jeg ikke få til at virke så det bliver tilfældigt, hvis den
både skal vælge min og max level??? Du må meget gerne hjælpe hvis du har
idéer...

>
>
>
>>spørgsmålet er også stillet i access gruppen
>
>
> Dårlig ide - specielt når der ikke også er krydspostet. Spørgsmålet
> hører hjemme i asp-gruppen, også selv om det er Access der bruges
> som database. Det er asp-koden der volder problemer - ikke
> sql/databasekoden.
>

Men jeg vidste ikke om der evt. var en måde man kunne få access til at
søge på de ting, og derefter fortælle hvor mange poster der var mulige,
problemet er jo så at hvis de ikke har løbende id, kan jeg jo ikke
bagefter finde den rigtige post...

Er stadig meget forvirret, men det hjalp da lidt...

/Christian :S

Christian Epstein (26-06-2004)
Kommentar
Fra : Christian Epstein


Dato : 26-06-04 22:02

Christian Epstein wrote:
> Jens Gyldenkærne Clausen wrote:
>
>> Christian Epstein skrev:
>>
>>
>>> Er der nogen der kan se noget forkert i denne her kode, den
>>> skulle gerne tælle antallet af recordsets
>>
>>
>>
>> Nej - du har kun ét postsæt (recordset) i din kode. Du har til
>> gengæld sikkert flere poster (records) i postsættet.
>>
>> Man kan godt arbejde med flere postsæt, men det er ikke det du gør
>> her.
>
>
> Det er jeg med på, dårligt formuleret fra min side undskyld.
>

Jeg har faktisk 2 recordssets åbne fra 2 forskellige databaser, har det
nogen betydning???

>>
>>
>>
>>> og gå til et tilfældigt record set af de tilgængelige
>>
>>
>>
>> Så er det en meget ineffektiv metode du har valgt.
>>
>> Pt. gør du følgende:
>>
>>
>> a) Hent data til et postsæt
>>
>> b) Rul frem til sidste post
>>
>> c) Gem data fra postsættet i et array (rsmon.getrows())
>>
>> d) Find et tilfældigt nr. via index-værdierne fra arrayet
>>
>> e) Forsøg at flytte postsættet til en specifik post
>>
>
> Det er den eneste måde jeg har fundet der har været bare i nærheden af
> det jeg vil, nemlig at først finde antal af records (med to krav i en
> AND sætning) nemlig at det det bruger level brugeren har er større end
> min level (fra database) og mindre end max level (en anden post i database)
>
>
>>
>> Der er flere problemer med denne fremgangsmåde. For det første skal
>> du, hvis du vil benytte getrows, glemme alt om at læse direkte fra
>> postsættet. Du kan altså springe punkt b og e over i listen
>> herover, og hente data direkte fra dit array.
>>
>
> Det vidste jeg ikke... (tak)
>
>> Selv med denne metode er der stadig en del overflødige data der
>> flyttes fra databasen til asp-parseren - eftersom du henter alle
>> poster bare for at vise en enkelt. Hvis datasættet ikke opdateres
>> dynamisk, kan du bruge en kode som denne:
>>
>> ' Maksværdien for id-feltet i tabellen
>> Const maxID = 42
>>
>> Dim findNumber
>>
>> ' Find et tilfældigt nummer mellem 1 og maxID + 1
>> findNumber = RandomNumber(maxID)
>>
>> Dim sql
>>
>> sql = "SELECT TOP 1 * FROM tabel WHERE id <= " & Cstr(findNumber)
>>
>>
>> Metoden virker også selv om der er "huller" i id-rækken, men den
>> giver i så fald ikke en perfekt ligefordeling mellem værdierne.
>> Hvis det ikke er et problem, skulle den virke fint.
>>
>> Man kan også udbygge den så maxID findes fra databasen i stedet.
>> Det giver et ekstra kald, men det bør stadig være væsentlig
>> hurtigere end først at hente alle data fra en stor tabel og
>> derefter finde en enkelt post herfra.
>
>
> Men det kan jeg ikke få til at virke så det bliver tilfældigt, hvis den
> både skal vælge min og max level??? Du må meget gerne hjælpe hvis du har
> idéer...
>
>>
>>
>>
>>> spørgsmålet er også stillet i access gruppen
>>
>>
>>
>> Dårlig ide - specielt når der ikke også er krydspostet. Spørgsmålet
>> hører hjemme i asp-gruppen, også selv om det er Access der bruges
>> som database. Det er asp-koden der volder problemer - ikke
>> sql/databasekoden.
>>
>
> Men jeg vidste ikke om der evt. var en måde man kunne få access til at
> søge på de ting, og derefter fortælle hvor mange poster der var mulige,
> problemet er jo så at hvis de ikke har løbende id, kan jeg jo ikke
> bagefter finde den rigtige post...
>
> Er stadig meget forvirret, men det hjalp da lidt...
>
> /Christian :S

Christian Epstein (26-06-2004)
Kommentar
Fra : Christian Epstein


Dato : 26-06-04 22:17

Lige nu har jeg følgende kode:

<!-- kode snip start -->

strSQL = "Select * From monsters Where MinLevel <= " & rs("Level") & "
And MaxLevel >= " & rs("Level")

[CUT]

'rsmon count code
Dim strRsmonCount
strRsmonCount = rsmon.GetRows()
strRsmonCount = UBound(strRsmonCount, 2) + 1
response.write "There were " & strRsmonCount & " matches."

'rsmon find id
Dim strMonId
Function RandomNumber(intHighestNumber)
   Randomize
   RandomNumber = Int(Rnd * intHighestNumber) + 1
End Function
strMonId = RandomNumber(strRsmonCount)
response.write "You selected id " & strMonId

<!-- kode snip slut -->

Det her er helt sikkert ikke den mest effektive måde, men er stadig den
eneste jeg har fundet der duer. (den henter rs("Level") fra en anden
crypteret bruger database)

Desværre kan jeg bare ikke få lov til at flytte til strMonId.
(rsmon.move strMonId)
Får følgende fejl:

ADODB.Recordset error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted.
Requested operation requires a current record.

Er der ikke nogen der vil være venlig at hjælpe, alle idéer, forslag og
løsninger er meget velkomne

/Christian

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste