strSQL = "SELECT Max(Thread_ID+1) AS ID FROM tblThread" lngThreadID = objConn.Execute(strSQL)("ID")
tabellen tblThread, Hvor Thread_ID er primary identety. sletter jeg en post lad os sige post 12. og køre det oven over finden den 11 +1 = 12 men når der oprettes i det bliver det jo nummer 13. da det er identety. Så når post 12 er brugt kan den aldrig komme tilbage.
Hvordan søre omgår jeg dette. så den her finde det næste id der faktisk vil blive skrevet.
strSQL = "SELECT Max(Thread_ID+1) AS ID FROM tblThread" lngThreadID = objConn.Execute(strSQL)("ID")
Som sagt kan @@identity kun bruges EFTER en indsættelse, men du bruger sikkert det ID her længere nede i din kode. For at det virker skal du nok have flyttet om på din kode så den kører i den rigtige rækkefølge.
Hvis du nu viser os hele din kode, har vi nemmere ved at se hvad du vil, og hvordan det løses...
Hehe... Nice der gav du mig en super ide. at flytte rundt på tingene. og oprette, indsætte, og her efter opdatere. så kan jeg nemlig få det til at virke..
I må gerne lave SVAR begge to. så acceptere jeg. Mange tak
har lige at spørsmål mere. Kan jeg låse de 2 tabeller mens min kode bliver kørt. LOCK ? så der ikke sker fejl hvis en bruger i forum poster en ny tråd på samme tid, så ider skifter mens min kode bliver afviklet.
Din kode er imidlertid forkert ... ellere retter sagt den vil fejle før eller siden når to brugere benytter dit script på samme tid.
Når dette sker kan de få indst på samme tid, og så er "... Max(Topic_ID) ..." pludselig en usikker størrelse. I stedet for skal du som sagt bruge "@@IDENTITY", og dette betyder at sådan en som:
fik at vide fra ham der har lavet forum, at det kun er 1 ud af 1.000.000 gange det sker med den max funktion. og så sage han at det ikke var et problem. forum retter det ved næste post hehe.. Så alt okay nu spiller det max..
"1 ud af 1.000.000 gange" er et meget løst udsagn som ikke har nogen vidre værdi. Hvor tit det sker afhænger ultimativt af hvor mange besøg et site har ... af belastningen.
Men hvorfor iøvrigt stille sig til tåls med at det fejler "1 ud af 1.000.000 gange" når man så let som ingen ting kan lave noget som aldrig fejler?!
Jeg har oplevet at MS-SQL ikke rigtig vil acceptere IDENTITY når det står i flere linjer. Det virker tilgængæld hvis du henter det ud sammen med insættelsen. Så skal du også kun køre EN sql:
sql = "SET NOCOUNT ON; Insert into Dintabel(..) values(..);SELECT @@IDENTITY AS ID;" set rs = objConn.execute(sql) lngTopicID = rs("ID")
Jeg oplevede dette for første gang for en måned siden, og har ikke haft tid til at undersøge hvorfor det sker. Om ikke andet så virker det når det står i samme linje.
PS, der var ingen fejl. den test jeg kørte kørte jeg bare i en test file jeg havde lavet.
<% strSQL = "SELECT SCOPE_IDENTITY() AS ID FROM tblTopic" lngTopicID = objConn.Execute(strSQL)("ID") %>
testerid: <%= lngTopicID %>
så jeg kunne se ID'et men den skrev jo ikke noget.
Alt okay nu, tak for din hjælp :)
Synes godt om
Ny brugerNybegynder
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.