webForumDet fria alternativet

Fråga om databashantering...

ASP

5 svar · 838 visningar · startad av Donatello

Medlem sedan jan. 2005108 inlägg
Frågan#1
Set databasen = koppling.Execute("SELECT * FROM tabellen" )
dim ekorren,satti,granen
IF ekorren = True THEN
  släng in 'satti' i fältet 'satti' i databasen
END IF
IF granen = databasen("satti") THEN 
  granen = skulleskalakottar(granen)
END IF
databasen.close

Okej... Vad jag försöker göra är att först uppdatera ett fält i databasen. Eftersom uppdateringen ligger i en ifsats är det inte säkert att detta kommer ske...
Sen vill jag längre ner kolla vad som ligger i det fältet. Men jag får det inte riktigt att funka. Det här är bara en pyttedel av all kod som kan ha strulat till sig, men jag misstänker att det är bland annat här det krånglar...

Frågan är: Måste jag köra om SELECT satsen för att få ut det nya värdet ur databasen?

Tillägg: Hur viktigt är det egentligen att stänga en databaskoppling? Tycker det inte verkar vara nån skillnad alls om man skippar databasen.close... Eller är det en säkerhetsrisk eller nåt sånt skumt? :)

Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Ska du endast ha det värde, varför belasta servern med att hämta något som du redan vet vad det är?

För att veta vad och var du gör saker, gör testutskrifter.
Att lägga tid på att laga problem som inte finns är onödigt!

Angående stängning och rensning kan man hoppa över dem.
Du måste ha en väldigt belastad webbplats för att märka någon skillnad.

Att det däremot hör till programmeringen att städa efter sig är en annan sak, därför ska man göra det ändå. :h

Medlem sedan jan. 2005108 inlägg
#3

Grejen är den att jag inte vet värdet i databasen, pga if...
Vad som händer är att jag först kanske (IF satsen) lägger in nåt i tabell 4. Sen ska det i tabell 4 jämföras med innehållet i tabell 1. Och med tanke på att det i taball 4 kanske har ändrats, kanske inte, så känns det lättast att kolla vad som ligger där än att springa omvägar och göra 3-4 if satser till som håller koll på om det har ändrats etcetera. För att sen i slutändan kanske behöva kolla i databasen ändå...
Usch vad rörigt det där blev... :OO

Medlem sedan feb. 200112 078 inlägg
#4

J.N. skrev:

Angående stängning och rensning kan man hoppa över dem.

Ursäkta, men jag skulle nog vilja påstå att det är väldigt kritiskt att se till att åtminstone sätta sina ADODB.Connection-objekt till Nothing, eftersom din connectionpooling kommer att bli värdelös annars. Förespråka aldrig att lämna sådana objekt öppna, det finns ingen som helst anledning, speciellt inte i ASP3/COM.

För de som inte är insatta i vad connectionpooling är, så kan man förklara det lite snabbt med en samling databaskopplingar som ligger "halvaktiva" i en behållare på servern. När en användare behöver en av dessa kopplingar så hämtar servern automagiskt upp denna (redan öppnade) kopplingen och slipper därmed overheaden att instansiera en ny. Först när din connectionpool är tom (alltså när andra användare redan använder alla kopplingar i poolen), så kommer du explicit få en ny, som sedan förstörs/poolas. Om ingen stänger sina kopplingar (t.ex. inte sätter dem till Nothing) så tar det mycket längre tid innan de åter hamnar i poolen, vilket i sin tur resulterar i; 1) o-poolade connections som släpar och inte gör någon nytta mer än upptar resurser och 2) overhead för servern när nya connections öppnas eftersom poolen blir tom efter ett tag.

Stäng alltid dina connections.

Donatello » Du vill väl inte på seriöst allvar säga att dina variablar heter som du har skrivit i koden? Det blir ju fullständigt ologiskt om man håller på sådär.. kan du inte posta lite ordentlig kod istället?

Medlem sedan jan. 2005108 inlägg
#5

Klart jag inte skriver så. Jag var bara fruktansvärt uttråkad när jag skrev inlägget! :P

Sen har det blivit en vana att inte lägga ut kod, efter att en bekant till mig som la ut kod i ett forum råkade lägga ut lite för mycket och fick sin sida hackad. Har kanske blivit lite paranoid. Kan försöka lyfta fram lite mer i framtiden. :OO

Nu ska jag sätta mig å fimpa databaskopplingar. Tack för hjälpen. :e

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Donatello skrev:

Grejen är den att jag inte vet värdet i databasen, pga if...
Vad som händer är att jag först kanske (IF satsen) lägger in nåt i tabell 4. Sen ... kolla i databasen ändå...
Usch vad rörigt det där blev... :OO

Då låter det som att konstruktionen är rörig, att göra om den är enklare!

Om du inte vet var du är i dina ifsatser, skriv ut "ifsats 1", "uppdaterar" etc, annars är det omöjligt att lösa ett problem.

OveRRidE skrev:

Ursäkta, men jag skulle nog vilja påstå att det är väldigt kritiskt att se till att åtminstone sätta sina ADODB.Connection-objekt till Nothing, eftersom din connectionpooling kommer att bli värdelös annars. Förespråka aldrig att lämna sådana objekt öppna, det finns ingen som helst anledning, speciellt inte i ASP3/COM.

Eftersom jag alltid städar efter mig gick jag på min erfarenhet som består i de gånger man hittar en sida som man missat städningen på, och webben fungerar ändå.
Å andra sidan beror det på att det är en sida, och inte den mest belastade sidan, som alla besöker.

Tack för utläggningen om connection-objektet!

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)