Avatar billede chrisrj Forsker
30. oktober 2002 - 22:19 Der er 19 kommentarer og
1 løsning

Kunsten at oprette et korrekt id i db

Jeg har en database(access) med 2 tabeller maerke og model.

Dertil har jeg et script der gør at jeg kan vise mærkerne og modellerne dynamisk i 2 dropdownboxe.

Så vidt, så godt. Men, er id'erne i maerke tabellen ikke fortløbende, virker skidtet ikke. :(

Da systemet er afleveret, synes jeg det ville være hurtigst at lave en lille funktion, der sikre at numrene er fortløbende. Jeg tænkte på om der var nogen her der ville være villige til at hjælpe mig med at lave den funktion.

Problemet er bare at jeg er ikke SÅ stærk i ASP, så jeg uden videre kan lave det selv.

Jeg havde forstillet mig at noget ala:

Tæl id'erne i maerke tabellen, hvis der er i hul i rækken af tal(f.eks. 1,2,4) ryk id'erne op så hullet lukkes(f.eks. 1,2,3). søg for at maerke id'et i model tabellen bliver opdateret med det/de nye id'er.
Avatar billede loss Nybegynder
30. oktober 2002 - 22:26 #1
istedet for at skrive IDét ud kunne du i løkken inkludere en tæller der tællede automatisk op.. så fik du dine tal forløbende..

Databasen gør nemlig det (hvis id er primær) at den tilegner ID den først ledige værdi... Hvis du har haft en record med ID 5 engang, men slettet det igen, er det næste id altså 6 og ikke 5..

mvh LOSS
Avatar billede chrisrj Forsker
30. oktober 2002 - 22:40 #2
"istedet for at skrive IDét ud kunne du i løkken inkludere en tæller der tællede automatisk op.. så fik du dine tal forløbende.."

øhh, jeg kan ikke lige gennemskue det. Kan du lave et simpelt eksempel?


"Databasen gør nemlig det (hvis id er primær) at den tilegner ID den først ledige værdi... Hvis du har haft en record med ID 5 engang, men slettet det igen, er det næste id altså 6 og ikke 5.."

...hvilket netop er mit problem. Scriptet kan ikke finde ud af det, hvis ikke id er fortløbende.
Avatar billede loss Nybegynder
30. oktober 2002 - 22:59 #3
hvad bruger du IDét til i dit script ?
Avatar billede loss Nybegynder
30. oktober 2002 - 23:00 #4
prøv post dit script her.. så kan jeg lige kigge det igennem
Avatar billede chrisrj Forsker
30. oktober 2002 - 23:01 #5
Hvad jeg bruger id til?? Har du læst mit spg??

Nå, men her er mit script:

<script>
<%
    sqltest = "select count(maerkeid) as antal from maerke"
    Set rstest = Conne.Execute(SQLtest)
    antallet = rstest("antal") + 1
    response.write "afdelinger = new Array(" & antallet & ");"
%>
//Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "Vælg Modeller";
<%
    sqltal1 = "select count(maerkeid) as antal from maerke"
    Set rstal = Conne.Execute(SQLtal1)
    antal = rstal("antal")
    for i=1 to antal
   
        sqltal2 = "select count(modelid) as antal2 from model where maerkeid=" & i
        Set rstal2 = Conne.Execute(SQLtal2)
        antal2 = rstal2("antal2")
       
        sql = "select model,modelid from model where maerkeid=" & i
        Set rs = Conne.Execute(SQL)
       
        for t=0 to antal2
            if not rs.eof then
                response.write "afdelinger["& i &"]["& t &"] = '" & rs("model") &"';" & vbCrLf
                rs.movenext
            end if
            'rs.movefirst
        next
        rs.close
        't = 0
    next
%>

function skift(frm) {
ind = frm.maerke.selectedIndex;
frm.model.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.model.options[n].text = afdelinger[ind][n];
frm.model.options[n].value = afdelinger[ind][n];
}
}
</script>
Avatar billede andersaaa Nybegynder
31. oktober 2002 - 08:53 #6
Du kan skifte db'en til Paradox....den kører med reallokerende id.
Bare et forslag...
Avatar billede chrisrj Forsker
31. oktober 2002 - 09:15 #7
Paradox????

Kender det ikke....
Avatar billede andersaaa Nybegynder
31. oktober 2002 - 10:05 #8
Paradox er en Borland Database....
Avatar billede chrisrj Forsker
31. oktober 2002 - 10:26 #9
...Og hvordan er den i forhold til access?
Avatar billede andersaaa Nybegynder
31. oktober 2002 - 10:36 #10
Hmmm på mange områder bedre ikraft af at den kører med reallokerende nøgleid, dog kan den være lidt tricky at arbejde med miljøer hvor den skal tilgåes fra flere forskellige applicationer (via BDE).
Men hvis den blov skal bruges som en simpelt webdatabase....og du gerne vil have det til at køre som du beskriver lyder det som en fin løsning.
Avatar billede loss Nybegynder
31. oktober 2002 - 11:00 #11
Hey igen....

Bruger du kun IDét til at lave en count på.. Hvis du gør burde reækkefølgen da ikke betyde noget.. Og kunne det ikke laves på en noget nemmere måde..

Som jeg lige kan er resultatet af dit script følg:

model1
model2
model3 

osv.. ? er det rigtigt
Avatar billede chrisrj Forsker
31. oktober 2002 - 11:09 #12
<script>
afdelinger = new Array(9);
//Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "Vælg Modeller";
afdelinger[1][0] = 'Alle modeller';
afdelinger[2][0] = 'Alle modeller';
afdelinger[2][1] = '145';
afdelinger[2][2] = '147';
afdelinger[2][3] = '155';
afdelinger[2][4] = '164';
afdelinger[2][5] = '166';
afdelinger[2][6] = '33';
afdelinger[2][7] = '33';
afdelinger[2][8] = 'GTV';
afdelinger[3][0] = 'Alle modeller';
afdelinger[4][0] = 'Alle modeller';
afdelinger[4][1] = '100';
afdelinger[4][2] = '80';
afdelinger[4][3] = 'A2';
afdelinger[4][4] = 'A3';
afdelinger[4][5] = 'A4';
afdelinger[4][6] = 'A6';
afdelinger[4][7] = 'Cabriolet';
afdelinger[4][8] = 'Coupe';
afdelinger[4][9] = 'S4';
afdelinger[4][10] = 'TT';
afdelinger[5][0] = 'Alle modeller';
afdelinger[5][1] = '316';
afdelinger[5][2] = '318';
afdelinger[5][3] = '320';
...
...
...
afdelinger[5][27] = 'X5';
afdelinger[5][28] = 'Z3';
afdelinger[6][0] = 'Alle modeller';
afdelinger[7][0] = 'Alle modeller';
afdelinger[7][1] = 'Ny model';
afdelinger[8][0] = 'Alle modeller';
afdelinger[8][1] = 'Ny modeler';


function skift(frm) {
ind = frm.maerke.selectedIndex;
frm.model.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.model.options[n].text = afdelinger[ind][n];
frm.model.options[n].value = afdelinger[ind][n];
}
}
</script>
Avatar billede loss Nybegynder
31. oktober 2002 - 11:23 #13
jeg må ærligt indrømme at jeg ikke helt forstår problemmet... desværre og så er det sq lidt svært at hjælpe :)
Avatar billede chrisrj Forsker
31. oktober 2002 - 13:24 #14
Ok, her er en udpindning:

Jeg har to dropdownboxe.

Første box indeholder mærker.
Anden box indeholde modeller.

Når man vælger et mærke, vil der i modelboxen være en liste over de tilhørende modeller.

Eksempel:

Box 1 indeholder:
audi
bmw
opel

Brugeren vælger f.eks. audi, vil der i modelboxen stå:
80
100
A3
A4
A6
A8

Hvis brugeren vælger et andet mærke, komme det mærke's modeller.

Forstår du nu?
Avatar billede loss Nybegynder
31. oktober 2002 - 17:53 #15
Det kan du da lave på en helt anden måde uden at bruge arrays..

den første checkbox:
<form action="denneside" method ="post">
<select name="bil" onchange="this.submit()">
<%
DO UNTIL RS.EOF
response.write "<option value="&rs("ID")&">"&RS("NAVN")&"</option>"
RS.MOVENEXT
LOOP
%>
</select>

Den anden Checkbox:
<select>
<%

ID = Request.form("bil")

dette ID kan du så bruge til at hente de records ud til den næste select box

SQL = "SELECT * FROM TABEL WHERE ID ="&ID&""

DO UNTIL RSSUB.EOF
response.write "<option value="&RSSUB("ID")&">"&RSSUB("NAVN")&"</option>"
RSSUB.MOVENEXT
LOOP
%>
</select>

Forstår du denne
Avatar billede chrisrj Forsker
31. oktober 2002 - 20:51 #16
Ja, mig forstå god. :)

Sådan ser koden ud når jeg skal bruge den:

<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Conne = Server.CreateObject("ADODB.Connection")
Conne.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../database/database.mdb") & ";UID=admin;PWD=;"

sqltest = "select * from maerke"
    Set rs = Conne.Execute(SQLtest)
%>

<form action="denneside" method ="post">
<select name="bil" onchange="this.submit()">
<%
DO UNTIL RS.EOF
response.write "<option value="&rs("maerkeid")&">"&RS("maerke")&"</option>"
RS.MOVENEXT
LOOP
%>
</select>


<select>
<%

ID = Request.form("bil")

SQL = "SELECT * FROM model WHERE maerkeid ="&ID&""
Set rsSUB = Conne.Execute(SQL)

DO UNTIL RSSUB.EOF
response.write "<option value="&RSSUB("modelid")&">"&RSSUB("model")&"</option>"
RSSUB.MOVENEXT
LOOP
%>
</select>
Men der kommer bare en fejl når jeg kører din kode:

Et objekt er obligatorisk: ''
/bilside/www/boxtest.asp, line 35

linie 35:
DO UNTIL RSSUB.EOF

Sætter jeg denne linie ind:
Set rsSUB = Conne.Execute(SQL)

kommer denne fejl:
Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "maerkeid =".
/bilside/www/boxtest.asp, line 33

linie 33:
Set rsSUB = Conne.Execute(SQL)


Og jeg kan ærligtalt ikke se hvordan det skulle kunne virke. Så vidt jeg ved, kan man kun hente noget fra en form EFTER brugeren har trykket på submit knappen. Men det er måske ikke tilfældet?
Avatar billede loss Nybegynder
01. november 2002 - 10:02 #17
Ja det kan du osse.. men du kan godt gøre sådan at du har 2 forskellige actions på din form...

select sætningen ved den anden selecet box vil ikke virke først da der jo ingen id er før der er valgt noget i den første select box..
Så sæt en if then ind.. omkring udtrækket

IF NOR RSSUB.EOF THEN
DO UNTIL RSSUB.EOF
response.write "<option value="&RSSUB("modelid")&">"&RSSUB("model")&"</option>"
RSSUB.MOVENEXT
LOOP
END IF
%>
Avatar billede loss Nybegynder
01. november 2002 - 10:50 #18
Man kan selvfølgelig kun hente fra en form, ved submit.... Men du kan vel sagtens have begge select boxse i samme form.. skulle ikke være et problem. Man kan nemlig bare lave en submit knap som følg.

<input type="button" Onclick="SetAction()" Value="Submit">

og så en lille javascript funktion..

<script language="javascript">
function setAction() {
    document.navnetpådinform.action = 'Denside du ønsker at poste til';
    document.navnetpådinform.submit();
}
</script>
Avatar billede chrisrj Forsker
03. januar 2003 - 12:48 #19
Jeg fik ikke brug for det alligevel... :(

Hvis du, loss, vil have lidt point for din tid så svar inden en uge.
Avatar billede chrisrj Forsker
07. februar 2003 - 10:17 #20
lukket
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