Jonathan Stein <jstein@image.dk> wrote in <3AC8682C.BB5069F5@image.dk>:
>Jesper Stocholm wrote:
>
>> Jeg har nogle data, hvor jeg trækker en delmængde ud - dvss en enkelt
>> række, der kan være sorteret. Jeg har nu behov for at kunne finde /den
>> forrige/ indgang i rækken - givet ved en celleværdi. Jeg har derfor
>> behov for at gennemløbe rækken - og i tilfælde af et match - gå et
>> skridt tilbage og udtrække værdien. Er min værdi fx 39 og min række
>>
>> 45
>> 76
>> 39
>> 56
>>
>> ... skal den returnere 76
>
> En anden work-around. Lav et auto-increment id-felt (hvis du ikke
> allerede har
>det, og brug to SQL-sætninger:
> SQL = "SELECT * FROM ProblemTable WHERE prnumber=" & prnumber
> [Execute...]
> id = objrs("id")
> SQL = "SELECT * FROM ProblemTable WHERE id < " & id & " ORDER BY id
> DESC" [Execute...]
>
> - Du har nu det recordset, du ønsker. (Du kan evt. sætte "TOP 1" eller
> "LIMIT
>1" på begge SQL-sætninger).
>
mjaeh ... men jeg vil meget gerne undgå dette - specielt da jeg ikke umiddelbart har
adgang til at ændre i selve datamodellen. Derfor skulle det gerne virke med den
eksisterende datamodel. Jeg er heller ikke helt sikker på, at din løsning vil virke (har
dog ikke helt gennemtænkt det), da recordset kan være sorteret på op til 5 forskellige
måder - uafhængigt af ID.
Fx kan tabellen med ID og PRNr se således ud:
| PRNr | ID |
-------------
45 5
76 4
39 9
56 1
Jeg har sidder og lavet lidt om på det, og min kode er nu følgende:
set conn = server.createobject("ADODB.Connection")
conn.Open "testclca"
set objrs = server.CreateObject("ADODB.Recordset")
prnumber = 39
sql_nav = "SELECT * FROM ProblemTable"
objrs.Open sql_nav, conn, adOpenKeyset,'<-- Linie 10
Flag = 0
objrs.MoveFirst
do while not objrs.EOF AND Flag <> 1
if cint(objrs("prnumber")) = cint(prnumber) then
objrs.Moveprevious '<-- linie 15
prid = objrs("prnumber")
Flag = 1
end if
objrs.MoveNext()
loop
hvor jeg får fejlen
ADODB.Recordset (0x800A0C93)
Operation is not allowed in this context
Det, der nager mig mest, er at jeg ikke kan få nogen af recordset-metoderne til at virke.
Hvis jeg udskriver objrs.recordcount får jeg -1 og hvis jeg bruger "objrs.CursorLocation
= adUseServer" får jeg fejlen
ADODB.Recordset (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one
another.
Så imo lugter det lidt af, at der er en property, der er sat forkert ... eller har fået
en forkert værdi.
.... jeg kan bare ikke se hvor ...
--
Check out the first review of Mac OS X at
http://wincent.org/transitional/final.pgp.txt
- Jesper Stocholm -
http://stocholm.dk