Memo-Grenze von 255 Zeichen?

zeppo

Mitglied
Hi miteinander!

Habe eine kleine ASP-Intranet-Anwendung geschrieben, die Meldungen in eine Datenbank schreibt. Klappt auch ganz gut!
Mit einer Ausnahme:
Wenn ich in ein TEXTAREA-Formularfeld einen Text eingeb, der länger als 255 Zeichen ist, dann meldet mir die Funktion zum Schreiben in die Access2002-Tabelle folgenden Fehler:
Code:
Fehlertyp:
Microsoft JET Database Engine (0x80040E14)
Syntaxfehler (fehlender Operator) in Abfrageausdruck ''Sehr langer Text...".
/Datei.asp, line 0815

Das Feld, in das der Text geschrieben wird ist ein Memo-Feld.
Kann ich diese Einschränkungen irgendwie umgehen?

Ach ja! Falls es noch wichtig ist:
Die DB mach ich mit
Code:
Server.CreateObject("ADODB.Recordset")
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx"
auf.

Da muss es doch eine Lösung geben, oder?
 
Memo unterstütz mehr als 255 Zeichen. Standartmässig.
Fehlender Operator sieht eher nach einem anderen Problem aus. Zeig mal dein SQL Statement ...
 
Yope!

Ist ne Idee!

Hier mal der SQL-Code:
Code:
strSQL = "INSERT INTO meldungen " & _
         "       ( bearbeiter, meldedatum, termin_start, termin_ende, termin_typ, " & _
         "         version_von, version_auf, version_patch, massnahme, beschreibung, " & _
         "         bereich, info_an, status ) " & _
         "VALUES (" & _
         "        '" & strUser & "', " & _
         "        " & ConvertDate(strDatum, true) & ", " & _
         "        " & ConvertDate(strTermin1, false) & ", " & _
         "        " & ConvertDate(strTermin2, false) & ", " & _
         "        '" & strTerminart & "', " & _
         "        '" & strVonVersion & "', " & _
         "        '" & strBisVersion & "', " & _
         "        '" & strPatchVersion & "', " & _
         "        '" & strMassnahme & "', " & _
         "        '" & strBeschreibung & "', " & _
         "        '" & strBereich & "', " & _
         "        '" & strMailto & "', " & _
         "        'neu'" & _
         ")"

ConvertDate ist ne eigene Fkt. Baut nur den Datumsstring um.
Das Feld um das es geht ist [Beschreibung].
Mach eigentlich nur nen einfachen Insert, der auch klappt.

Auslesen tu ich's einfach mit
Code:
strSQL = "Select * from Meldungen Where Status = 'genehmigt' Order By Meldedatum DESC"

anschliessend folgt noch die CR-Behandlung
Code:
  txt = rs.Fields("beschreibung").Value
  if not isnull(txt) and (len(txt) > 0) then 
    txt = replace(txt, vbCR, "<br>")
  else
    txt = "&nbsp;<br>"
  end if
die Variable txt klatsch ich dann auf den Bildschirm.

Kanni ch da echt was falsch gemacht haben?
 
Hi zeppo,

der Scriptcode scheint in Ordnung zu sein.
Ich gehe jetzt mal davon aus, dass die Werte korrekt in die Variablen geschrieben werden.

Gibst Du evl. Sonderzeichen in den Text ein (Hochkomma, Anführungszeichen etc.)?
 
Hi Luzie!

Nett! Ich mag Peanuts auch ;)

Da könntest du absolut Recht haben! Vielleicht war das ein Zufall, dass nach 255 Zeichen abgebrochen wurde (hab nämlich nachgezählt *hihihi*).

Ist leider nicht auszuschließen, dass Sonderzeichen eingegeben werden.
Kennst du da eine entsprechende Codierfunktion, damit ich den String vor dem Speichern behandeln kann, oder muss ich mit replace alle möglichen Sonderzeichen rausfiltern?
Wenn ja, welche Zeichen sind denn gefährlich?

Gruß Zeppo
 
Versuche es mit der Funktion:
Code:
Function DBQuote(Value) 
 DBQuote = "'" & Replace(Value, "'", "''") & "'" 
End Function

Die Variablen die du dann dem SQL String übergibst brauchen dann nicht mehr im Hochkomma zu stehen. Einfach vor jede Variable im SQL String DBQuote(Varible) schreiben. Die Hochkommas werden dann von der Funktion gemacht.

Dann können die User eingeben was Sie wollen.

Gruss
Lance
 
Hi

ich würde zumindest für das Insert das Hochkomma replacen

strVar = Replace(Request.Form("beschreibung"),"'","''")

Den Text für die Ausgabe dann mit Server.Htmlencode(feld) encodieren. Du kannst auch das Feld via RegExp überprüfen und nur bestimmte Zeichen zulassen. Aber eigentlich dürfte es reichen, das Hochkomma zu replacen und die Ausgabe zu encodieren.

Edit: ich seh gerade, hier ist bereits geantwortet worden. Ich war 1 Min. zu spät ;)
 
Zuletzt bearbeitet:
Ahhhh! :)
mui bien!

Habt vielen Dank für die ausführlichen Tipps!
Werd das später mal ausprobieren und den Erfolg posten.
Ich glaube fast, dass es daran liegt.

Gruß
Zeppo
 
Fast hätte ich vergessen, euch zu antworten.
Ihr hattet natürlich Recht!
Kaum habe ich eueren Rat befolgt und die Replace-Funktion angewandt,
schon hat's gefunzt.
War wohl wirklich bloss ein saublöder Zufall, dass es 254 Zeichen waren :confused:

Vielen Dank nochmal :)
 

Neue Beiträge

Zurück