18. august 2004 - 11:11
Der er
11 kommentarer og
1 løsning
INSERT i 2 tabeller med et relateret felt skaber problemer
Hej
Jeg har et problem med en form der skal gemmes i 2 tabeller, hvor den ene tabel refererer til den anden.
Altså der oprettes først data i tabellen kunde hvorefter at der opettes data i tabellen kontakt. Jeg har derfor brug for kundeId fra tabellen kunde til at sætte ind i tabellen kontakt for at kontaktpersonen kan refereres til kunden.
Det bør nævnes at telefonnr er oprettet som variabel tidl. i koden.
Koden ser sådan ud indtil videre.
Conn.Execute ( "INSERT INTO kunde (kundenavn, telefonnr, adresse, postnr, [by], dato, klokkeslaet, statusKunde, noter, website, oprettetDato, oprettetAf, brugerId, kundeGruppeMainId) VALUES ('" & Request.Form("kundenavn") & "','" & telefonnr & "','" & Request.Form("adresse") & "','" & Request.Form("postnr") & "','" & Request.Form("by") & "','" & dato & "','" & Request.Form("klokkeslaet") & "','" & Request.Form("statusKunde") & "','" & Request.Form("noter") & "','" & Request.Form("website") & "','" & Now & "','" & Session("navn") & "', '" & Session("brugerId") & "', '" & Request.Form("kundeGruppeMain") & "')" )
strSQL = "SELECT kundeId FROM kunde WHERE telefonnr = " & telefonnr
Set rsKundeId = Conn.Execute(strSQL)
Conn.Execute ( "INSERT INTO kontakt (kundeId, kontaktnavn, titel, telefonnrD, email, oprettetDato, oprettetAf, primaerKontakt) VALUES ('" & rsKundeId("kundeId") & "','" & Request.Form("kontaktperson") & "','" & Request.Form("titel") & "','" & Request.Form("telefonnr2") & "','" & Request.Form("email") & "','" & Now & "', '" & Session("navn") & "', 'true')" )
18. august 2004 - 11:31
#5
fennec: Tak. Det var lige det jeg søgte.
Vil en sådan forespørgsel kunne skabe problemer / være "teknisk forkert" da der ikke refereres direkte til den kunden.
Jeg tænker på: hvis der nu er 100 brugere, der klikker opret samtidigt, kan det så ske at Set rsKundeId = Conn.Execute("SELECT @@IDENTITY AS kundeId") henter en anden brugers "indtastning"?
18. august 2004 - 11:36
#7
Det skulle den helst ikke. Jeg skrev det på den måde, fordi jeg ikke er sikker på om Access understøtter denne funktion. Der få du det hele på en gang.
set rsKundeId = conn.execute("SET NOCOUNT ON; INSERT INTO DinTabel(...) VALUES(...); SELECT @@IDENTITY AS kundeId;")
18. august 2004 - 11:43
#9
select @@identity er ganske sikker, så længe det er samme connection som din INSERT
bliver lavet på, helt uanset andre brugere. Du behøver ikke den sidste version.
18. august 2004 - 11:52
#11
når du f.eks opdatere din database, får du en returværdi som angiver hvormange felter der er blevet påvirket. Ved at sætte "SET NOCOUNT ON" sender den IKKE det tilbage.
Prøv f.eks dette:
set rs = conn.execute("update EnTabel set Enkolonne='et eller andet' where HvadVedJeg='EtEllerAndet'", AntalOpdateretFelter)
så angiver AntalOpdateretFelter hvor mange felter der er blevet påvirket.
18. august 2004 - 11:55
#12
Iøvrigt ser det ud til at Access ikke kan finde ud af at afvikle denne:
set rsKundeId = conn.execute("SET NOCOUNT ON; INSERT INTO DinTabel(...) VALUES(...); SELECT @@IDENTITY AS kundeId;")
Får at vide:
Microsoft JET Database Engine (0x80040E14)
Der er fundet tegn efter slutningen af SQL-sætningen.
Så jeg benytter blot første forslag.
Tak til alle.