Zum Inhalt springen

Datenbankeinträge in select Box schreiben


Empfohlene Beiträge

Hi

Ich habe eine MS Access Datenbank aus der ich gerne die Daten in ein select Menü rein schreiben will.

Momentan gibt er mir Daten ganz normal auf der Website aus. Aber wi bekomme ich es hin das sie in einem select Menü angezeigt werden?

Momentan sieht es so aus:


<%

strDB = "Data Source=" & Server.MapPath("store.mdb")


strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & strDB

SET objCon = Server.CreateObject("ADODB.Connection")

objCon.Open strCon


SET objCon = Server.CreateObject("ADODB.Connection")

objCon.Open strCon


strSQL = "SELECT * FROM Auto ORDER BY Hersteller"

strSQL = "SELECT * FROM Auto ORDER BY Modell"

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.open strSQL, objCon

%>

<table width="275">

<tr>

<td><b>Automarke</b></td>

<td><b>Modell</b></td>

</tr>

<tr>

<% While Not EOF and Err=0%>

<td><% =objrs("Hersteller")%></td>

<td><% =objrs("Modell")%></td>

</tr>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

</table>

<%

objCon.close

SET objCon = Nothing

%>

 </td>

  </tr>

</table>

Hat da jemand eine Idee?

Lg

Sunflower84

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

<% While Not EOF and Err=0%>

<td><% =objrs("Hersteller")%></td>

<td><% =objrs("Modell")%></td>

</tr>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

^^ Da ich mich mit ASP nicht auskenne, vermute ich mal, dass as die Schleife ist, die dir die Ergebnisse der DB-Abfragen liefert. Von daher sieht mein Lösungsvoschlag so aus:


<!-- Selectbox für Hersteller -->

<select name='hersteller'>

<% While Not EOF and Err=0%>

<option value='<% =objrs("Hersteller")%>'><% =objrs("Hersteller")%></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

</select>

<!-- Selectbox für Modelle -->

<select name='modell'>

<% While Not EOF and Err=0%>

<option value='<% =objrs("Modell")%>'><% =objrs("Modell")%></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

</select>

... Die Select-Boxen evtl. noch in eine Tabelle packen - wegen der Darstellung.

Ich hoffe, dass ist das was du willst (und das was ich denke ;) )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

Also erstmal Danke für deine schnelle Antwort. Also die Hersteller schreibt er mir rein aber die Modelle nicht.

Aber ich glaube ich meinte ListBox. Großes Sorry !!!

Da man die Einträge alle sehen soll und wenn man z.B auf den Hersteller Audi klickt sollen in der nächsten Box nebendran die Modelle von Audi angezeigt werden.

Hast du da auch so eine geniale Idee?

Sorry nochmal das ich mich falsch ausgedrückt habe.

Lg

Sunflower84

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

danke für die Blumen :D

Also Selektbox und Listbox ist das gleiche. Du musst nur die Anzahl der Einträge festlegen, die gleichzeitig angezeigt werden sollen (Standart für <select> ist nunmal 1):

<select name='Hersteller' size='5'> ...

^^ so hast du jetzt 5 Zeilen in der Listbox, bei mehr kommt ein Scrollbalken.

Das die Modelle nicht klappen liegt entweder daran, dass ich an der Stelle im Code ein Fehler gemacht habe, oder (wohl) an der Datenbankabfrage deinerseits (keine Ergebnisse?)

Du musst um jede Listbox ein Formular (mit namen)bauen, das die gleiche Seite nochmal aufruft. und bei den selectboxen machst du dann folgendes:

<select .... onChange="document.FORMULARNAME.submit()" ..>

Am besten du schaust dir da den Quelltext der Seite an, die du in deinem vorherigen Thread verlinkt hattest (Wo das fertige Beispiel schon zu sehen war).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nee leider nicht.

Was hälst du von einer ICQ-Session? Und dann machen wir das Stück für Stück.

Musst nur sagen, wann du kannst.

Also in das value-Feld der SelectBox-Elemente (<option>) schreibst du am besten den wert des Primärschlüssels des jeweiligen Herstellers bzw. Modells. Beim absenden kannst du dann den Schlüssel für die nächste DB-Abfrage verwenden à la:

SELECT modell_id, modell_name from modelltabelle where hersteller_id = 'ID aus abgeschicktem Formular' (oder so ;) )

Mit dem Ergebniss füllst du dann die SelectBox (oder auch Listbox) für die Modelle ...

In php und JAVA wäre das nicht so das Problem, aber ASP ist für mich ne Wissenslücke ...

LG René

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja würde ich machen.

Mit einer Access-DB im HG bleiben wir wohl bei ASP. Abe schauen wir mal.

Das Wochenende ist bei mir blöd, weil ich besuch bekomme, aber vllt habe ich (Vor)-Mittags Zeit, da mein Besuch selber streben muss. Ich schreib dich dann per ICQ an, wenn ich kann.

Ansonsten müssen wir "Abendschule" machen nächset Woche ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also die Hersteller schreibt er mir rein aber die Modelle nicht.

Das Liegt daran, dass in Eytibis Code das Recordset zweimal durchlaufen werden soll, die Abbruchbedingung (EOF) aber ja schon gesetzt ist.

Besser aber Quick'n'Dirty:


<!-- Selectbox für Hersteller -->

<select name='hersteller'>

<% While Not EOF and Err=0%>

<option value='<% =objrs("Hersteller")%>'><% =objrs("Hersteller")%></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

EOF = false

ObjRS.MoveFirst

%>

</select>

<!-- Selectbox für Modelle -->

<select name='modell'>

<% While Not EOF and Err=0%>

<option value='<% =objrs("Modell")%>'><% =objrs("Modell")%></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

</select>

HTH,

ICQ

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hängt ein wenig von deiner Datenstrucktur ab. Hast du für Hersteller und Modelle je eine Tabelle? Solltest du zumindest.

Wenn ja:

Also in das value-Feld der SelectBox-Elemente (<option>) schreibst du am besten den wert des Primärschlüssels der jeweiligen DB-Tabelle.

<option value='<% =objrs("Modell_ID")%>'><% =objrs("Modell")%></option>

Beim absenden kannst du dann den Schlüssel für die nächste DB-Abfrage verwenden à la:

SELECT modell_id, modell_name from modelltabelle where hersteller_id = 'ID aus abgeschicktem Formular' (oder so ;) )

Mit dem Ergebniss füllst du dann die SelectBox (oder auch Listbox) für die Modelle ...

Du musst beim Selektieren eines Eintrags das Formular abschicken (<select [...] onChange='this.submit()'> siehe Beispiel) und dann die abgeschickte ID (aus dem value-Feld der <option>'s) wieder fangen und für die nächste DB-Abfrage verwenden

Viel Spaß ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe gerade erfahren das es als Hersteller nur Renault geben soll. Wenn ich auf Renault klick sollen die Modelle erscheinen. Danach soll zu den Modellen die ich dann wieder anklicken kann die passenden PS Zahlen in der nächsten Box erscheinen.

Muss ich dann eine Tabelle mit Hersteller, eine mit Modelle und eine mit PS machen?

Soll ich bei jeder Tabelle eine Spalte ID (AutoWert) einfügen mit einem Primärschlüssel?

Lg

Sunflower84

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja wegen der Erweiterbarkeit für mehrere Hersteller und der Normalisierung schlage ich auch 3 Tabellen vor, die als Primärschlüssel eine ID (Autowert) haben (ist am einfachsten):

Tabelle Hersteller: Hersteller_ID, Hersteller_Name, ...

Tabelle Modell: Modell_ID, Modell_Name, Hersteller_ID, ...

Tabelle PSZahlen: PS_ID, Modell_ID, PSZahl, ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab jetzt 2 Tabellen gemacht. Eine mit dem Namen HerstellerT und jeweils 2 Spalten und eine HerstellerT mit auch jeweils 2 Spalten. Jetzt bringt er mir folgende Fehlermeldung:

ADODB.Recordset (0x800A0CC1)

Ein Objekt, das dem angeforderten Namen oder dem Ordinalverweis entspricht, kann nicht gefunden werden.

/auswahl/index3.asp, line 21

Hab folgendes gemacht:


<%

strDB = "Data Source=" & Server.MapPath("store.mdb")


strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & strDB

SET objCon = Server.CreateObject("ADODB.Connection")

objCon.Open strCon


SET objCon = Server.CreateObject("ADODB.Connection")

objCon.Open strCon


strSQL = "SELECT * FROM HerstellerT ORDER BY Hersteller"

strSQL = "SELECT * FROM ModelleT ORDER BY Modelle"

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.open strSQL, objCon

%>



<!-- Selectbox für Hersteller -->

<select name='Hersteller' size='10'>

<% While Not EOF and Err=0%>

[COLOR="red"]<option value='<% =objrs("Hersteller")%>'><% =objrs("Hersteller")%[/COLOR]></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

EOF = false

ObjRS.MoveFirst

%>

</select>

<!-- Selectbox für Modelle -->

<select name='Modelle' size='10'>

<% While Not EOF and Err=0%>

<option value='<% =objrs("Modelle")%>'><% =objrs("Modelle")%></option>

<%

ObjRS.MoveNext

EOF = objRS.EOF

Wend

%>

</select>


Warum macht er denn diesen Fehler?

Lg

Sunflower84

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaub ich habs: ;)

strSQL = "SELECT * FROM HerstellerT ORDER BY Hersteller"

strSQL = "SELECT * FROM ModelleT ORDER BY Modelle"

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.open strSQL, objCon
Du überschreibts die Variable strSQL, somit werden die Hersteller gar nicht abgefragt. Entweder du fragst erst die Hersteller ab und gibst sie aus und dann die Modelle, oder du machst eine abfrage und lässt den rest so wie er ist
strSQL = "SELECT HerstellerT.Hersteller, TModelle.Modelle FROM

HerstellerT, MODELLET ORDER BY Hersteller"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du bist echt spitze.

Habe den Code eingefügt und es klappt fast.

Er gibt mir in der Spalte den Hersteller 3 mal aus obwohl er nur einmal in der Tabelle steht. In der Tabelle Modelle stehen 3 Einträge. Die gibt er mir richtig aus.

Wäre lieb wenn du mir den Code mal kurz erklären könntest.

Außerdem hast du mir einen Tip gegeben wie ich die Access Tabelle gestalten könnte. Dazu hätte ich auch eine Frage:

Wie erstelle ich denn Fremdschlüssel in Access? Wenn ich deine Erklärung von vorhin richtig verstanden habe müssen da Fremdschlüssel rein, oder?

Da in die Tabelle von PS ja die Modell_ID mit rein soll.

Lg

Sunflower84

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...