Martin: Ergebnis Datenbankabfrage in JS-Variable packen

Hallo,

Eine Datenbankabfrage sendet ein HTML-Dokument an einen Frame. Den Versand kann ich nicht weiter beeinflussen, wohl aber den Inhalt. Das Abfrageergebnis soll in Form einer Tabelle präsentiert werden. Diese Tabelle möchte ich in eine JS-Variable packen, die dann in einem anderen Frame weiterverwendet werden soll.

Die Ergebnisseite kann ich folgendermaßen definieren:

<html>
<head><title>Abfrageergebnis</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000">
<TABLE CELLSPACING="0" BORDER="0" WIDTH="640">
<%BeginDetail%>
<TR><TD WIDTH="640" VALIGN="TOP">
<%Abfrageergebnis%>
</TD></TR>
<%EndDetail%>
</Table>
</body>
</html>

Dann jedoch bräuchte ich ein JS-Script, das die Tabelle packt und als Variable definiert (mittels Einfügen der Tabelle in einen div-Bereich, der dann zum Inhalt einer Variablen definiert wird?).

Für mich - als JS-Laien, der bereits zwei Nächte über den JS-Kapiteln in SELFHTML gebrütet hat - wäre es auch vorstellbar, die Ergebnisseite folgendermaßen zu definieren:

<html>
<head><title>Abfrageergebnis</title>
<SCRIPT LANGUAGE="JavaScript">
<!-- ;
var Ergebnis = "<TABLE CELLSPACING="0" BORDER="0" WIDTH="640"><%BeginDetail%><TR><TD WIDTH="640" VALIGN="TOP"><%Abfrageergebnis%></TD></TR><%EndDetail%></Table>";
parent.frames[0].SetDaten(Ergebnis, true)
// -->
</SCRIPT>
</head>
</html>

Was ich bei dieser Lösung nicht weiß ist, wie kann ich verhindern, daß der String nicht durch das erste " beendet wird? Durch zwei zusätzliche "" (wie bei einer ACCESS Datenbankabfrage), so daß dann letztendlich da stehen würde ... BORDER="""0""" ...?

Ist das überhaupt ein Weg, den ich weiterverfolgen sollte?

Vielen Dank im voraus
Martin

  1. Hi Martin

    zumindest bei dem "-Problem kann ich Dir helfen:

    <SCRIPT LANGUAGE="JavaScript">
    <!-- ;
    var Ergebnis = "<TABLE CELLSPACING="0" BORDER="0" WIDTH="640"><%BeginDetail%><TR><TD WIDTH="640" VALIGN="TOP"><%Abfrageergebnis%></TD></TR><%EndDetail%></Table>";
    parent.frames[0].SetDaten(Ergebnis, true)
    // -->
    </SCRIPT>

    Ich würde es ungefähr so schreiben:
    * ( " maskieren geht so:  " ), (oder " einfach weglassen: border=0)
    * Ich teile so lange Strings auch gerne in mehrere Zeilen auf

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var Ergebnis = "<TABLE CELLSPACING="0" BORDER=0 WIDTH="640">";
    var Ergebnis += "<%BeginDetail%>";
    var Ergebnis += "<TR><TD WIDTH="640" VALIGN="TOP"><%Abfrageergebnis%></TD></TR>";
    var Ergebnis += "<%EndDetail%>";  // ob das hier (zwischen </TR> und </TABLE> aber am richtigen Platz ist ???
    var Ergebnis += "</TABLE>";
    parent.frames[0].SetDaten(Ergebnis, true);
    // -->
    </SCRIPT>

    1. Hi Martin,
      nochmal ich: habe eben aus versehen zuviel "var"s stehen lassen, so hatte ich es gemeint:

      <SCRIPT LANGUAGE="JavaScript">
      <!--
      var Ergebnis = "<TABLE CELLSPACING="0" BORDER=0 WIDTH="640">";
      Ergebnis += "<%BeginDetail%>";
      Ergebnis += "<TR><TD WIDTH="640" VALIGN="TOP"><%Abfrageergebnis%></TD></TR>";
      Ergebnis += "<%EndDetail%>";
      Ergebnis += "</TABLE>";
      parent.frames[0].SetDaten(Ergebnis, true);
      // -->
      </SCRIPT>

  2. Hallo Martin

    <html>
    <head><title>Abfrageergebnis</title>
    <SCRIPT LANGUAGE="JavaScript">
    <!-- ;

    Ich weiß nicht, was bei Dir in BeginDetail und EndDetail steht, auf jedenfall sollte am Anfang jeweils ein <TR><TD> und am Ende ein </TD></TR> stehen, da das innerhalb einer Tabelle vorkommt.

    var Ergebnis = "<TABLE CELLSPACING="0" BORDER="0" WIDTH="640"><%BeginDetail%><TR><TD WIDTH="640" VALIGN="TOP"><%Abfrageergebnis%></TD></TR><%EndDetail%></Table>";
    parent.frames[0].SetDaten(Ergebnis, true)
    // -->
    </SCRIPT>
    </head>
    </html>

    Wenn Du sicher sein kannst, daß in den Werten aus der Datenbank keine Hochkommas ' vorkommen, kannst du das auch so machen:
    var Ergebnis = '<TABLE CELLSPACING='0' BORDER='0' WIDTH='640'><%BeginDetail%><TR><TD WIDTH='640' VALIGN='TOP'><%Abfrageergebnis%></TD></TR><%EndDetail%></Table>';

    Was ich bei dieser Lösung nicht weiß ist, wie kann ich verhindern, daß der String nicht durch das erste " beendet wird? Durch zwei zusätzliche "" (wie bei einer ACCESS Datenbankabfrage), so daß dann letztendlich da stehen würde ... BORDER="""0""" ...?

    Nein, sondern ein " innerhalb eines Strings ersetzen durch " falls " Stringbegrenzer ist. Falls ' Stringbegrenzer ist, dann innerhalb des Strings ' durch' ersetzen.

    Ist das überhaupt ein Weg, den ich weiterverfolgen sollte?

    Ja.

    Vielen Dank im voraus
    Martin

    Gruß, Lutz.