Avatar billede mdez Nybegynder
15. juli 2002 - 13:22 Der er 3 kommentarer og
2 løsninger

Oprettelse af relaterede poster i db via 1 formular

Jeg skal til at lave et lille adminsystem hvor man fx kan oprette en bygning i en database. Til bygningen kan fx tilknyttes nogle pdf-filer (som ligger i en anden tabel og tilknyttes med en mellemliggende tabel). Det skulle være ok.

Hidtil når jeg løser sådan en opgave plejer jeg at lave sådan at bygningen skal oprettes først (i databasen) og derfor kan pdf-erne først tilknyttes bygningen når man vælger 'rediger'..

Hvad er den smarteste måde at lavet sådan noget som en 1-step løsning i stedet for en (for brugeren) ulogisk fremgangsmåde?

Jeg har nogenlunde styr på alm. asp vb.script og dhtml.. Vil bare gerne høre hvad mere erfarne vil foreslå- der kan jo smides noget i nogle hidden fields og sådan noget..
---
Lidt uddybning:

(tabeller med celler)

bygninger
[id] (primær key)
[bygningnavn]

pdftilbygning
[id] (primær key)
[bygningid] (fremmed key)
[pdfid] (fremmed key)

pdfer
[id] (primær key)
[pdfnavn]

PDF-filen kan jo ikke tilknyttes bygningen før den er oprettet...
Avatar billede coltau Juniormester
15. juli 2002 - 13:50 #1
Der findes (og anvendes) mange forskellige måder at løse dette problem på.

I dit tilfælde ville jeg nok anvende Kopitabeller til redigering og først overføre alle data samlet til de rigtige tabeller når brugeren er færdig med oprettelsen. Primær key (ID for bygning) under oprettelse skal være brugers session-ID. (Eller endnu bedre brugerID hvis det findes.)

Der skal dog oprettes et ekstra felt i kopitabellen med en dato, der jo skal sikre at man en gang i mellem kan slette halvfærdige oprettelser med en SQL-sætning. Det gælder dog ikke hvis man kan anvende brugerID da man således kan starte med at "rydde op" i kopitabellen når bruger opretter en ny.

Du kan også anvende de eksisterende tabeller og anvende brugerID med munis foran - men så skal du rundt andre steder og sikre at bygninger med negative ID ikke vises.
Avatar billede keysersoze Ekspert
15. juli 2002 - 18:06 #2
mit forslag;

indsæt først dine pdf'er og gem id'et (der findes en "funktion" der gør at du kan finde det netop indsatte id) og gem id i en variabel - indsæt derefter bygningnavn (og gem ligeledes id i en variabel.

så kan du forholdsvis let indsætte det sidste
Avatar billede coolcoder Nybegynder
16. juli 2002 - 16:41 #3
der bør ses TOTALT bort fra coltau's forslag. Det er jo at gøre grin med relationelle databaser!!!

Jeg går ud fra dine primære keys er autoincrement - ellers skal de være det. Så er det bare at smide en ny post ind for bygningen. Gemme det id databasen gi'r den (det kommer an på din DB, hvordan du gør det).

Så opretter du pdfer og samtidig en post i mange-til-mange-tabellen, for at knytte dem op på den relevante bygning.

PS: Hvis du bruge Access eller MSSQL, kan du lave en
rs.open "select * from pdfer where id=0", conn, 1, 3
rs.addnew
rs("pdfnavn") = "navn"
rs.update
intPdfID = rs("id")
rs.close

så har du id'et i variablen intPdfID
Avatar billede coltau Juniormester
17. juli 2002 - 16:45 #4
--> coolcoder

Hvis du mangler en metode til at arbejde med flere tabeller (med eller uden relationer), hvor nedenstående krav skal være opfyldt så kan du jo anvende min metode eller en af de 100 andre jeg der findes.

1. Rettelserne må ikke kunne ses af andre brugere før man er helt færdig.
2. Sikkerhed for at rettelser der ikke færdiggøres fjernes igen.
3. Undgå belastning af hukommelsen på serveren.
Avatar billede keysersoze Ekspert
04. oktober 2002 - 19:16 #5
lukketid?
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