MarkX: Memofeld auslesen u. updaten mit ASP

Moin,

ich habe folgendes Problem: ich möchte eine größere Menge Text in einer Access2000-Datenbank speichern. Das Ganze passiert auf einer ASP-bassierten Website. Ich möchte die URLs, die ein Besucher aufruft in einem Feld abspeichern um näher zu erfahren, welche Unterseiten meine Besucher aufrufen.
Soweit kein Problem. Das ganze funktioniert. Leider sind Textfelder in Access2000-Datenbanken auf 255 Zeichen limitiert. Ich stöberte im Netz und fand den Hinweis, daß Memofelder für größere Datenmengen geeignet wären. Ich änderte also das betreffende Feld von "Text" auf "Memo". Jetzt bekam ich beim Auslesen nichts mehr angezeigt. Bei meiner Recherche im Netz stieß ich auf einen Artikel, der besagt, daß Memofelder nur einmal ausgelesen werden können. Dann verharrt der Zeiger am Ende es Memofeldes. Folglich wird beim erneuten Auslesen ein leerer String angezeigt. Der Artikel riet, die Inhalt des Memofeldes beim Auslesen in einer Variable zu speichern und fortan diese Variable auszugeben. Das habe ich versucht. Trotzdem bekomme ich nichts angezeigt.
Wenn ich die Datenbankdatei wieder vom Webserver auf meinen lokalen Rechner lade und dort anzeigen lasse, sehe ich aber die erzeugten Einträge. Wie kann ich mit ASP eine Anzeige des Memofeldes hinbekommen?

MfG
MarkX.

  1. hi,

    Ich möchte die URLs, die ein Besucher aufruft in einem Feld abspeichern um näher zu erfahren, welche Unterseiten meine Besucher aufrufen.

    Warum wertest du dafür nicht die Access Logs des Webservers aus?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Moin,

      Warum wertest du dafür nicht die Access Logs des Webservers aus?

      ich habe keinen Zugriff auf diese Dateien. Eine Anfrage bei meinem Provider ergab, daß diese Möglichkeit nicht besteht. Kann es sein, daß Windows-Server keine entsprechenden Dateien führen?
      Ich weiß es nicht. Deshalb wollte ich mir diese Möglichkeit selbst schaffen, was ja vom Grundsatz her überhaupt kein Problem ist.

      MfG
      MarkX.

      1. Ahoi,

        natürlich führen Windoof-Systeme für ihren WebServer (IIS) auch Log-Dateien. Diese liegen per default unter

        %systemroot%\system32\LogFiles\W3SVC~

        .. die Tilde steht für die verschiedenen "WebSites" soweit im IIS angelegt.

        Natürlich kann man den Ausgabeort der Logfiles auch pro "WebSite" definieren.

        Ich nehme aber an, dass diese Arbeit den Admins deines Providers etwas zu viel ist und die Webs für Kunden mittels Scripting erstellt / konfiguriert werden, wo die Admins auch keine Sonderlocken drehen wollen.

        Grüsse, Adé
        Frank

  2. Hi,

    zeig mal bitte, wie du das mit der Variable versucht hast. Diese Variante sollte eigentlich gehen.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Moin,

      zeig mal bitte, wie du das mit der Variable versucht hast. Diese Variante sollte eigentlich gehen.

      Dies sind die entscheidenden Code-Fragmente. Es werden noch andere Felder ausgegeben, die ich jetzt mal weggelassen habe.

      set auswertung = Conn.Execute("select * from Session")
      Do Until auswertung.EOF
      .
      .
      .
      Tracking = CStr(auswertung("Tracking"))
      .
      .
      auswertung.MoveNext
      Loop

      1. Habe vergessen,

        am Ende der Schleife erfolgt natürlich die Ausgabe mit:

        Response.Write Tracking

      2. Tracking = CStr(auswertung("Tracking"))

        OK, und was passiert jetzt im Laufe der Zeit mit dieser Tracking-Variable? Wird sie leer?

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. Tracking = CStr(auswertung("Tracking"))
          OK, und was passiert jetzt im Laufe der Zeit mit dieser Tracking-Variable? Wird sie leer?

          Sie soll direkt vor dem "auswertung.MoveNext" ausgegeben werden mit "Response.Write Tracking".

          Es wird aber nichts angezeigt.

          MfG
          MarkX.

          1. Es wird aber nichts angezeigt.

            und wird was angezeigt, wenn du direkt auf das Recordset zugreifst? Ich hab nicht mehr genau im Kopf wie das war, aber die Reihenfolge im Select-Statement ist auch relevant. Ich glaube da war was, dass Memo-Spalten nur als letzte abgefragt werden können, also in etwa
            SELECT text, int, byte, memo FROM...

            MfG
            Rouven

            --
            -------------------
            ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
            1. Moin,

              SELECT text, int, byte, memo FROM...

              Das hatte ich parallel zu Dir auch gerade recherchiert. Auch das brachte keinen Erfolg. Auch wenn ich das Recordset nicht in einer Variable speichere und direkt anzeigen will, wird nichts angezeigt. Ich verstehe das absolut nicht. Vielen Dank für Deine unermüdliche Hilfe auf jeden Fall!

              MfG
              MarkX.

              1. Hi,

                poste bitte nochmal aktuellen Code, insbesondere die Abfrage und die Tabellenstruktur.
                Und probier mal bitte aus:

                1. nur das Memofeld abfragen
                2. nur die Nicht-Memofelder abfragen

                MfG
                Rouven

                --
                -------------------
                ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
                1. Hi,

                  Hier der aktuelle Code:

                  Set Conn = Server.CreateObject("ADODB.Connection")
                  Conn.Open "xxxx", "xxxx", "xxxx"
                  set auswertung = Conn.Execute("select SessionID, Datum, Browser, OS, Tracking from Session")
                  Response.Write "<table>"
                  Do Until auswertung.EOF
                  Tracking = CStr(auswertung("Tracking"))
                  SessID = auswertung("SessionID")
                  IP = auswertung("Browser")
                  Herkunft = CStr(auswertung("OS"))
                  date_cont = auswertung("Datum")
                  x = InStr(date_cont, "2006")
                  x = x - 4
                  y = x - 6
                  datum = Mid(date_cont, x, 8)
                  zeit = Mid(date_cont, y, 6)
                  Response.Write "<tr><td bgcolor='#EEEEEE' class='text'>"
                  Response.Write Mid(datum, 1, 2)
                  Response.Write "."
                  Response.Write Mid(datum, 3, 2)
                  Response.Write "."
                  Response.Write Mid(datum, 5, 4)
                  Response.Write "</td>"
                  Response.Write "<td bgcolor='#EEEEEE' class='text'>"
                  Response.Write Mid(zeit, 1, 2)
                  Response.Write ":"
                  Response.Write Mid(zeit, 3, 2)
                  Response.Write ":"
                  Response.Write Mid(zeit, 5, 2)
                  Response.Write "</td>"
                  Response.Write "<td bgcolor='#EEEEEE' class='text'>"
                  Response.Write Herkunft
                  Response.Write "</td>"
                  Response.Write "<td bgcolor='#EEEEEE' class='text'>"
                  Response.Write Tracking
                  Response.Write "</td></tr>"
                  auswertung.MoveNext
                  Loop
                  Response.Write "</table>"
                  Conn.Close

                  Ich werde die beiden von Dir genannten Vorschläge sofort ausprobieren.

                  MfG
                  MarkX.

                  1. Conn.Open "xxxx", "xxxx", "xxxx"

                    hast du damit mal rumgespielt? Andere Verbindungs/Cursor-Einstellungen?

                    Tracking = CStr(auswertung("Tracking"))

                    Hast du da mal ein einfaches
                    Tracking = auswertung("Tracking").Value
                    probiert?

                    MfG
                    Rouven

                    --
                    -------------------
                    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
                    1. Moin,

                      Conn.Open "xxxx", "xxxx", "xxxx"
                      hast du damit mal rumgespielt? Andere Verbindungs/Cursor-Einstellungen?

                      Da stehen ja nur der Datenbankname, der Benutzername und das Passwort. Welche weiteren Optionen hätte ich denn für Einstellungen hier noch?

                      Tracking = CStr(auswertung("Tracking"))
                      Hast du da mal ein einfaches
                      Tracking = auswertung("Tracking").Value
                      probiert?

                      Das hab ich noch nicht probiert. Ich hatte probiert:
                      Tracking = auswertung("Tracking")

                      Welche Funktion hat das ".Value"?

                      Das kann ich ja mal noch probieren.

                      MfG
                      MarkX.

                      1. Conn.Open "xxxx", "xxxx", "xxxx"
                        hast du damit mal rumgespielt? Andere Verbindungs/Cursor-Einstellungen?

                        Na ja, es gäbe da auch noch weitere Parameter. Analog für die Execute-Methode.

                        Welche Funktion hat das ".Value"?

                        Das ist die _eigentliche_ Methode um den Wert auszulesen, vgl. MSDN-Library.
                        Das andere ist glaube ich eine Art Schnellzugriff.

                        MfG
                        Rouven

                        --
                        -------------------
                        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
                        1. Hi,

                          also gut. Ich werde das für heute erstmal sein lassen. Mein Kopf explodiert gleich. Für gewöhnlich ereilt mich dann abends zu Hause der entscheidende Geistesblitz.
                          Vielen Dank für die Hilfe nochmal. Ich werde morgen an dieser Stelle weiter über entsprechende (Miß-)Erfolge berichten. ;-)

                          MfG
                          MarkX.

                        2. So,

                          jetzt hab ich gerade mal meinen alten Code herausgekramt.
                          Dim termine_conn, recset
                          Set recset = Server.CreateObject("ADODB.RECORDSET")
                          Set termine_conn = Server.CreateObject("ADODB.CONNECTION")
                          termine_conn.Open "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=D:\XUnitConf\web70\Datenbank\oams_abi2000;"
                          recset.Open "SELECT * FROM termine ORDER BY datum", termine_conn
                          und irgendwo weiter unten greife ich dann mit
                          rec.Fields("beschreibung")
                          auf ein Memo-Feld zu...

                          MfG
                          Rouven

                          --
                          -------------------
                          ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
                          1. Moin,

                            ...auf ein Memo-Feld zu...

                            Ok, vielen Dank. Das werde ich morgen auf Arbeit gleich mal ausprobieren. Ich bin mal gespannt!

                            Schönen Abend noch!

                            MarkX.

                        3. Hoi,

                          .Value ist als Default-Property eingestellt, deswegen wird sie automatisch verwendet wenn einfach nur recordset("field") aufgerufen wird.

                          ADODB.Connection.Execute führt eine Abfrage immer als Fireho(u)se Cursor aus. Forward-Only, Readonly.

                          Ich bezweifle dass über evt. verwendete Execute-Optionen ein anderes Ergebnis zustande kommt.

                          Irgendwo ist da noch ein anderer Wurm (und zwar gewaltiger) drin.

                          Adé
                          Frank

                          1. Moin,

                            Irgendwo ist da noch ein anderer Wurm (und zwar gewaltiger) drin.

                            Ich bin für jede Idee dankbar, die mich auf die Spur dieses Wurms bringt. So gewaltig kann er aber nicht sein.

                            MfG
                            MarkX.

                    2. Moin,

                      Tracking = auswertung("Tracking").Value
                      probiert?

                      Habe ich probiert. Keine Anzeige. Ich glaube ich erschieß mich. :-)

                      MfG
                      MarkX.

                2. Hi,

                  Und probier mal bitte aus:

                  1. nur das Memofeld abfragen

                  Es wird nichts angezeigt. Folgender Code:

                  <%
                  Set Conn = Server.CreateObject("ADODB.Connection")
                  Conn.Open "xxxx", "xxxx", "xxxx"
                  set auswertung = Conn.Execute("select Tracking from Session")
                  Do Until auswertung.EOF
                  Tracking = CStr(auswertung("Tracking"))
                  Response.Write Tracking
                  auswertung.MoveNext
                  Loop
                  Conn.Close
                  %>

                  1. nur die Nicht-Memofelder abfragen

                  Funktioniert bestens. Die Felder werden angezeigt.

                  MfG
                  MarkX.