Avatar billede runberg Nybegynder
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??
Avatar billede terry Ekspert
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.
Avatar billede terry Ekspert
12. december 2005 - 19:40 #2
Avatar billede terry Ekspert
12. december 2005 - 19:42 #3
Avatar billede terry Ekspert
12. december 2005 - 19:45 #4
the last one I gave we more related to SQL Server

http://authors.aspalliance.com/remas/VFAQ/IdentityColumn/
Avatar billede runberg Nybegynder
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)
Avatar billede terry Ekspert
13. december 2005 - 12:05 #6
tak
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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