/ 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
Kunne det ikke gøres lidt smartere??
Fra : Ukendt


Dato : 23-12-04 16:48

Hej

Jeg sidder og makker med lidt ASP og SQL (Access).

Jeg har en database indeholdende en tabel med personer og en med biler. Jeg
har lavet en tredje tabel der binder disse sammen, således at hver person
kan have en eller flere biler.

Skematisk ser min database således ud:

PERSONER:
id
navn

BILER
id
bil

RELATION
id
personid (fremmednøgle til PERSONER)
bilid (fremmednøgle til BILER)

Nu vil jeg gerne have genereret en side hvor de biler en valgt person har
bliver afkrydset i et antal tjek-bokse.
Det har jeg lavet og det fungerer som sådan også godt nok med følgende kode:

---
<html>
<%
response.buffer = true
'on error resume next
set conn = server.createObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
server.mappath("biler.mdb")

sql_biler = "SELECT * FROM biler ORDER BY bil ASC"
set db_biler = conn.execute(sql_biler)

sql_person = "SELECT * FROM personer, relation, biler WHERE navn = '" &
request("navn") &"' AND personer.id = personid AND bilid = biler.id"
set db_person = conn.execute(sql_person)

%>
<head>
<title>Biler</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<%
do while not db_biler.eof
%>
<%= db_biler("bil") %>: <input name="<%= db_biler("bil") %>" type="checkbox"
value="<%= db_biler("bil") %>"
<%
do while not db_person.eof
if db_person("bil") = db_biler("bil") then
%>
checked
<%
end if
db_person.movenext
loop
db_person.movefirst
%>
><br>
<%
db_biler.movenext
loop
%>
</body>
</html>
---

Det kan ses her : http://web1.ikasths.dk/ani/bil/biler.asp?navn=Anders
og her: http://web1.ikasths.dk/ani/bil/biler.asp?navn=John

Hvad er så mit problem?

1. Jeg er ret usikker om det er så vældig god en idé (og nødvendigt) at lave
to recordset?

2. Hvis man vælger en person uden bil, melder .movefirst fejl:
http://web1.ikasths.dk/ani/bil/biler.asp?navn=ole

3. Er det den rigtige måde at strikke databasen sammen på?

Kode og database kan hentes her: http://web1.ikasths.dk/ani/bil/biler.zip

Og ja - Det ER vigtigt at der dannes tjekbokse

Al hjælp modtages med kyshånd!


God jul til alle *<|

På forhånd tak for hjælpen



 
 
FFunky (23-12-2004)
Kommentar
Fra : FFunky


Dato : 23-12-04 19:43

"Anders Nielsen"
> Hej
>
> Jeg sidder og makker med lidt ASP og SQL (Access).
>
> Jeg har en database indeholdende en tabel med personer og en med biler.
Jeg
> har lavet en tredje tabel der binder disse sammen, således at hver person
> kan have en eller flere biler.
>
> Skematisk ser min database således ud:
>
> PERSONER:
> id
> navn
>
> BILER
> id
> bil
>
> RELATION
> id
> personid (fremmednøgle til PERSONER)
> bilid (fremmednøgle til BILER)
>
> Nu vil jeg gerne have genereret en side hvor de biler en valgt person har
> bliver afkrydset i et antal tjek-bokse.
> Det har jeg lavet og det fungerer som sådan også godt nok med følgende
kode:

Hvis hver person kan have nul eller flere biler kan du nøjes med at lægge
en personID i Biltabellen

tblPerson
PersonID PK
Fornavn .... osv

tblBil
BilID PK
Mærke
....
Nummerplade
PersonID .....osv FK

Det er kun hvis en bil kan ejes af flere at der er et mange-til-mange
forhold
imellem Bil og Person. Som jeg har beskrevet det er der et en-til-mange
forhold. En Person kan have flere biler. En bil ejes af en person.

.....
kode
....

> Det kan ses her : http://web1.ikasths.dk/ani/bil/biler.asp?navn=Anders
> og her: http://web1.ikasths.dk/ani/bil/biler.asp?navn=John
>
> Hvad er så mit problem?
>
> 1. Jeg er ret usikker om det er så vældig god en idé (og nødvendigt) at
lave
> to recordset?

Nej du skal lave en side hvor du finder personen og når du så har fundet
personen overfører du (POST/GET) personID til en ny side og her
finder du så de(n) bil(er) som personen ejer med en enkelt forespørgsel.

> 2. Hvis man vælger en person uden bil, melder .movefirst fejl:
> http://web1.ikasths.dk/ani/bil/biler.asp?navn=ole

Du skal _altid_ checke om et recordset indeholder noget inden begynder at
arbejde på det. Hvis dit recordset hedder rst kan du skrive

if rst.BOF and rst.EOF then
' Recordsettet er tomt
else
' DoYourStuff
end if

> 3. Er det den rigtige måde at strikke databasen sammen på?
>
> Kode og database kan hentes her: http://web1.ikasths.dk/ani/bil/biler.zip

Jaså. Du må lige tage stilling til relationen mellem Person og Bil
det virker som om du har sat dig lidt ind i databaser.

> Og ja - Det ER vigtigt at der dannes tjekbokse

Sæt checkboksene ind i tabel så de kommer til at stå række

--
Med venlig hilsen
Tom Jensen
www.FFSoft.dk



Ukendt (23-12-2004)
Kommentar
Fra : Ukendt


Dato : 23-12-04 21:40

Hej Tom

"FFunky" <fffunky@nowhere.com> wrote in message
news:snEyd.77024$Vf.3634365@news000.worldonline.dk...
>
> Hvis hver person kan have nul eller flere biler kan du nøjes med at lægge
> en personID i Biltabellen
>
> tblPerson
> PersonID PK
> Fornavn .... osv
>
> tblBil
> BilID PK
> Mærke
> ....
> Nummerplade
> PersonID .....osv FK
>
> Det er kun hvis en bil kan ejes af flere at der er et mange-til-mange
> forhold
> imellem Bil og Person. Som jeg har beskrevet det er der et en-til-mange
> forhold. En Person kan have flere biler. En bil ejes af en person.
>
Sagen er netop at der er tale om en mange-til-mange situation.
Tabellen biler indeholder ikke "specifikke" biler (defineret ved eks.
nummerplade), men derimod generelle bilmærker. Dvs. at John f.eks. har både
en Toyota og en Alfa Romeo, mens Anders har en Renault.
Hver bruger kan derfor have nul, en eller flere bilmærker, samtidig med at
hver bilmærke også kan ejes af flere personer.
Andre bud på en bedre løsning?

> >
> > 1. Jeg er ret usikker om det er så vældig god en idé (og nødvendigt) at
> lave
> > to recordset?
>
> Nej du skal lave en side hvor du finder personen og når du så har fundet
> personen overfører du (POST/GET) personID til en ny side og her
> finder du så de(n) bil(er) som personen ejer med en enkelt forespørgsel.
>
Det er jo strengt taget også det jeg gør. For nemheds skyld sender jeg
indtil videre blot personen med i en query-string:
http://web1.ikasths.dk/ani/bil/biler.asp?navn=Anders
http://web1.ikasths.dk/ani/bil/biler.asp?navn=John


> > 2. Hvis man vælger en person uden bil, melder .movefirst fejl:
> > http://web1.ikasths.dk/ani/bil/biler.asp?navn=ole
>
> Du skal _altid_ checke om et recordset indeholder noget inden begynder at
> arbejde på det. Hvis dit recordset hedder rst kan du skrive
>
> if rst.BOF and rst.EOF then
> ' Recordsettet er tomt
> else
> ' DoYourStuff
> end if
>
Doohh! Naturligvis - takker

mvh
Anders



FFunky (26-12-2004)
Kommentar
Fra : FFunky


Dato : 26-12-04 20:55


"Anders Nielsen"
> Sagen er netop at der er tale om en mange-til-mange situation.
> Tabellen biler indeholder ikke "specifikke" biler (defineret ved eks.
> nummerplade), men derimod generelle bilmærker. Dvs. at John f.eks. har
både
> en Toyota og en Alfa Romeo,
Lucky bastard.
> ...................................................mens Anders har en
Renault.
> Hver bruger kan derfor have nul, en eller flere bilmærker, samtidig med at
> hver bilmærke også kan ejes af flere personer.

Så er dine tabeller helt rigtige jeg kan godt nok ikke lide at du kalder
"samle" tabellen for relation, den kan hedde tblPerson_Bil f. eks

På første side
Hvis der ikke er flere medlemmer end de kan stå på een side er det OK ellers
bør du lave en søge funktion der finder en person/delmængde af personer.
Når man så klikker personen hopper du til siden med biler og overfører den
unikke
nøgle for person.
På anden side
Bruger du personID til at slå op i persontabellen og vise minimum data om
personen
ved hjælp af personid kan du slå op i "samle" tabellen og med join til
biltabellen finde
hvilke biltyper personen ejer, du får så en række biler (eller ingen)
Det er vel osse det du gør i store træk.

> Doohh! Naturligvis - takker
Homie, are you there ??

--
Med venlig hilsen
Tom Jensen
www.FFSoft.dk



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

Månedens bedste
Årets bedste
Sidste års bedste