Henrik Overballe wrote:
> Jeg har forsøgt at trace baglæns, men det bevirker at for hver niveau
> jeg har, så skal jeg lave et SQL-kald...hvilket jo ikke just gør det
> særligt dynamisk og kræver jo også mange SQL-kald, hvis jeg ønsker
> mange niveauer.
Der kræves jo også mange SQL-kald, når du skal bygge tråden.
> Jeg vil dog gerne bibeholde den nuværende struktur (med id og parent-
> id). Det lyder meget kompliceret at lave id'et i et tekstfelt - men
> am I wrong?
Det er faktisk ikke så svært. Det sværeste er nok måden at generere
id'et på. Samtidig skal man være opmærksom på, at når der laves et nyt
indlæg, skal det nuværende højeste id hentes ud af databasen (hvis der
bruges Access). Fra du gør det, og indtil det nye id er genereret og sat
ind i DB'en, må der ikke kunne indsættes andre id'er.
Ex: Der er to brugere der laver en ny tråd på samme tid. Dem kalder vi
process1 og process2. Følgende scenarie vil give fejl:
Programforløb:
Process1:
1. Hent højeste id.
2. Beregn nyt id.
Process2:
1. Hent højeste id.
2. Beregn nyt id.
3. Indsæt nyt id.
Process1:
3. Indsæt nyt id.
Det der skal sørges for er at step 1 i process2 først må udføres efter
step 3 i process1. Der skal altså laves en kø. På MSSQL, PostgreSQL,
Oracle eller andre DB'er der understøtter stored procedures kan man lave
det sådan at der kun skal et enkelt SQL-kald til at indsætte et nyt
indlæg, men på en Access DB bliver man nødt til at klare det på klienten
(webserveren er klienten, og DB-serveren er serveren).
Hvis der ikke er enormt mange brugere til forummet, og det ikke skal
være dybt professionelt, kan man vælge at acceptere at Access bare vil
give en fejl i ovenstående scenarie (id kolonnen skal selvfølgelig være
unik). Det er dog ikke pænt at gøre det på den måde.
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.