Markus: Typenkonflik

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

  1. Wie wärs wenn das Feld nicht leer ist sondern einen Startwert von 0 hat...

    1. 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...

      1. 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.

        1. 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

          1. 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 :-)

            1. 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

              1. 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

          2. 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);

            --
              Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
  2. 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

    1. 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

      1. Hi gibt auch Cintl() für ganze Zahlen von -2147483648 bis +2147483647)

        Was aber wenn ich eine Komma Zahl habe?

        990,90 ??

        MFG
        Markus