webForumDet fria alternativet

Hur lägga in referens till ej ännu inlagd (id)post i db?

ASP

12 svar · 342 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Ok, formulär för filmfaktaindatning.
Min tanke är att i ett formulär lista mina befintliga personer i databasen i olika selectboxar.
Om personen man söker finns väljer man den annars skriver man in ett nytt namn i en textruta.
Så långt allt väl.
Men... på nästa sida: add.asp som tar emot formuläret hur gör jag då?

Om en ny person och film läggs till vill jag lägga in en post, fld_p_id i tbl_movie, men jag har ju inte tillgång till det id:t eftersom posten inte är skapad ännu?

Min databas:

tbl_movie_title
---------------
- fld_mt_id Räknare (int autonumber)
- fld_mt_name Text(255)
- fld_mt_desc PM

tbl_person
----------
- fld_p_id Räknare (int autonumber)
- fld_p_firstname Text(255)
- fld_p_lastname Text(255)
- fld_p_bio PM

tbl_movie
---------
- fld_m_mtid Tal
- fld_p_id Tal
- fld_o_id Tal

tbl_occupation
---------
- fld_o_id Räknare (int autonumber)
- fld_o_title Text

1 huvudroll
2 producent
3 biroll
4 regisör

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 18 dec 2001]

[Redigerat av solbulle den 18 dec 2001]

Medlem sedan dec. 19996 721 inlägg
#2

Hej!

Du måste helt enkelt lägga in posten i tbl_movie_title först, och plocka det nya id-nummer som du får.

Hur det går till beror lite på vilken DBMS du använder. I SQL Server (och sannolikt även Access 2000) kan man...

strSQL="INSERT INTO tbl_movie_title (fld_mt_name,fld_mt_desc) VALUES('titel','beskrivning');SELECT @@IDENTITY"

set objRS=objConn.Execute(strSQL).Nextrecordset

[b]intID=[/b]objRS(0)
Medlem sedan mars 20015 287 inlägg
#3

Okelidoki, jag använder mig av Access, jag får pröva din kod och hålla tummarna. :)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20015 287 inlägg
#4

Hm... nu har jag vändit och vridit på det hela, samt sökt o läst på annat håll i forumet, men inte får jag till det.
Antingen blir det:
"Current provider does not support returning multiple recordsets from a single execution"

Eller:

"...Characters found after end of SQL statement."

??? (Kod som ovan)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan juni 200032 967 inlägg
#5

Jag tror inte att access gillar att du ställer två frågor på samma gång. Du måste nog dela upp det, och ställa två frågor.

Mvh,

------------------
har du sett Bires lilla häst?

Medlem sedan mars 20015 287 inlägg
#6

Jag löste det på detta sätt, det var det enda som fungerade för mig:

	Connection.Execute(SQLStmt)
SQLStmt = "SELECT Max(fld_mt_id) As LastID FROM tbl_movie_title"
Set RS = Connection.Execute(SQLStmt)
intLastID = RS("LastID")

Men nu har jag fler problem.
I mitt formulär kan jag ("bara" än så länge) i en selectbox välja en person ur databasen som producent, i en annan selectbox väljer jag huvudrollsinnehavare osv.

Dessa måste jag ju lägga in som flera rader i min relationstabell tbl_movie

Hur är bästa sättet att göra det? En funktion?

(Är det någon som har synpunkter på upplägget i stort så hojta gärna!)
------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 19 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#7

Du får göra en insert per värde. Allt måste ske inom en transaktion dock.

Att använda select max frö att få fram senast inlagda id är inte helt säkert. Det är bättre att använda select @@identity i stället.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#8

Ok, jag trodde det fanns någon genväg ;)
Har sprungit rakt in i väggen vad det gäller select @@identity så jag får se om jag kan ändra på det längre fram.
(Skulle jag få betalt för den tid jag sitter o försöker o pysslar med det här vore jag rik nu...)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 200012 464 inlägg
#9

Vad är det för problem med @@identity då?

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#10

Jag får inte till det, tycker att jag har försökt på alla möjliga sätt..
Får mest de felmeddelanden jag skrev i tidigare inlägg.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 200012 464 inlägg
#11

Men det var väl när du lade det i samma sträng som insert?

strSQL="INSERT INTO tbl_movie_title (fld_mt_name,fld_mt_desc) VALUES('titel','beskrivning')"
objConn.Execute strSQL,,128

set objRS = objConn.execute("SELECT @@IDENTITY")

intID=objRS(0)

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#12

Attans! Det är nära nu. Nu kan jag lägga till datan men jag får bara ut 0 (noll) i intID?

Vad gör jag för fel nu då?

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20015 287 inlägg
#13

Det fungerar! Yes!

------------------
/solbulle
Hemmabio | Spelautomater | The Who

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)