/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SELECT til rullemenu
Fra : **[laessoe]**


Dato : 29-10-03 09:27

Jeg har kæmpet en kamp for at SELECTE fra min db (alle værdier
fra kolonnen "Firma"), ned til en rullemenu.

Jeg har forsøgt en del ting ala:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("Test.mdb")
Conn.Open DSN

strSQL = "Select Firma FROM personer"

Set rs = Conn.Execute(strSQL)

Do

<select> name="select" size="2" <option>Response.Write
rs("Firma")</option></select>

rs.MoveNext

Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>

Når jeg udskriver får jeg en HTTP 500 serverfejl... jeg har
forsøgt med forskellige ting bla en <% før og efter Resonse.write
rs ... men uden held og samme resultat når jeg udskriver...

What to do?










--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lasse Skovsager (29-10-2003)
Kommentar
Fra : Lasse Skovsager


Dato : 29-10-03 09:38


"**[laessoe]**" <laessoe@yahoo.dk> skrev i en meddelelse
news:bnntkp$730$1@sunsite.dk...
> Jeg har kæmpet en kamp for at SELECTE fra min db (alle værdier
> fra kolonnen "Firma"), ned til en rullemenu.
>
> Jeg har forsøgt en del ting ala:
>
> <%
> Set Conn = Server.CreateObject("ADODB.Connection")
> DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> DSN = DSN & "DBQ=" & Server.MapPath("Test.mdb")
> Conn.Open DSN
>
> strSQL = "Select Firma FROM personer"
>
> Set rs = Conn.Execute(strSQL)
>
> Do
>
> <select> name="select" size="2" <option>Response.Write
> rs("Firma")</option></select>

Hvad med:
Response.Write "<select name=""select""
size=""2""><option>"&rs("Firma")&"</option></select>

Det burde virke


Lasse



Lasse Skovsager (29-10-2003)
Kommentar
Fra : Lasse Skovsager


Dato : 29-10-03 09:39


"Lasse Skovsager" <lasse[fjern]@skovsager.dk> skrev i en meddelelse
news:3f9f7c41$0$248$bc7fd3c@news.sonofon.dk...
>
> "**[laessoe]**" <laessoe@yahoo.dk> skrev i en meddelelse
> news:bnntkp$730$1@sunsite.dk...
> > Jeg har kæmpet en kamp for at SELECTE fra min db (alle værdier
> > fra kolonnen "Firma"), ned til en rullemenu.
> >
> > Jeg har forsøgt en del ting ala:
> >
> > <%
> > Set Conn = Server.CreateObject("ADODB.Connection")
> > DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> > DSN = DSN & "DBQ=" & Server.MapPath("Test.mdb")
> > Conn.Open DSN
> >
> > strSQL = "Select Firma FROM personer"
> >
> > Set rs = Conn.Execute(strSQL)
> >
> > Do
> >
> > <select> name="select" size="2" <option>Response.Write
> > rs("Firma")</option></select>
>
> Hvad med:
> Response.Write "<select name=""select""
> size=""2""><option>"&rs("Firma")&"</option></select>
>
> Det burde virke
>
>
> Lasse
>

ups - der mangle lige et " efter den sidste >
Lasse



Jens Gyldenkærne Cla~ (29-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 29-10-03 10:07

Lasse Skovsager skrev:

> Response.Write "<select name=""select""
> size=""2""><option>"&rs("Firma")&"</option></select>

> Det burde virke

Tjo - men nok ikke efter hensigten.

Det vil udskrive lige så mange drop drow-bokse som der er firmaer.
Som Jørn skriver, skal <select> være uden for løkken.


--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Lasse Skovsager (29-10-2003)
Kommentar
Fra : Lasse Skovsager


Dato : 29-10-03 11:07


"Jens Gyldenkærne Clausen" <jc@dmf.dk> skrev i en meddelelse
news:Xns942366E0B7BB7jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Lasse Skovsager skrev:
>
> > Response.Write "<select name=""select""
> > size=""2""><option>"&rs("Firma")&"</option></select>
>
> > Det burde virke
>
> Tjo - men nok ikke efter hensigten.
>
> Det vil udskrive lige så mange drop drow-bokse som der er firmaer.
> Som Jørn skriver, skal <select> være uden for løkken.
>

hehe - jeg har åbenbart ikke fået nok kaffe her tilmorgen

Lasse



**[laessoe]** (30-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 30-10-03 22:12

> Tjo - men nok ikke efter hensigten.
>
> Det vil udskrive lige så mange drop drow-bokse som der er firmaer.
> Som Jørn skriver, skal <select> være uden for løkken.

Nemlig - men nu har jeg følgende problem:

Min rullemenu ser således ud:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("tutorial.mdb")
Conn.Open DSN

strSQL = "Select Firma FROM personer"

Set rs = Conn.Execute(strSQL)

Response.Write "<select> name=""select"" size=""2"">" & vbcrlf

Do While Not rs.EOF
Response.Write "<option>" & rs("Firma") & "</option>" & vbcrlf
rs.MoveNext
Loop

Conn.Close
Set Conn = Nothing
%>

Nu vil jeg sætte den i en form altså: <form action="SelectWeb.asp"
method="post"> og en >input type="Submit" value="Send">

Når jeg så har valgt firma i rullemenuen og trukket "Send", går den
til SelectWeb.asp som ser således ud:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("tutorial.mdb")
Conn.Open DSN

strSQL = "SELECT Website FROM personer WHERE Firma = " &
Request.Form("select") & ""

Set objRs = Conn.Execute(strSQL)

Response.Write objRs("Firma")

Conn.Close
Set Conn = Nothing
%>

Meningen er jo så at det firma du har valgt i rullemenuen, dets
Website skal hentes fra db'en, men jeg får fejlen:

Syntax error (missing operator) in query expression 'Firma ='. og
fejl i linie 9

Mit gæt er, at Select.asp ikke sender den værdi der vælges i
rullemenuen til Selectweb.asp?? *hmmm - whats wrong*?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Lasse Skovsager (30-10-2003)
Kommentar
Fra : Lasse Skovsager


Dato : 30-10-03 22:39

> strSQL = "SELECT Website FROM personer WHERE Firma = "
&Request.Form("select") & ""

prøv at sætte ' omkring altså:
' " & Request.form("select") & " ' "

Lasse



**[laessoe]** (30-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 30-10-03 22:57


> prøv at sætte ' omkring altså:
> ' " & Request.form("select") & " ' "

Ingen held - nu skriver den:

Either BOF or EOF is True, or the current record has been
deleted. Requested operation requires a current record.

Når jeg udskriver SQL-sætningen får jeg:

SELECT Website FROM personer WHERE Firma="

Den checker simpelthen ikke værdien i det valgte felt i
rullemenuen?? How to do?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørn Andersen (30-10-2003)
Kommentar
Fra : Jørn Andersen


Dato : 30-10-03 23:46

On Thu, 30 Oct 2003 21:12:07 +0000 (UTC), **[laessoe]**
<laessoe@yahoo.com> wrote:

>Response.Write "<select> name=""select"" size=""2"">" & vbcrlf
>
>Do While Not rs.EOF
>Response.Write "<option>" & rs("Firma") & "</option>" & vbcrlf
>rs.MoveNext
>Loop
<snip>
>strSQL = "SELECT Website FROM personer WHERE Firma = " &
>Request.Form("select") & ""

>Meningen er jo så at det firma du har valgt i rullemenuen, dets
>Website skal hentes fra db'en, men jeg får fejlen:
<snip>
>Syntax error (missing operator) in query expression 'Firma ='. og
>fejl i linie 9
>
>Mit gæt er, at Select.asp ikke sender den værdi der vælges i
>rullemenuen til Selectweb.asp?? *hmmm - whats wrong*?

Netop - fordi du ikke har angivet nogen værdi (value).

Prøv i stedet med:
strFirma = rs("Firma")
Response.Write "<option value=""" & strFirma & """>" & strFirma &
"</option>" & vbcrlf
(det hele på én linie)

Det er altid (altid, altid, altid) en god idé at udskrive sin
resulterende SQL-streng, når man har db-problemer:
<url: http://www.asp-faq.dk/article/?id=41>
(ca. midt i artiklen)
- så ville du have fundet ud af, at du ikke fik noget ind på din
Request.Form, og du kunne være gået videre derfra.

Og ja, husk plingerne omkring tekst-felter, som Lasse skriver.

Til slut:
Det er generelt en dårlig idé at sætte Request.* direkte ind i en
SQL-streng - se her hvorfor:
<url: http://www.asp-faq.dk/article/?id=95>


Good luck!

--
Jørn Andersen,
Brønshøj

Jens Gyldenkærne Cla~ (30-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-10-03 23:43

**[laessoe]** skrev:

> Response.Write "<select> name=""select"" size=""2"">" & vbcrlf

Du har en ">" for meget i linjen herover.

Mange af den slags fejl kan findes ved at validere html-siden (det
er sådan set underordnet om html-koden genereres af asp).

Prøv et smut forbi <http://validator.w3.org/detailed.html>.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (31-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-03 00:12

Jørn Andersen skrev:

> Netop - fordi du ikke har angivet nogen værdi (value).

> Response.Write "<option value=""" & strFirma & """>" &
> strFirma & "</option>" & vbcrlf
> (det hele på én linie)

Det er ikke nødvendigt at angive en value-parameter til option,
hvis den viste værdi skal være den samme som den værdi der
submittes.

Her er hvad html-specifikationen skriver om value på option:

value = cdata [CS]
This attribute specifies the initial value of the control. If
this attribute is not set, the initial value is set to the contents
of the OPTION element.

Problemet ligger (formentlig) i at han lukker select-koden før han
har angivet et navn til den (se andet indlæg i tråden).

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jørn Andersen (31-10-2003)
Kommentar
Fra : Jørn Andersen


Dato : 31-10-03 01:00

On Fri, 31 Oct 2003 00:11:41 +0100, "Jens Gyldenkærne Clausen"
<jens@gyros.invalid> wrote:

>Det er ikke nødvendigt at angive en value-parameter til option,
>hvis den viste værdi skal være den samme som den værdi der
>submittes.
>
>Her er hvad html-specifikationen skriver om value på option:

Aha, det vidste jeg ikke - tak for korrektionen :)

>Problemet ligger (formentlig) i at han lukker select-koden før han
>har angivet et navn til den (se andet indlæg i tråden).

Det har du ret i. Jeg så den også i mit første svar til ham - men
overså den i sidste omgang ...

--
Jørn Andersen,
Brønshøj

Jørn Andersen (31-10-2003)
Kommentar
Fra : Jørn Andersen


Dato : 31-10-03 01:08

On Fri, 31 Oct 2003 00:59:53 +0100, Jørn Andersen <jorn@jorna.dk>
wrote:

>On Fri, 31 Oct 2003 00:11:41 +0100, "Jens Gyldenkærne Clausen"
><jens@gyros.invalid> wrote:
>
>>Det er ikke nødvendigt at angive en value-parameter til option,
>>hvis den viste værdi skal være den samme som den værdi der
>>submittes.
>>
>>Her er hvad html-specifikationen skriver om value på option:
>
>Aha, det vidste jeg ikke - tak for korrektionen :)

Jeg kom til at tænke på, at grunden til, at jeg så at sige altid har
en value, som er forskellig fra den viste værdi er, at der jo næsten
altid er tale om en "kategori", når man bruger en select-box.
Og hvis der er tale om en kategori, vil den oftest være i sin egen
tabel - med et KategoriId, som man så bruger som value, mens
kategori-navnet er den viste værdi.

Med andre ord har spørgeren (sandsynligvis) en uhensigstmæssig
database-struktur

--
Jørn Andersen,
Brønshøj

**[laessoe]** (31-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 31-10-03 09:24

> Med andre ord har spørgeren (sandsynligvis) en uhensigstmæssig
> database-struktur


Lige for at svare på den her:

Muligvis er det ikke en af de bedst strukturerede databaser (1 tabel
med 25 kolloner), men jeg er også kun i "test-mode". Det er en af mine
første asp/mdb projekter (med jeres hjælp går det over al forventning -
Tak)

Rullemenuen skal hente værdien fra kolonen "Firma" for efterfølgende at
hente de andre unikke værdier for det firma du vælger i menuen og
submitter. Jeg kunne selvfølgelig også have valgt at hente Id ned i
menuen, men hvis jeg har 200 firmaer er det svært at huske hvem der er
hvem bare på (firma)Id. Som jeg ser det, er det vel egentlig samme
procedure om du matcher Id mod Id eller Firma mod Firma?

Er det uhensigtsmæssigt?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

**[laessoe]** (31-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 31-10-03 08:58

> Det er ikke nødvendigt at angive en value-parameter til option,
> hvis den viste værdi skal være den samme som den værdi der
> submittes.

Jeg henter først værdien fra DB'en ned i <select> så de kommer helt
automatisk til at være samme værdi.

> Problemet ligger (formentlig) i at han lukker select-koden før han
> har angivet et navn til den (se andet indlæg i tråden).

Præcis! Jeg opdagede den i samme øjeblik at jeg havde postet
indlægget.

Takker alle for hjælpen! I er bare super-gode (der kommer jo nok et
nyt spørgsmål fra mig inden længe ...)

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (31-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-03 10:21

**[laessoe]** skrev:

>> Problemet ligger (formentlig) i at han lukker select-koden
>> før han har angivet et navn til den (se andet indlæg i
>> tråden).
>
> Præcis! Jeg opdagede den i samme øjeblik at jeg havde postet
> indlægget.

Hm - hvorfor fortalte du det så ikke med det samme? Så kunne Jørn
og undertegnede jo have brugt tiden på noget andet.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

**[laessoe]** (31-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 31-10-03 12:35

> Hm - hvorfor fortalte du det så ikke med det samme? Så kunne Jørn
> og undertegnede jo have brugt tiden på noget andet.

Ja, det var ikke så tankefuldt! Beklager...

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (31-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-03 10:30

**[laessoe]** skrev:

>> Med andre ord har spørgeren (sandsynligvis) en
>> uhensigstmæssig database-struktur

Før laessoes svar ville jeg også tænkte sådan.


> Muligvis er det ikke en af de bedst strukturerede databaser (1
> tabel med 25 kolloner),

Som udgangspunkt er der ikke noget galt med en struktur med kun én
tabel og 25 kolonner. Det afgørende er hvad der kommer ind i
databasen.

Det kan godt betale sig at lære lidt om normalisering af databaser.
Der findes resurser på nettet, men emnet kan være lidt tungt så jeg
vil hellere anbefale en bog eller et hæfte.

> men jeg er også kun i "test-mode".

En lille advarsel. Det er svært at rette datastrukturen når man
først har skrevet en masse asp-sider. Man kan spare noget
dobbeltarbejde ved at lave en fornuftig struktur fra starten.

> Det er en af mine første asp/mdb projekter (med jeres hjælp går
> det over al forventning - Tak)

- men på den anden side skal man heller ikke slå for stort brød op.
Det er en god ide at starte med noget der ikke er for svært - bare
man så ikke forventer at det produkt man laver skal være på højde
med professionelle løsninger.


> Rullemenuen skal hente værdien fra kolonen "Firma" for
> efterfølgende at hente de andre unikke værdier for det firma
> du vælger i menuen og submitter. Jeg kunne selvfølgelig også
> have valgt at hente Id ned i menuen, men hvis jeg har 200
> firmaer er det svært at huske hvem der er hvem bare på
> (firma)Id.

Det er netop det smarte ved en select-boks. Ved at benytte value-
parameteren kan du bruge id-værdien som reference, men vise
firmanavnet i stedet:

<option value="<%= rs("firmaID") %>"><%= rs("firmanavn")
%></option>



> Som jeg ser det, er det vel egentlig samme
> procedure om du matcher Id mod Id eller Firma mod Firma?

Ja - men det holder kun så længe at dit firmanavn er unikt og ikke
ændres. Hvad gør du når du første gang skal registrere to firmaer
med samme navn?


> Er det uhensigtsmæssigt?

Ja.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

**[laessoe]** (31-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 31-10-03 13:30

> Det kan godt betale sig at lære lidt om normalisering af databaser.
> Der findes resurser på nettet, men emnet kan være lidt tungt så jeg
> vil hellere anbefale en bog eller et hæfte.

Jo tak! En bog eller et hæfte kunne være godt!?

> En lille advarsel. Det er svært at rette datastrukturen når man
> først har skrevet en masse asp-sider. Man kan spare noget
> dobbeltarbejde ved at lave en fornuftig struktur fra starten.

Tak for advarslen. Som det er nu må jeg tilrette og ændre løbende
(det bliver ind i mellem nogle lange nætter).

> - men på den anden side skal man heller ikke slå for stort brød op.
> Det er en god ide at starte med noget der ikke er for svært - bare
> man så ikke forventer at det produkt man laver skal være på højde
> med professionelle løsninger.

Enig! Problemet med asp er *at det er pokkers vanedannende!*. Når man
har lært det ene kan man næsten ikke vente med at komme i gang med
næste punkt.

> <option value="<%= rs("firmaID") %>"><%= rs("firmanavn")
&gt; %></option>

Den kan jeg godt følge - pånær &gt; ?? Hvad i sætningen indikerer at
det er firmanavn og ikke firmaÍd der skal hentes?

> Hvad gør du når du første gang skal registrere to firmaer
> med samme navn?

Så kommer det ene firma til at hedde - eks. IRMA Købehavn og det
andet IRMA Lyngby. Men ville det ikke være samme suppe hvis du bruger
Id til at hente firmaerne? Altså, Id (som jo er usynlig) henter IRMA
og IRMA ---?


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (31-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-10-03 14:15

**[laessoe]** skrev:

> Jo tak! En bog eller et hæfte kunne være godt!?

Jeg kan anbefale Joakim Dalbys "Databasehåndbogen". Den er ikke
specifikt rettet mod noget databaseprogram (hvad jeg ser som en
fordel), men viser og beskriver bl.a. normalisering af databaser
(1. til 5. normalform plus Boyce-Codd er gennemgået).


>> <option value="<%= rs("firmaID") %>"><%= rs("firmanavn")
>> &gt; %></option>
>
> Den kan jeg godt følge - pånær &gt; ??

Det er din editor (dvs. HTML.dk) der fejlfortolker et tegn i mit
indlæg. I midten af eksemplet skal der stå

       <%= rs("firmanavn") %>

- hvad der også gør i det sidste indlæg jeg skrev. Men på grund af
linjeombrydningen er tegnsekvensen "%>" havnet først på en linje.
Det kan html.dk åbenbart ikke finde ud af.    


> Hvad i sætningen indikerer at det er firmanavn og ikke firmaÍd
> der skal hentes?

Begge dele hentes til select-boksen. Id-værdien bruges som skjult
værdi, mens firmanavnet bruges som vist værdi. I html-koden kan det
fx blive til

   <option value="34">Irma Lyngby</option>
   <option value="36">Irma Smørum</option>
   ...

I en browser er det kun tekstværdierne man kan se - men når du
submitter formen er det kun value-værdierne der sendes (og kun dem
der er selected).


> Så kommer det ene firma til at hedde - eks. IRMA Købehavn og
> det andet IRMA Lyngby. Men ville det ikke være samme suppe
> hvis du bruger Id til at hente firmaerne? Altså, Id (som jo er
> usynlig) henter IRMA og IRMA ---?

Pointen er at de har hver deres id-nummer. Prøv fx at søge på
"Fona" på krak.dk. Der er et hav af opslag med samme navn - men
fordi de har hver deres id-nummer kan man stadig skille dem ad.'

Visuelt kan man skille dem ad fordi de har forskellige adresser,
men det er upraktisk at skulle identificere dem på mere end ét
felt. Hvis du klikker på RET-ikonet for to forskellige opslag, kan
du se Krak identificerer dem med parameteren knr=[tal].

Når man arbejder med relationelle databaser, kommer man ofte
(næsten altid) ud for at arbejde med relaterede tabeller. Hvis en
tabel refererer til en anden tabel gøres det ved hjælp nøgler -
primærnøglen fra den overordnede tabel (fx cder) bliver
fremmednøgle i den underordnede tabel (fx numre).

I en database med mange relationer, vil primærnøglerne fra
forskellige tabeller derfor ofte optræde mange steder som
fremmednøgler. Normalisering af databaser handler om at fjerne
redundante oplysninger - alle oplysninger skal i princippet kun stå
ét sted. Et hovedproblem ved redundans er at man risikerer at have
flere forskellige oplysninger stående om den samme egenskab. Hvis
telefonnummeret på Irma i Gentofte fx er registreret tre
forskellige steder i samme database, kan man komme ud for at kun
det ene af dem opdateres.

Primærnøglerne er nødt til at stå flere steder - ellers kan man
ikke binde tabellerne sammen. Derfor bør primærnøgler altid være
fuldstændig statiske - altså noget der ikke ændrer sig over tid. En
nem måde at sikre det på er at benytte en nøgle der ikke gemmer
nogen anden information, som regel at autonummer. Hvis man fx
bruger firmanavn eller telefonnummer som primærnøgle, løber man en
risiko for at primærnøglen skal opdateres - det er ikke godt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

**[laessoe]** (31-10-2003)
Kommentar
Fra : **[laessoe]**


Dato : 31-10-03 15:03

> Jeg kan anbefale Joakim Dalbys "Databasehåndbogen". Den er ikke
> specifikt rettet mod noget databaseprogram (hvad jeg ser som en
> fordel), men viser og beskriver bl.a. normalisering af databaser
> (1. til 5. normalform plus Boyce-Codd er gennemgået).

Den må jeg ha' fat i - Tak for tip. Har gået og tænkt over, om det
måske i mit tilfølde ville være en ide med "ASP for Dummies" eller
"Databaser for Dummies"? (Ja ikke for at negliciere mig selv, men de
plejer at give et godt billede for nybegynderen). Nogen erfaringer på
det punkt?

> Det er din editor (dvs. HTML.dk) der fejlfortolker et tegn i mit
> indlæg. I midten af eksemplet skal der stå
>
>        <%= rs("firmanavn") %>
>

OK - meget rat at vide.



> En nem måde at sikre det på er at benytte en nøgle der ikke gemmer
> nogen anden information, som regel at autonummer. Hvis man fx
> bruger firmanavn eller telefonnummer som primærnøgle, løber man en
> risiko for at primærnøglen skal opdateres - det er ikke godt.

OK - stof til eftertanke. Jeg vender (med garanti), frygtligt tilbage
når jeg går i gang med tabel 2 i min db - har skrevet mig bag øret at
Id (autonr. i min hovedtabel), er mest hensigtsmæssig at bruge i
forbindelse med en relation til en anden tabel.

Puha - Tak for det! Altid et kvalificeret svar fra dig, Jens! Go'
Weekend!


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørn Andersen (29-10-2003)
Kommentar
Fra : Jørn Andersen


Dato : 29-10-03 09:45

On Wed, 29 Oct 2003 08:27:05 +0000 (UTC), **[laessoe]**
<laessoe@yahoo.dk> wrote:

>Jeg har kæmpet en kamp for at SELECTE fra min db (alle værdier
>fra kolonnen "Firma"), ned til en rullemenu.
<snip>

>Do
>
><select> name="select" size="2" <option>Response.Write
>rs("Firma")</option></select>
>
>rs.MoveNext
>
>Loop While Not rs.EOF

Du skal lige huske at springe fra udskrive HTML (og ikke kun skrive
det), når du er i ASP-mode.
- og så skal Selct formetlig være uden for loopen:

Response.Write "<select name=""select"" size=""2"">" & vbcrlf

Do While Not rs.EOF
Response.Write "<option>" & rs("Firma") & "</option>" & vbcrlf
rs.MoveNext
Loop

Response.Write "</select>" & vbcrlf

Som du kan se har jeg flyttet While-betingelsen op i toppen (prøv sel
at overveje, hvad der ellers sker, hvis recordsettet er tomt).
<snip>

>Når jeg udskriver får jeg en HTTP 500 serverfejl...

Som Jens skrev 5-6 meddelelser tidligere:
Fejl 500 er en pseudo-fejl der skjuler den rigtige fejlmeddelelse.
Se her hvordan du kommer videre:
   <http://asp-faq.dk/article/?id=45>.

Good luck!

--
Jørn Andersen,
Brønshøj

Søg
Reklame
Statistik
Spørgsmål : 177550
Tips : 31968
Nyheder : 719565
Indlæg : 6408823
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste