Avatar billede tvb Nybegynder
27. november 2002 - 12:31 Der er 11 kommentarer

Hvordan får jeg id?

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

jeps = myUpload.save(newfolderpath)
opl= myUpload.Form("opl").Values
billede = myUpload.Files("billede").FileName

SQLInsert = "Insert into _tabel (opl, billede) values( '" + opl + "', '" + billede + "')"

oConn.Execute (SQLInsert)
Avatar billede famuz Nybegynder
27. november 2002 - 12:40 #1
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.

/Famuz
Avatar billede eagleeye Praktikant
27. november 2002 - 12:57 #2
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:

http://www.4guysfromrolla.com/webtech/tips/t122600-1.shtml

og her:

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=79
Avatar billede tvb Nybegynder
27. november 2002 - 13:11 #3
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:

newfolderpath = "d:\billeder\" & id

How to do?????
Avatar billede famuz Nybegynder
27. november 2002 - 13:19 #4
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

set rs = nothing

jeps = myUpload.save(newfolderpath)
opl= myUpload.Form("opl").Values
billede = myUpload.Files("billede").FileName

SQLInsert = "Insert into _tabel (opl, billede) values( '" + opl + "', '" + billede + "')"

oConn.Execute (SQLInsert)

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.

/famuz
Avatar billede tvb Nybegynder
27. november 2002 - 13:22 #5
det dur ikke famuz..... hvis brugeren sletter sidste post i tabellen og så opretter en ny, så fucker det op.....
Avatar billede famuz Nybegynder
27. november 2002 - 13:54 #6
ok jeg har en anden ide så...

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

jeps = myUpload.save(newfolderpath)
opl= myUpload.Form("opl").Values
billede = myUpload.Files("billede").FileName

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.
Avatar billede tvb Nybegynder
27. november 2002 - 13:56 #7
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...
Avatar billede famuz Nybegynder
27. november 2002 - 13:57 #8
hehe lige mine ord
Avatar billede tvb Nybegynder
27. november 2002 - 13:57 #9
ok, to sjæle en tanke.... men du var først, så hvis det virker får du pointene!!! Lige et øjeblik
Avatar billede eagleeye Praktikant
27. november 2002 - 21:31 #10
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...
Avatar billede eagleeye Praktikant
27. november 2002 - 21:36 #11
Eks med koden:

Conn.Open "Provider=MICROSOFT.JET.OLEDB.4.0; " _
    & "DATA SOURCE=" & Server.MapPath("somedir\somedb.mdb")

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:

RS.Open _table, yourAlreadyOpenConnection, adOpenKeySet, adLockOptimistic, adCmdTable
RS.AddNew
RS("opl") = opl
RS("billede") = billede
RS.Update
idOfAddedRecord = RS("nameOfAutonumberField")

Så har du id i den sidste indsatte i idOfAddedRecord.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester