Memofeld auslesen u. updaten mit ASP
MarkX
- datenbank
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.
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
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.
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
Hi,
zeig mal bitte, wie du das mit der Variable versucht hast. Diese Variante sollte eigentlich gehen.
MfG
Rouven
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
Habe vergessen,
am Ende der Schleife erfolgt natürlich die Ausgabe mit:
Response.Write Tracking
Tracking = CStr(auswertung("Tracking"))
OK, und was passiert jetzt im Laufe der Zeit mit dieser Tracking-Variable? Wird sie leer?
MfG
Rouven
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.
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
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.
Hi,
poste bitte nochmal aktuellen Code, insbesondere die Abfrage und die Tabellenstruktur.
Und probier mal bitte aus:
MfG
Rouven
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.
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
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.
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
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.
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
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.
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
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.
Moin,
Tracking = auswertung("Tracking").Value
probiert?
Habe ich probiert. Keine Anzeige. Ich glaube ich erschieß mich. :-)
MfG
MarkX.
Hi,
Und probier mal bitte aus:
- 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
%>
- nur die Nicht-Memofelder abfragen
Funktioniert bestens. Die Felder werden angezeigt.
MfG
MarkX.