Datenausgabe in VB funktioniert nicht

  • VB6

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von alchimist.

    Datenausgabe in VB funktioniert nicht

    Ich habe mittels VB 6.0 eine kleine Datenbank erstellt, wobei die Daten nicht richtig ausgegeben werden. Dazu habe ich in VB ein Textfeld namens Text3 eingebaut, wo der User eine max. 4-stellige Hexzahl eingeben kann und anschließend soll er in einem Picture-Box namens Picture1 verknüpfte Daten zu dieser Hexzahl bekommen.
    Leider liest der untere eingefügte Quell-Code von mir die Hexzahl ab der 1.Stelle nicht mehr aus, so dass die Daten nicht richtig ausgegeben werden.
    gutes Beispiel dazu wären die Hexzahlen 7 und 7C.
    Hierbei bekommt man jedesmal die verknüpften Daten zu der Hexzahl 7 raus....

    Wer kann mir helfen ????


    Gruß&Danke im Voraus
    Durhan



    Private Sub Text3_KeyPress(KeyAscii As Integer)
    'Buchstaben zwischen a und z
    If KeyAscii > 96 And KeyAscii < 123 Then
    KeyAscii = KeyAscii - 32
    End If
    'umlaute (ö,a,ü)
    If KeyAscii = 246 Or KeyAscii = 228 Or KeyAscii = 252 Then
    KeyAscii = KeyAscii - 32
    End If

    Picture1.Cls

    AnsageK = " Das gesuchte Netzelement liegt in :"
    AnsageL = " SP_Name Knotentyp "
    AnsageM = " ENTER-TASTE drücken oder die Eingabe ist unvollständig bzw. falsch."
    Dim Text3


    B1 = " AN1P VE:N NA1 00-0-00-1 Aachen "
    B2 = " AN2P VE:N NA1 00-0-15-4 Aachen "
    B3 = " AN3P VE:N NA1 00-4-11-7 Aachen "
    B4 = " AN4P VE:N NA1 00-4-13-5 Aachen "
    B5 = " AI1MA STP IN0 4-060-1 Abu Dhabi "
    B6 = " LOP1 LOOP NA0 07-01-7-0 Alle MSC`n "
    B7 = " LOP2 LOOP NA0 07-01-7-1 Alle MSC`n "
    B8 = " LOP3 LOOP NA0 07-01-7-2 Alle MSC`n "
    B9 = " DF1AS STA NA1 00-0-00-7 Düsseldorf "

    If InStr(Text3, "1") Then AnsageM = B1
    If InStr(Text3, "7C") Then AnsageM = B2
    If InStr(Text3, "25F") Then AnsageM = B3
    If InStr(Text3, "26D") Then AnsageM = B4
    If InStr(Text3, "21E1") Then AnsageM = B5
    If InStr(Text3, "1C78") Then AnsageM = B6
    If InStr(Text3, "1C79") Then AnsageM = B7
    If InStr(Text3, "1C7A") Then AnsageM = B8
    If InStr(Text3, "7") Then AnsageM = B9


    Rem Text AusgabePicture1.Cls

    Picture1.Print ""
    Picture1.Print AnsageK
    Picture1.Print ""
    Picture1.Print AnsageL
    Picture1.Print ""
    Picture1.Print AnsageM


    End Sub
    Hallo Lutrikan,

    ist ja logisch, dass das nicht funzt:

    <pre>If InStr(Text3, "1") Then AnsageM = B1</pre>
    If InStr(Text3, "7C") Then AnsageM = B2 <pre>If InStr(Text3, "25F") Then AnsageM = B3
    If InStr(Text3, "26D") Then AnsageM = B4
    If InStr(Text3, "21E1") Then AnsageM = B5
    If InStr(Text3, "1C78") Then AnsageM = B6
    If InStr(Text3, "1C79") Then AnsageM = B7
    If InStr(Text3, "1C7A") Then AnsageM = B8
    </pre>If InStr(Text3, "7") Then AnsageM = B9


    Wenn "7C" vorkommt wird zuerst AnsageM mit B2 belegt, ...der Quelltext wird weiter durchlaufen ... da "7C" auch "7" beinhaltet wird AnsageM mit B9 überschrieben.

    Gruß Markus
    Hallo Markus,

    danke erstmal für deine promte Antwort.

    Dieser Teil war nur ein kleiner Auszug aus dem Quell-Code. Insgesamt sind es über 600 Zeilen von diesem hier:
    If InStr(Text3, "1") Then AnsageM = B1
    If InStr(Text3, "7C") Then AnsageM = B2
    If InStr(Text3, "25F") Then AnsageM = B3
    If InStr(Text3, "26D") Then AnsageM = B4
    If InStr(Text3, "21E1") Then AnsageM = B5
    If InStr(Text3, "1C78") Then AnsageM = B6
    If InStr(Text3, "1C79") Then AnsageM = B7
    If InStr(Text3, "1C7A") Then AnsageM = B8

    If InStr(Text3, "7") Then AnsageM = B9
    .
    .
    .
    .
    .............. .... .....................=B639


    Das Dumme ist, dass man die Hexzahlen nicht vernünftig sortieren kann...sonst hätte ich ja kein Problem.

    Aber da muß doch noch eine andere Möglichkeit sein, dieses übereilte Überschreiben von AnsageM zu blockieren bzw. zu verhindern.
    Ansatz wäre vielleicht, dass der Quelltext solange nicht weiterarbeitet bis der User die komplette Hexzahl im Text-Box Text3 eingegeben hat und zum Abschluß vielleicht auch die Enter-Taste drücken muß....und dann erst die "Suchfunktion" gestartet wird, wobei dann wirklich erst eine komplette Übereinstimmung vorhanden sein muß zwischen hinterlegter Hexzahl und eingegebener Hexzahl vom User.
    Oder auch über eine andere Lösung bin ich sehr dankbar.

    Kannst du mir hierbei helfen ?

    Gruß&Thanks
    Durhan
    Hallo Lutrikan,

    der Tipp von makrele32 hilft natürlich.

    Das Dumme ist, dass man die Hexzahlen nicht vernünftig sortieren kann

    Würde es dir denn einen Gewinn bringen, wenn diese Sortierung möglich wäre? Denn dann kannst du ja auch mit dem normalen Dezimalzahlen arbeiten. Was zwingt dich dazu die Hex-Strings zu verwenden?

    Denn 600 Zeilen von dem...klingt recht gruselig.

    Gruß Markus
    Hi Markus,

    ich habe deinen Vorschlag umgesetzt, leider kriege ich beim Kompilieren folgende Fehlermeldung: "Sub oder Function" nicht definiert"...und die erste Zeile "Private Sub Text3...." ist gelb markiert vom Quelltext.

    Wenn ich aber w1 v o r der letzten Zeile einbaue, dann kriege ich zwar keine Fehlermeldung, jedoch spuckt das Programm nach Eingabe der Hexzahl gar nichts mehr raus....


    Kannst du mir nochmal helfen...ich weiß, dass ich nix weiß ;-))


    Gruß
    Durhan&Danke


    Hier der abgeänderte Quelltext:

    Private Sub Text3_KeyPress(KeyAscii As Integer)
    'Buchstaben zwischen a und z
    If KeyAscii > 96 And KeyAscii < 123 Then
    KeyAscii = KeyAscii - 32
    End If
    'umlaute (ö,a,ü)
    If KeyAscii = 246 Or KeyAscii = 228 Or KeyAscii = 252 Then
    KeyAscii = KeyAscii - 32
    End If

    Picture1.Cls

    AnsageK = " Das gesuchte Netzelement liegt in :"
    AnsageL = " SP_Name Knotentyp "
    AnsageM = " ENTER-TASTE drücken oder die Eingabe ist unvollständig bzw. falsch."
    Dim Text3


    B1 = " AN1P VE:N NA1 00-0-00-1 Aachen "
    B2 = " AN2P VE:N NA1 00-0-15-4 Aachen "
    B3 = " AN3P VE:N NA1 00-4-11-7 Aachen "
    B4 = " AN4P VE:N NA1 00-4-13-5 Aachen "
    B5 = " AI1MA STP IN0 4-060-1 Abu Dhabi "
    B6 = " LOP1 LOOP NA0 07-01-7-0 Alle MSC`n "
    B7 = " LOP2 LOOP NA0 07-01-7-1 Alle MSC`n "
    B8 = " LOP3 LOOP NA0 07-01-7-2 Alle MSC`n "
    B9 = " DF1AS STA NA1 00-0-00-7 Düsseldorf "

    If InStr(Text3, "1") Then AnsageM = B1: Goto w1
    If InStr(Text3, "7C") Then AnsageM = B2: Goto w1
    If InStr(Text3, "25F") Then AnsageM = B3: Goto w1
    If InStr(Text3, "26D") Then AnsageM = B4: Goto w1
    If InStr(Text3, "21E1") Then AnsageM = B5: Goto w1
    If InStr(Text3, "1C78") Then AnsageM = B6: Goto w1
    If InStr(Text3, "1C79") Then AnsageM = B7: Goto w1
    If InStr(Text3, "1C7A") Then AnsageM = B8: Goto w1
    If InStr(Text3, "7") Then AnsageM = B9 : w1


    Rem Text AusgabePicture1.Cls

    Picture1.Print ""
    Picture1.Print AnsageK
    Picture1.Print ""
    Picture1.Print AnsageL
    Picture1.Print ""
    Picture1.Print AnsageM


    End Sub
    klar, so wie du das w1 da hingeschrieben hast, meint vb auch du willst die funktion 'w1' ausführen, und die gibt's nicht.

    w1 soll eine zeilesprungamrke darstellen, muss also immer am anfang einer zeile stehen:

    <pre>
    ...
    If InStr(Text3, "1C79") Then AnsageM = B7: Goto w1
    If InStr(Text3, "1C7A") Then AnsageM = B8: Goto w1
    If InStr(Text3, "7") Then AnsageM = B9
    w1:
    </pre>
    Hallo makrele32,

    das klappt aber so auch nicht...
    du kannst es ja mal ausprobieren. Man bekommt nach Eingabe einer max 4-Stelligen Hexzahl nur den Inhalt
    AnsageM (nämlich: " ENTER-TASTE drücken oder die Eingabe ist unvollständig bzw. falsch.") zurück nicht aber die B1, B2, etc.


    Gruß
    Durhan

    Hier nochnal der Quelltext:

    Private Sub Text3_KeyPress(KeyAscii As Integer)
    'Buchstaben zwischen a und z
    If KeyAscii > 96 And KeyAscii < 123 Then
    KeyAscii = KeyAscii - 32
    End If
    'umlaute (ö,a,ü)
    If KeyAscii = 246 Or KeyAscii = 228 Or KeyAscii = 252 Then
    KeyAscii = KeyAscii - 32
    End If

    Picture1.Cls

    AnsageK = " Das gesuchte Netzelement liegt in :"
    AnsageL = " SP_Name Knotentyp "
    AnsageM = " ENTER-TASTE drücken oder die Eingabe ist unvollständig bzw. falsch."
    Dim Text3


    B1 = " AN1P VE:N NA1 00-0-00-1 Aachen "
    B2 = " AN2P VE:N NA1 00-0-15-4 Aachen "
    B3 = " AN3P VE:N NA1 00-4-11-7 Aachen "
    B4 = " AN4P VE:N NA1 00-4-13-5 Aachen "
    B5 = " AI1MA STP IN0 4-060-1 Abu Dhabi "
    B6 = " LOP1 LOOP NA0 07-01-7-0 Alle MSC`n "
    B7 = " LOP2 LOOP NA0 07-01-7-1 Alle MSC`n "
    B8 = " LOP3 LOOP NA0 07-01-7-2 Alle MSC`n "
    B9 = " DF1AS STA NA1 00-0-00-7 Düsseldorf "

    If InStr(Text3, "1") Then AnsageM = B1: Goto w1
    If InStr(Text3, "7C") Then AnsageM = B2: Goto w1
    If InStr(Text3, "25F") Then AnsageM = B3: Goto w1
    If InStr(Text3, "26D") Then AnsageM = B4: Goto w1
    If InStr(Text3, "21E1") Then AnsageM = B5: Goto w1
    If InStr(Text3, "1C78") Then AnsageM = B6: Goto w1
    If InStr(Text3, "1C79") Then AnsageM = B7: Goto w1
    If InStr(Text3, "1C7A") Then AnsageM = B8: Goto w1
    If InStr(Text3, "7") Then AnsageM = B9
    w1:


    Rem Text AusgabePicture1.Cls

    Picture1.Print ""
    Picture1.Print AnsageK
    Picture1.Print ""
    Picture1.Print AnsageL
    Picture1.Print ""
    Picture1.Print AnsageM


    End Sub

    Hallo Lutrikan,

    so wie ich deinen Quelltext sehe, kann das alles nicht klappen, zumindest nicht so wie du dir das denkst.

    Es ist wichtig, dass du dir erste einmal Gedanken machst, was in jeder Zeile deines Quelltextes passiert.

    Wenn du etwas nicht verstehst, sage es doch einfach oder frage nach.

    Also folgendes Bsp.:
    Ich tippe in das Textfeld "1" ein, was passiert?
    In dieser Zeile fliege ich raus <font color="firebrick"> If InStr(Text3, "1") Then AnsageM = B1: GoTo w1 </font>
    Ich tippe nach der "1" "C78" ein, was passiert, ich erreiche diese Zeile gar nicht <font color="firebrick"> If InStr(Text3, "1C78") Then AnsageM = B6: GoTo w1 </font> da ich wieder in der obersten Zeile raus.

    Leider hast du immer noch nicht im Detail erklärt was du vor hast. Meine Frage bzgl. der Umwandlung in Dezimalzahlen hast du nicht beantwortet.

    Ach ja, verwende bitte die Text3_KeyUp-Prozedur.

    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „alchimist“ ()

    Hi makrele32,

    jetzt hat es funktioniert...!
    Aber nun habe ich wieder das anfängliche Problem wieder. Nämlich dass wenn man die Hexzahlen 7 und 7C eingibt als Beispiel, so erhält man in beiden Fällen die AnsageM=B9....d.h. die Text-Box wird nicht richtig ausgelesen ab der 1.Stelle der Hexzahl....!!!!

    ich bin mitlerweile am Verzweifeln hier...

    Gruß
    Durhan

    PS: was könnte man denn an Stelle von "Inst" nehmen (bitte mit Bsp.) ?
    Hi Markus,

    du hast ja Recht. Ich bin kein VB-Programmierer....
    Es gilt folgende Aufgabe zu lösen:

    ein User erhält einen Alarm von einem Netzelement. Dieser Alarm besitzt vom Netzelemnt nur die Hex-Kennung (max. 4Stellig). Nun soll aber der User mit meinem Quellcode anhand der ihm bekannten Hexzahl einige Detail-Infos zu diesem Netzelement erhalten. Diese verbergen sich im Quell-Code unter B1, B2,...B600..siehe unten

    Ich hoffe das reicht zur Erklärung...
    So aber ich bin wieder am Anfang mit meinem Problem, denn der Ansatz von makrele32 hat mir nicht weitergeholfen siehe vorherigen beitrag...


    Gruß
    Durhan
    Hallo Lutrikan,

    ich muss jetzt noch ca. 2 h lang was tun, und kann dir heute abend, sollte bis dahin keine Lösung existieren eine zusenden, das ist meiner Meinung nach echt nicht so schwer.

    Legst du Wert auf die PicturBox oder kann die Ausgabe auch anders erfolgen?

    Gruß Markus
    Hi Markus,

    leider bin ich an diese Picture-Box gebunden, da sie auch für andere Abfragen als Ausgabestelle fungiert.
    Es gibt insgesamt noch 2 weitere Abfragemöglichkeiten(namens Text1 und Text2), die die selbige Picture-Box als Ausgabefenster nutzen. Diese sind auch voll funktionstüchtig...Nun soll die auch die neue zusätzliche Abfrage über die Textbox (Text3) auch dort ausgegeben werden.Sonst kriege ich Platzprobleme...


    Gruß&Danke dir
    Durhan
    Hallo Durhan,

    das Ganze hat doch etwas länger gedauert, ich habe mir überlegt, dass es besser wäre die ganzen Daten einmal in ein Array zu füllen und dann dieses zu durchlaufen, das kann bestimmt noch optimiert werden, teste doch einmal aus, ob dieser Quelltext den gewünschten Erfolg hat:

    <pre>
    Dim arrMsg() As String

    Private Sub Form_Load()
    ReDim Preserve arrMsg(1 To 2, 1 To 9) As String

    'Array wird befüllt
    arrMsg(1, 1) = " AN1P VE:N NA1 00-0-00-1 Aachen "
    arrMsg(1, 2) = " AN2P VE:N NA1 00-0-15-4 Aachen "
    arrMsg(1, 3) = " AN3P VE:N NA1 00-4-11-7 Aachen "
    arrMsg(1, 4) = " AN4P VE:N NA1 00-4-13-5 Aachen "
    arrMsg(1, 5) = " AI1MA STP IN0 4-060-1 Abu Dhabi "
    arrMsg(1, 6) = " LOP1 LOOP NA0 07-01-7-0 Alle MSC`n "
    arrMsg(1, 7) = " LOP2 LOOP NA0 07-01-7-1 Alle MSC`n "
    arrMsg(1, 8) = " LOP3 LOOP NA0 07-01-7-2 Alle MSC`n "
    arrMsg(1, 9) = " DF1AS STA NA1 00-0-00-7 Düsseldorf "

    arrMsg(2, 1) = "1"
    arrMsg(2, 2) = "7C"
    arrMsg(2, 3) = "25F"
    arrMsg(2, 4) = "26D"
    arrMsg(2, 5) = "21E1"
    arrMsg(2, 6) = "1C78"
    arrMsg(2, 7) = "1C79"
    arrMsg(2, 8) = "1C7A"
    arrMsg(2, 9) = "7"
    End Sub

    Private Sub Text3_KeyPress(KeyAscii As Integer)
    'Eingabekontrolle
    'Buchstaben zwischen a und z
    If KeyAscii > 96 And KeyAscii < 123 Then
    KeyAscii = KeyAscii - 32
    End If
    'umlaute (ö,a,ü)
    If KeyAscii = 246 Or KeyAscii = 228 Or KeyAscii = 252 Then
    KeyAscii = KeyAscii - 32
    End If
    End Sub

    Private Function finder(strText As String) As Variant
    'Durchlaufen des Arrays
    Dim lngMax As Long, i As Long
    Dim arrRes() As String
    lngMax = UBound(arrMsg, 2)
    ReDim arrRes(1 To 1) As String
    For i = 1 To lngMax
    If arrMsg(2, i) = strText Then
    arrRes(UBound(arrRes)) = arrMsg(1, i)
    ReDim Preserve arrRes(1 To UBound(arrRes) + 1)
    End If
    Next i
    If UBound(arrRes) <> 1 Then ReDim Preserve arrRes(1 To UBound(arrRes) - 1)

    If UBound(arrRes) = 1 And arrRes(1) <> vbNullString Then
    finder = arrRes(1)
    Else
    finder = False
    End If
    End Function

    Private Sub Text3_KeyUp(KeyCode As Integer, Shift As Integer)
    'Ausgabeeinheit
    Dim varResult As Variant
    Dim strMsg As String
    Picture1.Cls

    strMsg = " Das gesuchte Netzelement liegt in :" & vbCrLf
    strMsg = strMsg & " SP_Name Knotentyp " & vbCrLf

    varResult = finder(Text3.Text)

    If Not VarType(varResult) = vbBoolean Then
    strMsg = strMsg & varResult
    Else
    strMsg = strMsg & " ENTER-TASTE drücken oder die Eingabe ist unvollständig bzw. falsch."
    End If

    Rem Text AusgabePicture1.Cls

    Picture1.Print "" & vbCrLf & strMsg

    End Sub</pre>

    EDIT:
    Sorry aber für die Icons kann ich nix ;)

    Gruß Markus

    //edit [makrele32]: hab die icons rausgemacht ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „makrele32“ ()

    Hi Markus,

    danke für deine Antwort.
    Habe deinen Quelltext eingefügt.
    Beim Kompilieren kommt für die Zeile:

    lngMax = UBound(arrMsg, 2)

    ein Laufzeitfehler mit der Aussage "Typen unverträglich".

    Kannst du hier für Abhilfe schaffen ?

    Gruß
    Durhan
    Hallo Durhan,

    das ist mir ein Rätsel, bei mir klappt das problemlos, hast du das denn nur beim Kompilieren oder auch wenn dass Programm mit F8 gestartet wird?

    Ich sende dir mal eine Testdatei auf deine Email-Adresse.

    Arbeitest du auch mit VB6 SP5 ?

    @ Marcus:
    Danke, ich habe das zwar mal gelesen und mich gefragt wozu das wohl gut sein mag....und jetzt wo ich es gebrauchen kann, habe ich nicht mehr dran gedacht. :)

    Gruß Markus
    Hi Markus,

    dein geschicktes Projet hat funktioniert !!!
    Ich habe nun deinen Quellcode als seperate Form in mein Projekt eingefügt und nun klappt es damit auch dort.

    SUPER !!!!!!!

    Danke,Danke,Danke,Danke,Danke,...

    Echt toll.

    Gruß&großes Lob
    Durhan