VB6-Datenbank-Textfeld-Problem

Hi!

Ich habe folgendes Problem in einem VB6-Formular:

Im Formular sind 16 Textboxen, in die nur eine numerischer Wert eingegeben darf, da die Daten anschließend in einer Access-Datenbank gespeichert werden sollen. Allerdings meckert Visual Basic ja bekanntlich, wenn man einen String oder einfach „“ in ein numerisches Feld einer Datenbank speichern will.
Ich habe mir nun überlegt, einfach eine Überpüfung der Eingabe durchzuführen, sobald ein Textfeld den Focus verliert. Das ist aber bei 16 Textfeldern sehr umständlich.
Wie mache ich das am besten? Oder gibt es noch eine bessere Lösung?

Bitte schreibt relativ leichte Antworten, da ich noch ziemlich neu auf diesem Gebiet bin.

Vielen Dank für jede Hilfe,
Benjamin

Hallo,

bei solchen Sachen würde ich immer zwischenspeicher benutzen, d.h. 16 Laben, diese mit der DB verbinden, die textfelder nicht. Beim klicken auf OK werde ndann die werte überprüft und in die label eingetragen.

Ralph

Hi Benjamin !

Ich würde ein TextFeld Array machen. Das geht ganz einfach, indem du ein Textfeld erzeugst und dann 15 mal kopierst. Beim erstenmal Kopieren wirst du gefragt, ob du ein array machen willst.

Der Losfocus - Event gilt dann für alle felder. Als Parameter wird dir ein Index mitgeliefert, welcher die nummer des Feldes in dem Array anzeigt.

Ciao
Mario

Es gibt eine Eigenschaft „CausesValidation“ und ein Event „Validate“.

Wenn Du, wie die anderen schon vorschlugen, ein TextBox-Array erstellst und bei allen oder bei der letzten TextBox „CausesValidation“ auf True setzt, wird beim Verlassen selbigen/r das Event „Validate“ ge-raised.

In der Event-Prozedur „txtBox_Validate“ kannst Du dann alle TextBoxes mit IsNumeric(txtBox) auf numerische Werte überprüfen.

Bsp:

Private Sub txtBox_Validate(Index As Integer, Cancel As Boolean)
Dim oText As TextBox

For Each oText In txtBox
If IsNumeric(oText.Text) = False Then
Val (oText.Text)
End If
Next
End Sub

mfg, Stefan

Die Idee ist sehr gut, allerdings ist Dir mit den CausesValidation ein Fehler unterlaufen:
Causesvalidation = TRUE in einem Feld xy bedeutet, daß für das Vorgängerfeld der Validate Event geraised wird. Also Wenn feld a verlassen wird und feld xy den Focus erhält und in feld xy CausesValidation = True dann wird für feld a die Validate-Methode ausgeführt.
Klingt kompliziert ist aber gut so, denn bei einem EXIT Button wird man False einstellen, damit man die Maske auch verlassen kann, wenn man fehlerhafte Werte im/in den Vorgängerfelder(n) eingetragen hat.
Maria
PS: Übrigens Stefan: es wäre nett wenn Du mich nicht vorher anrufen würdest und dann meine Antworten postest (IsNumeric). :expressionless:
lg
Maria

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

-> erwischt :wink:

…und das mit IsNumeric() wußte ich, hab’s auch im CrewInfoScreen verwendet und ist mir momentan nicht eingefallen.

also bis morgen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]