Jon Klose Larsen skrev:
> loop gennem rs og hvis post findes
> opdater post
> ellers
> opret post
> end
Helt gal fremgangsmåde. Du skal *aldrig* gennemløbe et postsæt for
at tjekke om en given post findes - brug *altid* en select-sætning
til det. Det er ikke bare hurtigere, men mange, mange gange
hurtigere.
Når du ikke ved om posten findes kan du gå frem på flere
forskellige måder. Den simple vil være følgende:
a) Tjek om posten eksisterer =>
select count(*) as antal from tabel where [kriterium]
b) Hvis posten eksisterer (rs("antal") > 0), opdater =>
UPDATE tabel SET felt = nyværdi, ... WHERE [kriterium]
c) Hvis posten ikke findes (rs("antal") = 0), opret =>
INSERT INTO tabel (felt1, felt2, ...) VALUES (værdi1, værdi2, ...)
Det giver to sql-kald, intet gennemløb af poster og kun overførsel
af en enkelt værdi (antallet af poster der opfylder kriteriet) fra
databasen til asp-siden.
Ved at bruge fejlhåndtering kan man spare det ene kald væk i nogle
situationer. Tricket er at man antager at det er én af de to mulige
handlinger (opdatering eller oprettelse) der skal udføres - og når
man så har udført den, tjekker man om det gik godt.
Hvis man fx antager at posten findes i forvejen, kører man en
update-sætning og tjekker så hvor mange poster der blev ændret (via
egenskaben recordsaffected). Hvis der ikke er ændret nogen poster,
vil recordsAffected være 0, og så kan man så køre en insert-
forespørgsel.
Brugen af fejlhåndtering kan give en mindre forbedring i forhold
til den simple løsning, men selv den simple løsning vil være en
kæmpe forbedring i forhold til din nuværende løsning.
> loop gennem rs
> hvis check1 <> X1
> opdater post
> end
> hvis check2 = X2
> opdater post
> end
>
> rs.movefirst
Jeg forstår ikke helt hvorfor du opdaterer i små bidder i stedet
for at opdatere det hele på en gang. En update-sætning kan snildt
klare at opdatere samtlige felter på en gang (bortset fra
situationer med lange tekster i notatfelter).
Update-sætningen kan også fint opdatere flere poster på én gang,
hvis det er fælles værdier der skal tildeles.
Et par eksempler:
Opdater varetabellen, sæt alle priser op med 25 %:
UPDATE varer SET pris = pris * 1.25
Opdater varetabellen, sæt alle priser op med 10 kr.
UPDATE varer SET pris = pris + 10
Opdater varetabellen, sæt alle priser til 100 kr
UPDATE varer SET pris = 100
Opdater varetabellen, sæt mindsteprisen på alle varer til 20 kr
UPDATE varer SET pris = 20 WHERE pris < 20
--
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