Typenkonflik
Markus
- datenbank
Hi Leute
Habe ein Eintragunsformular mit dem Feld Preis:
<input type="text" name="Preis" size="10" maxlength="8">
dieses Feld wird an eine Access DB übergeben in das Feld "Preis" mit dem Felddatentyp Zahl!
mit:
rs("Preis") = Request.Form("Preis")
soweit ein Preis eingegeben wird funktioniert alles super!
Mein Problem:
Wenn jemand keinen Preis eingibt (ist erlaubt) bleibt das Feld leer und ich bekomme beim abschicken eine Fehlermeldung:
Provider- Fehler '80020005'
Typkonflikt.
/form.asp, line 54 // Hier steht: rs("Preis") = Request.Form("Preis")
Wie löst man sowas einfach u sauber?
Danke
MFG
Markus
Wie wärs wenn das Feld nicht leer ist sondern einen Startwert von 0 hat...
Hi
Das hab ich mir auch schon gedacht!
Aber es sieht halt nicht so gut aus wenn schon 0 drinnen steht u es wird vl übersehen od so...
Kann ich denn Startwert nicht irgendwie verbergen?
MFG
Markus
Wie wärs wenn das Feld nicht leer ist sondern einen Startwert von 0 hat...
Du kannst den Wert auf 0 setzen bevor du ihn in die Datenbank schreibst.
Wenn der Wert < 1 dann Wert = 0 und ab in die DB.
Du kannst den Wert auf 0 setzen bevor du ihn in die Datenbank schreibst.
Wenn der Wert < 1 dann Wert = 0 und ab in die DB.
Also so ca:
If Request.Form("Preis") <> " " Then
rs("Preis") = Request.Form("Preis")
End If
Müßte ja gehen oder?
Kann ja in der DB einen Standartwert "0" für das Feld Preis vergeben..
MFG
Markus
Hi Markus,
If Request.Form("Preis") <> " " Then
rs("Preis") = Request.Form("Preis")
End If
Schreibe dies und die anderen funktionen zur abfrage der eingegebenen formdaten in die auslagerungsdatei funktionen, wie ich dir per email geschrieben. Dann kannst du alle diese werte bei der datenüberprüfung der gesendeten daten korrigieren.
Gruß
Netghost
P.S. bitte keine emails mehr :-)
Hallo,
Schreibe dies und die anderen funktionen zur abfrage der eingegebenen formdaten in die auslagerungsdatei funktionen, wie ich dir per email geschrieben.
Schade, daß Du per Email geantwortet hast. Dadurch wird dieser Thread ohne Deinem Vorschlag ins Archiv wandern und für andere, die vor dem gleichen Problem stehen, um Deine, sicherlich wertvollen, Informationen gebracht.
Vielleicht solltest Du in einer ähnlichen Situation hier antworten, und nur den Hinweis auf das Forum mailen.
Grüße
Klaus
Hi
hier der angesprochene Vorschlag per Mail:
Zitat:
Hi Markus,
Also erster schritt funktionen in eine andre datei auslagern und dann
einbinden per
<!-- #include file = "functions.asp" -->
Das hat den vorteil, das du spaeter funktionen hinzufügen kannst oder ändern
kannst ohne alle asp seiten zu überarbeiten.
In die functions.asp schreibst du die funktionen rein zum beispiel:
function checkNum (ByVal frmField)
if isNumeric(frmField) then
checkNum = true
else
checkNum = false
end if
end function
Dann instanzierst du in der datei die deine formdaten empfängt ein neues
object dem du werte zuweisen kannst mittels:
' Kopiere die request.form daten in neues objekt
set frmObject = Server.CreateObject("Scripting.Dictionary")
for each frmField in request.form
frmObject.add frmField, request.form(frmField)
next
nun kannst du die jeweiligen formulardaten mit
frmObject.item("checkboxname") =
checkNum(frmObject.item("checkboxname")
überprüfen und auf den entsprechenden wert setzen.
Gruss
Netghost
Zitat ende
use Mosche;
Du kannst den Wert auf 0 setzen bevor du ihn in die Datenbank schreibst.
Wenn der Wert < 1 dann Wert = 0 und ab in die DB.
If Request.Form("Preis") <> " " Then
Hier solltest du nicht auf oder ähnliches überprüfen, sondern du willst einen String-Check durchführen, ob nur Ziffern (oder andere erlaubte Zeichen) im String sind -> dann kannst du den String als Zahl behandeln.
use Tschoe qw(Matti);
Hallo,
rs("Preis") = cint(0 & Request.Form("Preis"))
^^^^^^^^^
Auch wenn das Textfeld leer ist wird damit 0 praktisch hinzugezaehlt (steht im textfeld "1" wird so 01 draus, ist das textfeld leer, wird so "0" daraus). cint() macht sicher dass das ganze als integer behandelt wird und verwandelt es wieder in "1" oder "0" etc.
Gruss, Melanie
Hi cint geht glaub ich nicht:
Zitat:
Wandelt einen beliebigen numerischen Wert in Short-Integer-Format (ganze Zahlen von -32768 bis +32767) um. Der Definitionsbereich der Funktion umfaßt natürlich gerade den Short-Integer-Bereich. Andere Werte führen zu der Fehlermeldung "Integer Überlauf", wenn zuvor mit COMPILER "RCON" die Bereichsüberwachung eingeschaltet wurde.
gibt auch höhere Preisangagen..
lt... [url: http://www.berkhan.com/basic/manual_7/manual_d/data_d/chap5-2.htm]
MFg
Markus
Hallo,
rs("Preis") = cint(0 & Request.Form("Preis"))
^^^^^^^^^
Auch wenn das Textfeld leer ist wird damit 0 praktisch hinzugezaehlt (steht im textfeld "1" wird so 01 draus, ist das textfeld leer, wird so "0" daraus). cint() macht sicher dass das ganze als integer behandelt wird und verwandelt es wieder in "1" oder "0" etc.Gruss, Melanie
Hi gibt auch Cintl() für ganze Zahlen von -2147483648 bis +2147483647)
Was aber wenn ich eine Komma Zahl habe?
990,90 ??
MFG
Markus