12. december 2005 - 12:20
Der er
4 kommentarer og
2 løsninger
Oprettelse af flere records
Hey
Jeg står overfor i et ASP dokument at skulle tilføje flere records, og dette helst via ét et SQL-statement. Desuden skal jeg ved tilføjelsen af mine "under-records" benytte ID'et fra først oprettede record.
Man kan beskrive det med at jeg opretter en ordre i en tabel. Når denne er oprettet, skal der oprettes ordrelinier i en undertabel. Hver ordrelinie skal dog have ordre_ID'er registreret.
Jeg har tidligere fået oplyst at man kan benytte følgende:
SET NOCOUNT ON;
INSERT INTO Sessions (MedarbejderID, SessionNr, Dato, Log) VALUES ('1', '4', '12/12/2005', 'Testlog');
SELECT @@IDENTITY;
INSERT INTO Registreringer (SessionID, KompetanceID, Value) VALUES (@@IDENTITY, 'ID_2', '4');
Når jeg benytter ovenstående i Access får jeg dog følgende fejl: nvalid SQL statement; Expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.
- Nogen der har en bedre ide??
12. december 2005 - 19:36
#1
As far a sI know this is NOT possible with an Access database. You can try selacting the highest ID after you have entered the Order, but there is always the chance of another user creates another order and you get the wrong ID. Unless you use transactions.
13. december 2005 - 09:45
#5
HAr forsøgt med flere løsninger nu, og har nu fundet en, som jeg synes virker logisk, og er nem at arbejde med. Dog ikke den mest resource besparende - Faktisk langt fra, men eftersom der i mit tilfælde vil være meget få samtidige (typpisk kun én) brugere af systemet, bør dette ikke få nogen betydning.
Til de nysgerrige, kan jeg informere om at jeg har valgt at bruge en løsning med 3 SQL eksekveringer. Kaldene til databasen sker via ASP.
SQL1 - Oprettelse af første record (hoved-record/Ordre):
strSQL1 = "INSERT INTO Orders (Ordrenr, Account ...) VALUES (......)
SQL2 - Udtræk af OrdreID:
strSQL2 = "SELECT @@IDENTITY AS "NewOrderID" FROM Orders"
SQL3 - Oprettelse af OrdreLinier:
strSQL3 = "INSERT INTO OrderLines ("NewOrderID", Price, Amount, ...) VALUES (....)"
strSQL3 kan så gentages X-antal gange, evt. i en løkke, såfremt der skal oprettes mere end en ordrelinie.
Som sagt resulterer det i mange SQL-kald der skal eksekveres, og man skal være opmærksom på hvorvidt det er nødvendigt at låse databasen mens man eksekverer ovenstående ... Men det virker!! :o)