Jeg har en upload-form (aspSmartUpload), hvor jeg lægger filerne i en mappe der bliver navngivet efter id-nummeret..... men hvordan får jeg id-nummeret før jeg har lavet min execute?? Skal og kan jeg gøre det af 2 gange eller hvad?
newfolderpath = "d:\billeder\" & id Set myUpload = Server.CreateObject("aspSmartUpload.SmartUpload") myUpload.Upload
for at hente ID nummeret på det nyeste indlæg i databasen skriver du følgende:
dim rs set rs = oConn.Execute ("select top 1 from into _tabel")
response.write("ID på seneste indlæg i databasen: " & rs("id")
jeg kan ikke helt huske om den vælger den øverste post eller den nederste - hvis den vælger den øverste indsætter du bare denne kode efter into _tabel: order id DESC - eller ASC. det er fordi jeg er vant til at bruge mysql hvor denne kommando med kun at hente én værdi fra en database hedder select * from into _tabel LIMIT 1... jeg håber det er noget der kan bruges.
Under alle omstændigheder er du nød til at tilgå databasen for at få et ID ud.
En løsning hvor du først hendter ID fra en gammel record og ligger en til selv i ASP koden er en skod læsning hvis nu to brugere vil de samme får du to billeder med samme ID og ikke og en fejl ved databasen...
Så du er nød til at indsætte de nye data og hendte det nye unike ID på en bestem måde se her:
Ja det kan jo nok bruges..... ,men jeg forstår alligevel ikke helt hvordan jeg skal gøre. Jeg skal jo bruge id-et allerede i min øverste linie af dem jeg skrev her:
det kan godt være vi er inde i noget lidt mindre smart kodning det ved jeg ikke men her er mit bud:
dim rs set rs = oConn.Execute ("select top 1 from into _tabel")
newfolderpath = "d:\billeder\" & rs("id")+1 'læs mærke til vi plusser den her Set myUpload = Server.CreateObject("aspSmartUpload.SmartUpload") myUpload.Upload
grunden til at jeg plusser id'en lidt længere oppe er jo at hvis det er sat til at være autonummereing (hvilket jeg går ud fra id er sat til) så vil den altid lave tallet én gang højere... så derfor bliver det plusset.
først så laver du sådan så den opretter en tom tabel i databasen: conn.execute("insert into _tabel (opl) values('')")
så skulle der gerne være et nyt felt... nu henter vi det felt: set rs = conn.execute("select top 1 from _tabel order by id DESC")
og så kommer al den anden kode her... newfolderpath = "d:\billeder\" & rs("id") Set myUpload = Server.CreateObject("aspSmartUpload.SmartUpload") myUpload.Upload
oConn.Execute ("update _tabel set opl = '" + opl + "', billede = '" + billede + "' where id = " + rs("id"))
det har virket for mig i nogle af mine andre projekter men den koden her har jeg bare skrevet uden at ha' testet det så hvisi kke det virker håber jeg du fanger idéen.
Nu har jeg selv kommet med et forslag der også er en smule skodagigt, men som ihvertfald virker bedre end "+1 - modellen". Det går på at jeg først opretter en nu post og lige derefter updaterer den med de nye oplysninger og id-et.... Jeg tror det virker...
Det vil viker men hvis du ikke bruger mit forslag i linkne så vil på før eller siden få et problem hvis du har mange brugere som kan rette på samme tid. Vi antager to bruger får lavet en Insert på samme tid... Så laver de denne på samme tid: set rs = conn.execute("select top 1 from _tabel order by id DESC")
og dermed vil de få samme max ID ud og det vil kun være rigtigt for den "sidste" af de to brugere...
SQL = "INSERT INTO _tabel (opl, billede) values ( '" + opl + "', '" + billede + "');" conn.Execute SQL ' do the insert, and then... Set RS = Conn.Execute( "SELECT @@IDENTITY" ) idOfNewlyAddedRecord = RS(0) RS.Close
Så har du det rigtige id i idOfNewlyAddedRecord hvis tallet er 0 er det fordi database drivere/providren ikke giver det rigtigt tilbage og man kan gøre det sådan her:
Så har du id i den sidste indsatte i idOfAddedRecord.
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.