[ASP + MSSQL Server] cursor- en locktype niet te setten?

Pagina: 1
Acties:

  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Ik heb sinds kort een website bij een hoster. Maar binnen de kortste keren kom ik erachter dat ik geen recordcount kan op vragen: ik krijg -1 terug. Ik ben dus meteen gaan zoeken naar de oorzaak van de -1 en krijg snel het inzicht dat het cursortype daarmee te maken heeft. Ik heb toen gecontroleerd welk cursortype dan aan de recordset zit (gewoon uit laten responsen) en daar blijkt 0 uit te komen, terwijl ik toch echt 1 meegeef als cursortype. Ik dus mailen naar de hoster:
Ik gebruik ergens een recordset die ik met cursortype 1 en locktype 3 open. Ik wil graag van de recordset de RecordCount methode aanroepen om het opgehaalde aantal records te krijgen, maar ik krijg -1 terug. Ik heb precies dezelfde code op mijn eigen PC (IIS 5.1 en MSSQL Server 2000) draaien en daar geeft hij WEL het juiste aantal records. Ik heb al op Internet (en ja, ook in de faq van jullie site) gezocht naar een mogelijke oplossing, maar ik kom alleen maar uit op oplossingen waarbij gezegd wordt dat de cursortype en locktype dan anders moeten staan. Dat heb ik allemaal al geprobeerd, maar ik krijg er geen enkele beweging in. Heb je enig idee waar ik de oplossing nog in kan vinden?
Het antwoord dat ik hierop kreeg is het volgende:
Het ligt er waarschijnlijk aan dat je niet genoeg rechten op een shared MS-SQL. Het heeft ook beperkingen op een shared server. ;)
Ik ben verder gaan zoeken hier op GOT en kwam nog dit topic tegen. Daaruit blijkt dus dat zonder DSN op een of andere manier je een locktype moet gaan setten en met een DSN niet.
Mijn vragen:
  1. Wat is er waar van het verhaal over de DSN-en?
  2. Komt het voor dat hosters het verbieden om een flauw iets als een cursor- en locktype te veranderen?
  3. Mocht het echt zo zijn dat ik dit niet meer kan gebruiken (wat me ERG vreemd lijkt), dan zal ik wel wat aanpassingen in mijn script maken, maar ik vind dat dat eigenlijk niet nodig moet zijn. Hoe is jullie mening over het aanpassen van scripts omdat de hoster bepaalde (standaard)bewerkingen niet ondersteunt?
Ik ben benieuwd naar de reacties!

[ Voor 29% gewijzigd door bdgroot op 22-04-2005 12:46 ]

Laat een computer nooit merken dat je gehaast bent.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:27

gorgi_19

Kruimeltjes zijn weer op :9

Dit topic heeft minder met programmeren te maken, maar eerder met configureren van SQL Server en de motivatie hier achter :)

* gorgi_19 geeft het topic een enkele reis richting Software Algemeen

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Ik ben blijven puzzelen. Nu heb ik de volgende code:
ASP:
1
2
3
4
5
Set rsInschrijvingen = Server.CreateObject("ADODB.Recordset")
    
rsInschrijvingen.Open sqlInschrijvingen, Conn
    
response.write("ct:" & rsInschrijvingen.CursorType & " lt:" & rsInschrijvingen.LockType)

Dit levert op:
ct:0 lt:1
offtopic:
Is het met code erbij nu wel PW?

Ik vergeet wat. Ik heb namelijk ook een pagina gemaakt waarbij alleen maar een recordset geopend wordt met het juiste cursor- en locktype:
ASP.NET Visual Basic:
1
2
3
4
5
6
7
sql = "SELECT * FROM Inschrijving"

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open sql, Conn, 1, 3

response.write("CT: " & rs.CursorType & " LT: " & rs.LockType)

Output:
CT: 1 LT: 3

[ Voor 78% gewijzigd door bdgroot op 25-04-2005 14:39 ]

Laat een computer nooit merken dat je gehaast bent.


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Dan maar een schopje doen... weinig reactie tot nu toe... ik wacht af :)

Laat een computer nooit merken dat je gehaast bent.


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
En nog verder blijven zoeken... en wat ontdekt:

Ik heb het volgende stuk code helemaal bovenaan mijn pagina gezet (voordat er allemaal andere rare dingen ZOUDEN KUNNEN gebeuren):
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sqlInschrijvingen = "SELECT * FROM Inschrijving"
Set rsInschrijvingen = Server.CreateObject("ADODB.Recordset")
rsInschrijvingen.Open sqlInschrijvingen, Conn, 1, 3
response.write("CT: " & rsInschrijvingen.CursorType & " LT: " & rsInschrijvingen.LockType & "<BR>")

sqlInschrijvingen = "SELECT * FROM Inschrijving"
Set rsInschrijvingen = Server.CreateObject("ADODB.Recordset")
rsInschrijvingen.Open sqlInschrijvingen, Conn, 1, 3
response.write("CT: " & rsInschrijvingen.CursorType & " LT: " & rsInschrijvingen.LockType & "<BR>")
        
sqlInschrijvingen = "SELECT DISTINCT i.InschrijvingID, wi.WedstrijdID, i.PaarID, i.Standaard AS Std, i.Latin AS La, h.Naam AS Heer, d.Naam AS Dame, std.KlasseStdID, std.Naam AS Standaard, la.KlasseLaID, la.Naam AS Latin FROM Inschrijving i, Heer h, Dame d, Paar p, KlasseStd std, KlasseLa la, WedstrijdInschrijving wi WHERE h.HeerID IN (SELECT HeerID FROM Paar WHERE PaarID = i.PaarID) AND d.DameID IN (SELECT DameID FROM Paar WHERE PaarID = i.PaarID) AND std.KlasseStdID IN (SELECT KlasseStdID FROM KlasseStd WHERE KlasseStdID = (SELECT KlasseStdNu FROM Paar WHERE PaarID = i.PaarID)) AND la.KlasseLaID IN (SELECT KlasseLaID FROM KlasseLa WHERE KlasseLaID = (SELECT KlasseLaNu FROM Paar WHERE PaarID = i.PaarID)) AND i.InschrijvingID IN (SELECT InschrijvingID FROM WedstrijdInschrijving WHERE WedstrijdID = (SELECT WedstrijdID FROM Wedstrijd WHERE DatumEind = (SELECT MIN(DatumEind) FROM Wedstrijd WHERE WedstrijdID IN (SELECT WedstrijdID FROM WedstrijdInschrijving)))) AND wi.InschrijvingID = i.InschrijvingID ORDER BY std.KlasseStdID, la.KlasseLaID"
Set rsInschrijvingen = Server.CreateObject("ADODB.Recordset")
rsInschrijvingen.Open sqlInschrijvingen, Conn, 1, 3
response.write("CT: " & rsInschrijvingen.CursorType & " LT: " & rsInschrijvingen.LockType)

response.end

Wat ik dus eigenlijk doe: ik voer eerst 2 keer dezelfde query achter elkaar uit en daarna voer ik een andere (veel langere ingewikkeldere) query uit.
De outut hiervan is:
CT: 1 LT: 3
CT: 1 LT: 3
CT: 0 LT: 1
Kan IEMAND mij hiervoor een plausibele verklaring geven? En misschien zelfs een oplossing (om dus het cursor- en locktype het goede getal te geven en niet om een workaround te vinden, want dat lukt me wel)???

Laat een computer nooit merken dat je gehaast bent.


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik ga dit topic toch even terugmoven naar PW; dit lijkt mij behoorlijk programmeerwerk specifiek en minder te maken hebben met configuraties oid :)

SA > PWS

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:52
Waarom doe je niet gewoon een select count(1) als je de recordcount wilt weten ?

https://fgheysels.github.io/


  • abeker
  • Registratie: Mei 2002
  • Laatst online: 14:31

abeker

...

De combinatie van je cursortype en het resultaat dat je query oplevert is incompatible, cursor type adOpenKeyset werkt alleen als de rows in de recordset 'updatable' zijn, dwz als je een wijziging in een row maakt, dan moet de driver weten welke row in de database daar bij hoort.

Kun je in jouw situatie niet volstaan met cursortype adOpenStatic (3)?

the less one forgets, the less one remembers


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
whoami schreef op dinsdag 26 april 2005 @ 11:50:
Waarom doe je niet gewoon een select count(1) als je de recordcount wilt weten ?
Dit zou ik in een nieuwe query moeten doen? Vind ik persoonlijk nogal omslachtig, zeker als blijkt dat die recordcount wel werkt bij andere resultsets.. Ik vroeg ook naar een verklaring voor het feit dat dat nu niet kan... workarounds zijn er zat te verzinnen denk ik.
Toch wel wat geleerd.. want ik wist niet dat select count(1) "bestond", meteen maar ff opgezocht :) Mja.. nog altijd geen echte verklaring...

Laat een computer nooit merken dat je gehaast bent.


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
abeker schreef op dinsdag 26 april 2005 @ 11:57:
De combinatie van je cursortype en het resultaat dat je query oplevert is incompatible, cursor type adOpenKeyset werkt alleen als de rows in de recordset 'updatable' zijn, dwz als je een wijziging in een row maakt, dan moet de driver weten welke row in de database daar bij hoort.

Kun je in jouw situatie niet volstaan met cursortype adOpenStatic (3)?
Die ga ik proberen :) maar weet niet of dat wel werkt.. we zullen zien!

Laat een computer nooit merken dat je gehaast bent.


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:52
bdgroot schreef op dinsdag 26 april 2005 @ 12:08:
[...]

Dit zou ik in een nieuwe query moeten doen? Vind ik persoonlijk nogal omslachtig, zeker als blijkt dat die recordcount wel werkt bij andere resultsets..
Mja, een aparte query, maar ws efficienter dan de manier waarop jij het nu wilt doen...
Als jij mbhv je recordset wilt weten hoeveel records erin zitten, dan moet je in sommige gevallen eerst door je hele recordset lopen, wat dus wil zeggen dat alle records eens gefetched moeten worden.

https://fgheysels.github.io/


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
whoami schreef op dinsdag 26 april 2005 @ 12:11:
[...]

Mja, een aparte query, maar ws efficienter dan de manier waarop jij het nu wilt doen...
Als jij mbhv je recordset wilt weten hoeveel records erin zitten, dan moet je in sommige gevallen eerst door je hele recordset lopen, wat dus wil zeggen dat alle records eens gefetched moeten worden.
Daar heb je gelijk in.. dat is goedkoper. Maar de oplossing die degene na jou aandroeg blijkt nu dus wel te werken! Ik heb hem dus nu wel in een recordcount. Nu heb ik dus een adOpenStatic cursor en ik bleek daarbij de locktype ook terug te moeten zetten naar 1. Het probleem is verholpen! TNX abeker!!
't is een goeie dag vandaag: ik heb net getekend voor mijn nieuwe baan, dit is opgelost en nu is mijn website helemaal werkend :D Feest!! :)

Laat een computer nooit merken dat je gehaast bent.

Pagina: 1