Avatar billede oliverdb Nybegynder
06. februar 2001 - 14:33 Der er 11 kommentarer og
1 løsning

Recordset versus stored procedures

Jeg har en STORED PROCEDURE (sql ting), some returnerer en mængde data ind til et recordset(rs).
Jeg vi nu gerne lave det sådan at jeg kun præsenterer f.eks 10 poster ad gangen . Dette gøres ved at man tæller antallet af poster(for at vide hvor mange sider man skal have)

rs.pagecount

Men dette virker ikke for data retuneret fra en stored procedure. Kun ved et direkte kald fra klienten ,som f.eks
\"SELECT * FROM TABLE\"

Jeg SKAL bruge stored procedure, men .PageCount virker ikke.

Hvad gør jeg istedet???..


ps Bruger ASP 2.0


Avatar billede gandalfthewhite Nybegynder
06. februar 2001 - 14:37 #1
Prøv at sætte Cursorlocation på din connection til adUseClient (dvs. conn.CursorLocation = adUseClient). Denne feature kan kun bruge hvis cursoren er client side.
adUseClient er ifølge adovbs.inc = 3

Avatar billede oliverdb Nybegynder
06. februar 2001 - 14:50 #2
Jeg får følgende fejl...

Microsoft VBScript runtime error \'800a01b6\'

Object doesn\'t support this property or method: \'rs.pagecount\'

/UUF-Vejl/Vedligeholder/BrugerAdm/steder_insertform.asp, line 36



Her er koden
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open (\"xxxx; xxxx; xxxx\") \'tilrette oplysninger
    \'ODBC connection

conn.CursorLocation = adUseClient
Set rs = Server.CreateObject(\"ADODB.RecordSet\")




    test = \"SKOLE_SP\"
    rs.open test,conn,3,3
   
    rs.pagecount
Avatar billede kasseper Nybegynder
06. februar 2001 - 14:52 #3
hvorfor gør du det også på den måde ????

Du kan eksekvere din sp sådan her :

Set objCmd = Server.CreateObject(\"ADODB.Command\") \' object oprettes
Set objCmd.ActiveConnection = Conn \' objectets forbindelse sættes til din connection
objCmd.CommandType = adCmdStoredProc \' objectets typer er en stored proc.
objCmd.CommandText = \"SKOLE_SP\" \' navnet på din proc. sættes her.
Set rs = objCmd.Execute() \' opretter et recordset med resultatet....


så skulle den da gerne kunne lave pagecount
Avatar billede oliverdb Nybegynder
06. februar 2001 - 15:03 #4
Skal jeg gøre det her ISTEDET for min nuværende kode, eller som supplerende..

Avatar billede oliverdb Nybegynder
06. februar 2001 - 15:05 #5
Nogenlunde sådan her???

    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open (\"xxxx; xxxx; xxxxx\")
    Set objCmd = Server.CreateObject(\"ADODB.Command\")
    Set objCmd.ActiveConnection =Conn
    objCmd.CommandType = adCmdStoredProc
    objCmd.CommandText = \"SKOLE_SP\"
   
   
    Set rs = objCmd.Execute()
   
   
    \'rs.open test,conn,3,3
   
    rs.pagecount
Avatar billede kasseper Nybegynder
06. februar 2001 - 15:08 #6
ISTEDET.
og hvorfor, jo det er fordi at command objected er specielt lavet til sp\'s, så lad være med at eksekver den gennem dit connection objeckt.....
Ja det ser ud til at det er som det skal være
Avatar billede oliverdb Nybegynder
06. februar 2001 - 15:11 #7
Ked at jeg er et paphoved menb det virker dælme ikke...

Fejl:
Microsoft VBScript runtime error \'800a01b6\'

Object doesn\'t support this property or method: \'rs.pagecount\'


Kode:

    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open (\"DSN=UVSTEST; UID=SA; PWD=AND\")
    Set objCmd = Server.CreateObject(\"ADODB.Command\")
    Set objCmd.ActiveConnection =Conn
    objCmd.CommandType = adCmdStoredProc
    objCmd.CommandText = \"SKOLE_SP\"
   
   
    Set rs = objCmd.Execute()
   
   
   
   
    rs.pagecount
   
Avatar billede oliverdb Nybegynder
06. februar 2001 - 15:36 #8
YES YES Nu virker skidtet....

    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    conn.CursorLocation = adUseClient
    Conn.Open (\"DSN=UVSTEST; UID=SA; PWD=AND\")
    Set objCmd = Server.CreateObject(\"ADODB.Command\")
    Set objCmd.ActiveConnection =Conn
    objCmd.CommandType = adCmdStoredProc
    objCmd.CommandText = \"SKOLE_SP\"
   
   
    Set rs = objCmd.Execute()
   
   
    Response.write \"recordCount = \"&rs.recordcount


HVordan giver jeg point til dig kasseper??
Avatar billede gandalfthewhite Nybegynder
06. februar 2001 - 15:53 #9
Jeg har en gang oplevet at jeg blev nødt til at ændre min connectionstring, da den åbenbart også kan have indflydelse på hvilke funktioner der understøttes. Prøv at lege lidt med connection string.
PageCount m.m. er forholdsvis ny. Det kan derfor være at du bliver nødt til at opgradere til en nyere version af ado. Prøv evt. med MDAC 2.6 som kan downloades fra MS. Jeg kunne ikke finde noget på MSDN om i hvilken version paging funktionerne blev implementere, så der må jeg være svar skyldig.

Til KassePer vedr. din crudsade imod exekvering af sp via connection objectet.

Der er intet i vejen for at exekvere en sp via connection object hvis man ikke skal brug parametre. Dette sparer på systemressourcer, idet command objectet kommer med en solidt overhead. Derfro hvis du arbejder med systemer hvor der er mange brugere så håber jeg for din egen og systemets skyld at du også anvender conn.execute. Kunsten er selvfølgelig at vide hvornår man skal bruge command. Sp\'er uden parametre exekverer jeg ALTID via connection. Hvis et id nummer eller to skal sendes med bruger jeg stadig connection.
Hvis parametrene indeholder brugerindtastet text så brug command, så behøver du ikke checke for \' og \" m.m. Hvis jeg modtager flere recordset eller output variabler fra sp, så bruger jeg også command.

Avatar billede kasseper Nybegynder
06. februar 2001 - 15:54 #10
det gør du nu ?;)
Avatar billede kasseper Nybegynder
06. februar 2001 - 15:58 #11
gandalfthewhite >> Jeg er ikke enig med dig. Hvorledes er der overhead på command objected ?
Jeg har aldrig haft nogen problemer med command, heller ikke når jeg eksekvere MEGET tunge select statments, uden parametre....
Avatar billede gandalfthewhite Nybegynder
06. februar 2001 - 16:15 #12
Du bruger ekstra RAM og ekstra processorkraft på at oprette et command object. Dette betyder at ekskveringen er lidt langsommere.

Det betyder nok ikke det store på en web-server hvor der ikke er så meget tryk på, men hvis der er mange brugere kan uforbeholden brug af unødig overhead være med til at kvæle serveren.

Overhead er derfor ikke relateret til antallet af parametre eller komplexiteten af forespørgslen - som i forhold til command objectet bare er tekst - det er jo sql-server der håndterer selve forespørgslen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester