Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Probleme bei Stringzerteilung mit If Befehl

Begonnen von ChickenWing, September 21, 2016, 17:05:14

⏪ vorheriges - nächstes ⏩

ChickenWing

Servus!  ...mal wieder.

Meine Reise durch die bunte Welt des Access geht weiter.  :D

Hab mir, mit großer Inspiration durch Lachtaube und noch etwas Google, einen Code gebastelt der mir einen
String zerteilt, den ich selbst verstehe. *Wuhu* Kommt momentan noch nicht oft vor  ;D

Das ganze sieht so aus:

Public Function Stringextrakt(zusatzinfo_folge As String)
Dim Suchhilfe As Integer
Suchhilfe = InStr (zusatzinfo_folge, "=")
zusatzinfo_folge = Mid (zusatzinfo_folge, Suchhilfe+1)
Suchhilfe = InStr (Zusatzinfo, "^")
Stringextrakt = Left(zusatzinfo_folge, Suchhilfe -1)
End Function


So ein String sieht ca. so aus:

KD-NR-NR=12345^KONTO-NR=6789^PRIMANOTA=24^Buchung=123^
Grün ist das Ziel  :D

Das klappt soweit auch wunderbar. Aber in meinem Spalte zusatzinfo_folge gibt es leere Felder. Dadurch kommen Fehlermeldungen also "#Fehler" in den entsprechenden Zellen. Also habe ich probiert das ganze so zu lösen

Public Function Stringextrakt(zusatzinfo_folge As String)
Dim Suchhilfe As Integer
if IsNull(zusatzinfo_folge) Then Stringextrakt = 0 Else
Suchhilfe = InStr (zusatzinfo_folge, "=")
zusatzinfo_folge = Mid (zusatzinfo_folge, Suchhilfe+1)
Suchhilfe = InStr (Zusatzinfo, "^")
Stringextrakt = Left(zusatzinfo_folge, Suchhilfe -1)
End Function


Das funktioniert aber nicht, ich habe weiterhin #Fehler wo mein zusatzinfo_folge leer ist und bei allen anderen zeigt er mir das entsprechende Extrakt aus dem String an(alles Zahlen, keine Buchstaben).

Daran hängt dann noch das Problem das ich das ganze mit Clng am Ende brauche um es mit einer anderen Long Integer eine Beziehung zu erstellen und einen Datentypenkonflikt vermeiden will. Wobei ich mir noch nicht sicher bin ob das nicht einfach funktioniert sobald die Fehlermeldung in den Zellen weg ist. Das bleibt abzuwarten  :D

So sieht das SQL für die Abfrage aus
SELECT Abfrage1.zusatzinfo_folge, Stringextrakt([zusatzinfo_folge]) As Kd_Lf_Nr
FROM Abfrage 1

So dann noch mit der Ergänzung als Integer
SELECT Abfrage1.zusatzinfo_folge, Clng(Stringextrakt([zusatzinfo_folge])) As Kd_Lf_Nr
FROM Abfrage 1


Hat jemand eine Idee? Bin etwas hilflos. Kniffel schon den ganzen Nachmittag dran aber langsam kommt der Zeitpunkt an dem ich die weiße Flagge hisse... :-\

Achja, Access 2016

Schonmal Danke :)

Liebe Grüße
Max
----------------------
Mit freundlichen Grüßen

Max

el_gomero

#1
Hallo,

hab das nur mal überflogen und mir ist aufgefallen, dass ein End If fehlte


Public Function Stringextrakt(zusatzinfo_folge As String)
Dim Suchhilfe As Integer

    If IsNull(zusatzinfo_folge) Then
        Stringextrakt = 0
    Else
        Suchhilfe = InStr(zusatzinfo_folge, "=")
        zusatzinfo_folge = Mid(zusatzinfo_folge, Suchhilfe + 1)
        Suchhilfe = InStr(zusatzinfo_folge, "^")
        Stringextrakt = Left(zusatzinfo_folge, Suchhilfe - 1)
    End If
   
End Function


verbessert nach Test - da waren noch Tippfehler und falsch deklarierte Variablen drin.

Bei mir gibt dein Teststring KD-NR-NR=12345^KONTO-NR=6789^PRIMANOTA=24^Buchung=123^ mit dieser Funktion 12345 zurück.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

ChickenWing

Schonmal danke an Jürgen :)

Ich hab die Sache jetzt mal so übernommen. Es funktioniert auch weiterhin, dass er mir die Nummern raussucht, aber
bei den leeren Feldern kommt weiterhin #Fehler. Hast du noch eine Idee warum das so sein könnte? Oder liegt das an der Zeile mit der ich den Code abfrage...? Bin mir schwer unsicher.

Gruß Max  :)
----------------------
Mit freundlichen Grüßen

Max

DF6GL

Hallo,


IsNull auf String angewendet ist falsch und kann nur bei einen Variant-Datentyp benutzt werden:


Public Function Stringextrakt(zusatzinfo_folge As Variant)

Dim Suchhilfe As Integer

    If IsNull(zusatzinfo_folge) Then
        Stringextrakt = 0
    Else
        Suchhilfe = InStr(zusatzinfo_folge, "=")
        zusatzinfo_folge = Mid(zusatzinfo_folge, Suchhilfe + 1)
        Suchhilfe = InStr(zusatzinfo_folge, "^")
        Stringextrakt = Left(zusatzinfo_folge, Suchhilfe - 1)
    End If
   
End Function


MzKlMu

Hallo,
ein String kann nicht NULL sein. Auch der Rückgabewert ist ja ein String, daher muss im Falle von NULL als VARIANT deklariert werden. Versuche es daher mal so:
Public Function Stringextrakt(zusatzinfo_folge As Variant) As Variant
Dim Suchhilfe As Integer
    If IsNull(zusatzinfo_folge) Then
        Stringextrakt = NULL
    Else
        Suchhilfe = InStr(zusatzinfo_folge, "=")
        zusatzinfo_folge = Mid(zusatzinfo_folge, Suchhilfe + 1)
        Suchhilfe = InStr(zusatzinfo_folge, "^")
        Stringextrakt = Left(zusatzinfo_folge, Suchhilfe - 1)
    End If
End Function
Gruß Klaus


MzKlMu

ZitatÄtsch, schneller
ich habe ja auch mehr geschrieben.  ;D 8)
Gruß Klaus

ChickenWing

Wuhu es lebt!! Äh... Funktioniert mein ich  ;D Danke =)

Das Rennen für euch zwei geht weiter wenn ihr wollt  ;D

Wie dreh ich den Kram jetzt noch, dass ein Long Int rauskommt?

Wenn ich bei meiner Abfrage qryVBAString
CLng(Stringextrakt(zusatzinfo_folge)) AS Kd_Lf_Nr
eingebe kann ich keine Beziehung zu meiner Anschriftentabelle(Inx_anschrift) herstellen. Bzw. ich bekomme einen "Datentypenkonflikt im Ausdruck" raus.
(Siehe Bild1)

Mache ich aus qryVBAString eine Tabellenerstellungsabfrage und stelle eine Beziehung zwischen der erstellten Tabelle und meiner inx_anschrift her funktioniert es ohne zu murren. Aber über eine extra erstellte Tabelle zu gehen wäre ja ein bisschen zu viel des Guten.

Ich hoffe man versteht halbwegs was ich meine...?   ::)
Also vielleicht nochmal in einem Satz: Ich muss den Datentyp des Outputs des VBA Moduls am besten schon im VBA Modul zu einer Integer bekommen.
Glaube ich...

Liebe Grüße
Max
----------------------
Mit freundlichen Grüßen

Max

MzKlMu

Hallo,
beide Seiten der Beziehung müssen dann LongInteger sein. Du musst also jede Seite mit CLng wandeln.
Gruß Klaus

ChickenWing

Immer wieder erstaunlich wie fix ihr mit Antworten in dem Forum seid. Genial  :)

Das ist der Fall. Bei meiner Inx_anschrift ist der Felddatentyp Zahl und die Feldgröße Long Integer(Bild inx_anschrift). Und bei meiner der Abfrage qryVBAString ist ja die Wandlung
CLng(Stringextrakt(zusatzinfo_folge)) AS Kd_Lf_Nr
Also sollte es doch eigentlich passen?


Evtl. noch wichtig. Die inx_anschrift ist eine verknüpfte Tabelle. Ich habe von hier aus nur Lesezugriff.

Gruß Max
----------------------
Mit freundlichen Grüßen

Max

MaggieMay

Hi,
ZitatDu musst also jede Seite mit CLng wandeln.
so wie ich das sehe, muss hier nichts "gewandelt" werden, deklariere doch einfach den Rückgabewert der Funktion als Long:
Public Function Stringextrakt(zusatzinfo_folge As Variant) As Long
das Datenfeld ist ja eh schon entsprechend definiert.

BTW:
Zitatdas ich das ganze mit Clng am Ende brauche um es mit einer anderen Long Integer eine Beziehung zu erstellen
Zeige doch bitte den SQL-Code dazu.
Freundliche Grüße
MaggieMay

ChickenWing

Hi,

ich wusste nicht, dass ich den Rückgabewert so definieren kann. Das löst mein Problem!! :)
Zitat von: MaggieMay am September 24, 2016, 02:51:12
Hi,
ZitatDu musst also jede Seite mit CLng wandeln.
so wie ich das sehe, muss hier nichts "gewandelt" werden, deklariere doch einfach den Rückgabewert der Funktion als Long:
Public Function Stringextrakt(zusatzinfo_folge As Variant) As Long
das Datenfeld ist ja eh schon entsprechend definiert.

Klappt jetzt alles wunderbar =) Danke an alle Helfer!!!

Gruß
Max
----------------------
Mit freundlichen Grüßen

Max