Daten zu einem Datensatz in einer Selectbox ausgeben - funktioniert nicht

Hi

Du, das hilft mir echt nicht weiter, wenn ich den Quelltext nicht kenne. Ich kann weder mit Screenshots was anfangen, noch mit geheimen Daten.

So wie ich Dir das erklärt habe, funktioniert es. Ich habe es mal nachgestellt. Habe 2 Tabellen in eine Beziehung gebracht. Tabelle Maschinen und Tabelle Reparatur und mir immer eine Maschinen-Nr. über den URL-Paramenter filtern lassen. Wichtig ist vor allem mit Javascript, dass man Groß- und Kleinschreibung beachten muss.

var maschine habe ich jetzt mal als Variable definiert und unter der Selectbox ausgegeben.

Du kannst es ja einfach mal mit Deinem Quelltext bzw. Deiner Definition vergleichen. Die SQL ist ja ganz schnell in Access zusammengefügt. Ob 2 Tabellen oder 3. Du kannst Dir auch direkt eine Abfrage speichern und diese dann nutzen.

Code:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/connCMS.asp" -->
<%
var rs__MMColParam = "1";
if (String(Request.QueryString("id")) != "undefined" && 
    String(Request.QueryString("id")) != "") { 
  rs__MMColParam = String(Request.QueryString("id"));
}
%>
<%
var rs = Server.CreateObject("ADODB.Recordset");
rs.ActiveConnection = MM_connCMS_STRING;
rs.Source = "SELECT [maschinen].[maschinenid], [maschinen].[baujahr], [maschinen].[Maschine], [reparatur].[maschinenid], [reparatur].[reperaturart] FROM maschinen left JOIN reparatur ON [maschinen].[maschinenid]=[reparatur].[maschinenid] WHERE maschinen.maschinenid = "+ rs__MMColParam.replace(/'/g, "''") + "";
rs.CursorType = 0;
rs.CursorLocation = 2;
rs.LockType = 1;
rs.Open();
var rs_numRows = 0;
var maschine =(rs.Fields.Item("Maschine").Value);
%>
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p><%=(rs.Fields.Item("maschinenid").Value)%></p>
<p><%=(rs.Fields.Item("baujahr").Value)%></p>
<form name="form1" method="post" action="">
  <select name="select">
      <% 
while (!rs.EOF) {
%>
    <option value="<%=(rs.Fields.Item("reperaturart").Value)%>"><%=(rs.Fields.Item("reperaturart").Value)%></option>
    <%
  rs.MoveNext();
}
if (rs.CursorType > 0) {
  if (!rs.BOF) rs.MoveFirst();
} else {
  rs.Requery();
}
%>
  </select>
</form>
 <%= maschine %>
</body>
</html>
<%
rs.Close();
%>
 
Zuletzt bearbeitet:
Hallo nochmal!

Du mußt Dich doch nicht so abmühen mit meinen Problemen... Ich habe Dein Script bei mir mal reingefriemelt und das, was Du wolltest, funktioniert auch.

Leider war ich ganz zu Beginn auch schon soweit, daß mir in einer Selectbox alle Reparaturen zu einer Maschine angezeigt werden.

Das Problem ist ja erst aufgetaucht, als ich das Serververhalten "Bereich wiederholen" dazugenommen habe! Er will mir einfach nicht viele Selectboxen untereinander ausgeben! Bei Textfeldern hingegen geht's!

Das ist das, was ich nicht verstehe: Der Einzige Unterschied zwischen "funktioniert" und "funktioniert nicht" ist das Steuerelement, in dem die Ausgabe erfolgen soll! Und das ist mittlerweile auch mein einziges Problem (zuminest in diesem Teilbereich :( ) -> siehe zuletzte gepostete Fehlermeldung!

Tut mir leid, wenn ich Dich damit so sehr nerve, Du brauchst Dich auch nicht dermaßen reinknien... Ist ja nicht Dein Problem, wenn's nicht klappt... Es tut mir auch leid, daß Du Code vermißt, aber ich habe schon so viel Code gepostet, daß ich Angst hatte, daß mich alle für mischugge halten, wenn ich immer so riesige Posts mache...

Also, hier mein momentaner Code für das Recordset:
Code:
<%
var RecordsetRep__varSN = "%";
if(String(Request.QueryString("SN")) != "undefined") { 
  RecordsetRep__varSN = String(Request.QueryString("SN"));
}
%>
<%
var RecordsetRep = Server.CreateObject("ADODB.Recordset");
RecordsetRep.ActiveConnection = MM_Con6_STRING;
RecordsetRep.Source = "SELECT *  FROM dbo.tMaschineStamm  
INNER JOIN dbo.tReparatur  
ON dbo.tMaschineStamm.SD_Seriennummer = dbo.tReparatur.RE_Seriennummer  
WHERE dbo.tMaschineStamm.SD_Seriennummer = '"+ RecordsetRep__varSN.replace(/'/g, "''") + "'";
RecordsetRep.CursorType = 0;
RecordsetRep.CursorLocation = 2;
RecordsetRep.LockType = 3;
RecordsetRep.Open();
var RecordsetRep_numRows = 0;
var RBeschreibung, RErl, RNotiz, RFehlerart, RDatum, RSN, RVerurs, RZeit;
RBeschreibung = RecordsetRep.Fields.Item("RE_Beschreibung");
RErl = RecordsetRep.Fields.Item("RE_Erledigt");
RNotiz = RecordsetRep.Fields.Item("RE_Notiz");
RFehlerart = RecordsetRep.Fields.Item("RE_Fehlerart");
RDatum = RecordsetRep.Fields.Item("RE_Datum");
RSN = RecordsetRep.Fields.Item("RE_Seriennummer");
RVerurs = RecordsetRep.Fields.Item("Verursacher");
RZeit = RecordsetRep.Fields.Item("Zeitaufwand");
%>
<%
var Repeat3__numRows = -1;
var Repeat3__index = 0;
RecordsetRep_numRows += Repeat3__numRows;
%>
Und der Code für meine "Bereich wiederholen"-Schleife inklusive "Select"-Schleife, wobei die Tabelle davor und danach noch weiter geht, aber das ist hierfür unwichtig:
Code:
    <% while ((Repeat3__numRows-- != 0) && (!RecordsetRep.EOF)) { %>
    <tr> 
      <td align="center" valign="middle" width="45%"> 
        <select name="select">
          <%
while (!RecordsetRep.EOF)
{
%>
          <option value="<%=(RBeschreibung)%>" ><%=(RBeschreibung)%></option>
          <%
  RecordsetRep.MoveNext();
}
if (RecordsetRep.CursorType > 0) {
  if (!RecordsetRep.BOF) RecordsetRep.MoveFirst();
} else {
  RecordsetRep.Requery();
}
%>
        </select>	  
      </td>
      <td align="center" valign="middle" width="5%"> 
        <input type="checkbox" name="rep_erledigt" value="checkbox">
      </td>
      <td align="center" valign="middle" width="30%"> 
        <input type="text" name="rep_notiz" value="<%=(RNotiz)%>" class="text" STYLE="width:250">
        <input type="hidden" name="RE_Fehlerart" value="<%=(RFehlerart)%>">
        <input type="hidden" name="RE_Datum" value="<%=(RDatum)%>">
        <input type="hidden" name="RE_Erledigt" value="<%=(RErl)%>">
        <input type="hidden" name="RE_Seriennummer" value="<%=(RSN)%>">
      </td>
      <td align="center" valign="middle" width="10%"> 
        <input type="text" name="rep_verursacher" value="<%=(RVerurs)%>" class="text" STYLE="width:90">
      </td>
      <td align="center" valign="middle" width="10%"> 
        <input type="text" name="rep_zeit" value="<%=(RZeit)%>" class="text" STYLE="width:35">
      </td>
    </tr>
    <%
  Repeat3__index++;
  RecordsetRep.MoveNext();
}
%>
Wenn es Dir zuviel wird, mußt Du da auch nicht mehr so viel drüber nachdenken. Es könnte ja nur sein, daß Du eventuell noch so ganz spontan ein Ass im Ärmel hättest, womit Du mir meine Fehlermeldung vom Hals schaffen könntest... Nur, falls Dir gerade noch was auffallen sollte, woran es liegen könnte, daß er die Selectbox nicht wiederholen will...

Vielen lieben Dank aber auf jeden Fall schonmal für Deine bisherige Mühe und Geduld :p

LG, Jerinca
 
Hi

naja, so langsam blicke ich echt nicht mehr durch. :eek:

Ich versteh das auch nicht mehr.

Einmal schreibst Du, Du wolltest nur eine Maschinen pro Seite angezeigt haben. Jetzt plötzlich legst Du wieder eine Schleife drumrum und schreibst etwas von mehreren Selectboxen. Warum das?

Gibt es zu einer Seriennummer jetzt doch wieder mehrere Maschinen? Warum noch eine Schleife um den ausgewählten Datensatz?

Sorry, Du kannst nicht eine Schleife in eine andere legen im gleichen Recordset. Zu ändern wäre das mit meinem Codevorschlag im 2. oder 3. Posting, wo Werte in einer Variable miteinander vergleichen werden.

Ich kann Dir nur noch helfen, wenn Du Dir die Mühe machen willst, mir Deine Dateien für die Ausgabeseite und die Detailseite und eine Datenbank mit Dummydaten zuzusenden.
 
Hallo Luzie!

Naja, also das mit der Dummy-DB klappt wohl nicht, weil ich davon echt überhaupt keine Ahnung habe (also, wie man sowas macht und verschickt) :(

Die kursiv geschriebene While-Schleife ist ja nur dazu da, die HTML-Tabellenzeile mit den Raparaturen zu wiederholen! Da die ja in einer eigenen Tabelle stehen, ist das jeweils ein Datensatz der Tabelle Reparaturen (unique durch eine fortlaufende Reparaturenummer + Seriennummer). Denn eine Seriennummer (also eine Maschine) kann mehrere Reparaturen haben, deshalb soll dieser Bereich solange wiederholt werden, bis zur ausgewählten Seriennummer keine Reparaturen mehr da sind.

Und die fett geschriebene While-Schleife ist nur für die Select-Box da, damit darin alle Reparatur-Meldungen angezeigt werden...

Das alles gehört aber immer zu einer Seriennummer (!)

Ich möchte, daß zu einer Seriennummer alle Reparaturen aufgelistet werden, wobei die Reparaturbeschreibung (das ist nur ein Feld der Tabelle) in einer Selectbox ausgegeben wird, damit man da leicht was ändern kann ohne Schreibarbeit :suspekt:

Ich werde jetzt mal probieren, verschiedene Recordsets zu basteln, wenn Du sagst, daß man keine Schleifen im gleichen Recordset verschachteln kann... :suspekt:

Naja, danke aber schonmal wieder vielmals, daß Du Dir immer solche Mühe gibst :p
 
Jerinca hat gesagt.:
Hallo Luzie!
Ich werde jetzt mal probieren, verschiedene Recordsets zu basteln, wenn Du sagst, daß man keine Schleifen im gleichen Recordset verschachteln kann... :suspekt:
Naja, danke aber schonmal wieder vielmals, daß Du Dir immer solche Mühe gibst :p

Das geht vermutlich auch in einer SQL.
Ich vermute mal, ich stolpere über Dein Datenbankdesign weil man irgendwie immer eine Lösung schon vorgefertigt im Kopf hat, aber nicht weiss, wie das Design anderer aussieht, ob es überhaupt so Sinn macht.

Wenn Du mir keine CSV-Datei oder (ich weiss ja nicht, welche DB Du nimmst) vermute mal MSSQL. Da gibts sicherlich Möglichkeiten zum Export. Kannst Das nicht, einfach Mühe machen, und alle abhänigen Tabellen zumindest mit einem funktioniertenden Datensatz (verbindung) in eine Textdatei schreiben.

Du möchtest jetzt 2 Selectboxen, eine mir den Reparaturen und eine mit den Repataturmeldungen.

Ansonsten können wir jetzt bis zum Sanktnimmerleinstag hier weiterschreiben
 
Hallo nochmal!

Heute schon so früh so fit :p

Nein, also ein kompletter Datensatz aus der DB-Tabelle Reparatur besteht aus mehreren Daten (fortlaufende Nummer + Seriennummer = Primärschlüssel; Reparaturbeschreibung, Reparatur-Datum, Reparatur-Notiz, Verursacher, Zeitaufwand usw.).

Eine Zeile/Tupel/Datensatz in dieser DB-Tabelle nenne ich vereinfacht "Reparatur".

Die Reparaturbeschreibung oder auch Reparaturmeldung (ist das gleiche!) ist also nur ein Feld/Attribut dieses Datensatzes!

Es soll dann etwa so aussehen (nicht daran stören, daß nicht alle DB-Felder ausgegeben werden, denn manche sind auch hidden):
Code:
Seriennummer: 12345
---------------------------------
Reparatur:

   Beschreibung      erledigt?   Notiz                Verursacher
1  Tür klemmt          nein      klemmt nur unten     Jerinca       usw.
2  Fenster quietscht   nein      schriller Ton        unbekannt     usw.
3  ....
So, und nur die Reparaturbeschreibung (also hier "Tür klemmt" und "Fenster quietscht") sollen in einer Selectbox ausgegeben werden, der Rest in Textfeldern und Checkboxen.

Deshalb liegt der Bereich Reparatur in einer Schleife und die Selectbox auch. Aber - wie schon erwähnt - er will die Selectboxen nicht wiederholen :mad:

Naja, aber wenn's Dir zu stressig wird, mußt Du Dich da wirklich nicht abrackern... Vielleicht bin ich auch einfach zu naiv zum Erklären... :offtopic:

Ich probier's jetzt erstmal mit den verschiedenen Recordsets...

Grüßchen, Jerinca
 
Jetzt verstehe ich endlich.
Manchmal dauert es lang, bis der Groschen fällt.

Am einfachsten ist es wirklich, Du legst Dir noch ein zusätzliches RS an. Einfach nur für die Reparaturbeschreibung und Felder, die Du brauchst. Hier filterst Du auch die Maschinen-nummer.

Dann speicherst Du Dir die Selectbox in eine Variable. (sh. Beispiel) Die Optionsfelder legst Du in die Schleife. Musst halt nur eben in Javascript schreiben.

Code:
Set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.ActiveConnection = MM_xxx
rs1.Source = "SELECT beschreibung FROM tabelle where maschinennummer =124"
rs1.CursorType = 0
rs1.CursorLocation = 2
rs1.LockType = 1
rs1.Open()
dim txt
txt = "<select name=""select"">"
rs1_numRows = 0
while not rs1.eof
txt = txt &  "<option value=""" & rs1(0) & """>" & rs1(0) & "</option>"
rs1.movenext
wend
txt = txt & "</select>"
rs1.close
set rs1=nothing
%>

Jetzt hast Du die komplette Selectbox in einer Variablen und kannst diese ohne Probleme in Deiner 2. Schleife ausgeben.

<% = txt %>
 
Hallo nochmal!

Sorry, war am Freitag so busy, daß ich vergessen habe, ein schönes verlängertes Wochenende zu wünschen :rolleyes:

Danke für Deinen Tipp! Ich werde es bei Gelegenheit mal ausprobieren...

Nur bin ich letzten Freitag dahinter gekommen, daß es - laut Dreamweaver - gar nicht möglich ist, auf einer ASP-Site z.B. Datensätze zu ändern und einen neuen Datensatz anzulegen!

Ich muß zum Ändern/Aktualisieren eines Datensatzes eh per Link auf eine andere Site wechseln...

Aus dem Grund war es eigentlich unsinnig, die Selectboxen wiederholen zu wollen, denn ändern kann ich die Datensätze ja sowieso nicht auf der gleichen Seite wie die Anzeige-Seite!

Leider ist mir das erst aufgefallen, nachdem ich 2 Wochen lang versucht habe, Access-Funktionalität 1:1 in ASP zu übersetzen :( Und das GEHT NICHT :mad:

Aber trotzdem VIELEN, VIELEN DANK FÜR DEINE HILFE! Ich werde sie sicher im Laufe der nächsten Monate noch einige Male in Anspruch nehmen müssen ;-]

Liebe Grüße, Jerinca
 
Hi

das Ausgaben, Löschen, Ändern und Neuanlegen von Datensätzen ist natürlich schon auf einer Seite möglich. Mit der richtigen Abfragetechnik kann man in ASP schon eine ganze Menge machen.

Aber dies im DW zusammenzuklicken ist vermutlich nicht ohne Eingreifen in den Scriptcode möglich, da hast Du recht.

Ich vermute mal, dass dies auch die Gedankensperre bei mir war, ich habe einfach nicht verstanden, was Du wolltest.
 
Zurück