Supportnet / Forum / Datenbanken
Select mit unbekannten Text
Frage
Hallo Ihr Access-Götter :-))
Kann mir einer schreiben wie ich nachfolgendes Bewerkstelle:
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Gibt es gleichzeitig oder nachfolgen noch die Möglichkeit vorhanden Leerzeilen aus dem selektierten Text herauszuschneiden o. ä., da es jede Menge Leerzeilen zwischen dem Artikelnamen und der Artikelbeschreibung gibt.
Ich habe es schon so probiert:
1.) Textfeld [Sortiert] Steuerelemnteinhalt = Links([Beschreibung];1
2.) Abfrage Sortiert:Left([Beschreibung],1)
Leider erhalte ich immer Fehlermeldungen, obwohl dieses so bei der Access Hilfe beschrieben wird.
Antwort 1 von oliverV
Hallo,
Wenn ich es richtig verstanden habe, verwende in einer Abfrage:
Sortiert: [Artikelname] & " " & [Beschreibung] & " " & [Artikelbeschreibung]
Ich kann aber auch vollkommen daneben liegen, beschrieb mal ausführlicher was du machen willst (bzw. sollst).
Zu den Leerzeichen, evtl. hilft dir die Glätten-Nummer weiter.
Gruß
Oliver
Zitat:
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Wenn ich es richtig verstanden habe, verwende in einer Abfrage:
Sortiert: [Artikelname] & " " & [Beschreibung] & " " & [Artikelbeschreibung]
Ich kann aber auch vollkommen daneben liegen, beschrieb mal ausführlicher was du machen willst (bzw. sollst).
Zu den Leerzeichen, evtl. hilft dir die Glätten-Nummer weiter.
Gruß
Oliver
Antwort 2 von Ossiman
Hallo Oliver,
Text im Textfeld [Beschreibung]
z. B. „Artikelname: kleine Jeanshosen Artikelbeschreibung: Größe 46
Jetzt soll der Text zwischen Artikelname und Artikelbeschreibung
( kleine Jeanshosen )
in das Textfeld [Sortiert] ausgelesen/übergeben werden.
Text im Textfeld [Beschreibung]
z. B. „Artikelname: kleine Jeanshosen Artikelbeschreibung: Größe 46
Jetzt soll der Text zwischen Artikelname und Artikelbeschreibung
( kleine Jeanshosen )
in das Textfeld [Sortiert] ausgelesen/übergeben werden.
Antwort 3 von oliverV
Ja, wenn alle drei Felder gebundene Felder sind, dann so wie ich geschrieben habe: Erstelle ein neues Feld in einer Abfrage bzw. in der Datenherkunft deines Formulars.
Sortiert: [Artikelname] & " " & [Beschreibung] & " " & [Artikelbeschreibung]
Gruß
Oliver
Sortiert: [Artikelname] & " " & [Beschreibung] & " " & [Artikelbeschreibung]
Gruß
Oliver
Antwort 4 von Ossiman
Hallo Oliver.
Artikelname und Artikelbeschreibung sind keine Felder sondern Text!
anderes Beispiel:
Sehr geehrte Damen und Herren als Text [Beschreibung].
Der Text "Damen und"
zwischen "geehrte_"
und "_als"
soll ausgelesen werden.
Oder verstehe ich etwas falsch?
Artikelname und Artikelbeschreibung sind keine Felder sondern Text!
anderes Beispiel:
Sehr geehrte Damen und Herren als Text [Beschreibung].
Der Text "Damen und"
zwischen "geehrte_"
und "_als"
soll ausgelesen werden.
Oder verstehe ich etwas falsch?
Antwort 5 von Ossiman
Noch eine Frage?
Wieso erhalte ich diese Fehlermeldung:#Name?
bei =Glätten([Text0])
Wieso erhalte ich diese Fehlermeldung:#Name?
bei =Glätten([Text0])
Antwort 6 von oliverV
Andres formuliert aber dennoch nicht deutlicher.
Was heißt „...sind keine Felder sondern Text!“, wo steht der Text drin, doch wahrscheinlich in einem Feld.
Oder meinst du ungebundene Felder ?
Dann beziehe dich mit Formulare![Formularname]![Feldname] auf das gewünschte Feld (Text); dazu muss das Formular natürlich geöffnet sein, damit das Feld ausgelesen werden kann (z.B. mit einer Abfrage, oder der Datenherkunft eines Berichts).
Zum Thema Glätten kann ich dir nicht viel sagen, habe ich selbst noch nicht verwendet; #Name deutet aber auf eine fehlerhafte Feldbezeichnung hin ([Text0]).
Wo setzt du das Glätten ein, in einer Auswahlabfrage, einer Aktionsabfrage, oder in einem Formular bzw. Bericht ?
Gruß
Oliver
Was heißt „...sind keine Felder sondern Text!“, wo steht der Text drin, doch wahrscheinlich in einem Feld.
Oder meinst du ungebundene Felder ?
Dann beziehe dich mit Formulare![Formularname]![Feldname] auf das gewünschte Feld (Text); dazu muss das Formular natürlich geöffnet sein, damit das Feld ausgelesen werden kann (z.B. mit einer Abfrage, oder der Datenherkunft eines Berichts).
Zum Thema Glätten kann ich dir nicht viel sagen, habe ich selbst noch nicht verwendet; #Name deutet aber auf eine fehlerhafte Feldbezeichnung hin ([Text0]).
Wo setzt du das Glätten ein, in einer Auswahlabfrage, einer Aktionsabfrage, oder in einem Formular bzw. Bericht ?
Gruß
Oliver
Antwort 7 von sj
Hallo,
ist das evtl. eine Lösung, brauchst aber ein wenig Ahnung in VB und SQL, außerdem weis ich nicht ob ich die Frage Richtig verstanden habe.
EINGABE = "Artikelname: kleine Jeanshosen Artikelbeschreibung: Größe 46"
ZWISCHENSCHRITT = Right(EINGABE, Len(EINGABE) - Len("Artikelname:"))
I = InStr(1, ZWISCHENSCHRITT, "Artikelbeschreibung")
AUSGABE = Left(ZWISCHENSCHRITT, I - 1)
Um die Leerzeichen zu entfernen müstest du den String, wie folgt, in einer Schleife laufen lassen.
Stelle des Leerzeichens suchen
I = InStr(1, AUSGABE, " ")
Leerzeichen entfernen
AUSGABE = Left(AUSGABE, I - 1) & Right(AUSGABE, Len(AUSGABE) - I)
Gruß
SJ
ist das evtl. eine Lösung, brauchst aber ein wenig Ahnung in VB und SQL, außerdem weis ich nicht ob ich die Frage Richtig verstanden habe.
EINGABE = "Artikelname: kleine Jeanshosen Artikelbeschreibung: Größe 46"
ZWISCHENSCHRITT = Right(EINGABE, Len(EINGABE) - Len("Artikelname:"))
I = InStr(1, ZWISCHENSCHRITT, "Artikelbeschreibung")
AUSGABE = Left(ZWISCHENSCHRITT, I - 1)
Um die Leerzeichen zu entfernen müstest du den String, wie folgt, in einer Schleife laufen lassen.
Stelle des Leerzeichens suchen
I = InStr(1, AUSGABE, " ")
Leerzeichen entfernen
AUSGABE = Left(AUSGABE, I - 1) & Right(AUSGABE, Len(AUSGABE) - I)
Gruß
SJ
Antwort 8 von Ossiman
Hallo Oliver,
es handelt sich um ein ungebundenes Feld [Beschreibung] mit immer wechselnden Texten von denen ich bestimmte Textteile (z. B. immer die letzten 5 Buchstaben von Links oder die 10 Buchstaben nach dem Wort Hallo) auslesen möchte.
es handelt sich um ein ungebundenes Feld [Beschreibung] mit immer wechselnden Texten von denen ich bestimmte Textteile (z. B. immer die letzten 5 Buchstaben von Links oder die 10 Buchstaben nach dem Wort Hallo) auslesen möchte.
Antwort 9 von Ossiman
Hallo SJ,
leider bin ich bei Vb erst am Anfang des Lernprozesses. Wenn ich Deine Lösung unter [Ereignisprozedur] eingebe erhalte ich nur Fehlermeldungen. Leider müsste ich schon einen Anfänger-Sicheren Code haben.
leider bin ich bei Vb erst am Anfang des Lernprozesses. Wenn ich Deine Lösung unter [Ereignisprozedur] eingebe erhalte ich nur Fehlermeldungen. Leider müsste ich schon einen Anfänger-Sicheren Code haben.
Antwort 10 von oliverV
Hallo,
neue Woche, neues Glück – die Sonne scheint und somit erhellt sich das Thema etwas, wenn ich raus schaue ist es aber dennoch etwas dunstig.
Das war deine gestellte Frage, ich interpretierte es so, das du verschiedene Feldinhalte in einer Abfrage, einem Formular oder Bericht zusammenführen willst.
Bei gebundenen Felder wäre das meine Antwort1, bei ungebundenen Felder meine Antwort 6.
Ich muss zugeben, deine Ansätze mit Links() verwirrten mich etwas, aber erst durch SJ’s Antwort und deine Antwort 8, habe ich kapiert, das du Teilinhalte auslesen willst.
Weiterhin mutmaße ich: [Beschreibung] ist ein ungebundenes Formularfeld, den Teilinhalt des Feldes benötigst du in einer Abfrage bzw. Datenherkunft (evtl. eines Kombifeldes) in dem selben Formular oder sonst irgendwo.
Ich weis nicht ob es immer der Text zwischen dem Text „Artikelname“ und dem Text „Artikelbeschreibung“ ist, oder ob es um bestimmte Positionen innerhalb des Textes geht (Antw. 8).
Daher hier die benötigten „Werkzeuge“:
Links(Text; AnzZeichen)
Liefert von links beginnend soviel Zeichen wie in AnzZeichen angegeben wurde.
Beispiel: Links(„Artikelname“; 7) = „Artikel“
Rechts(Text; AnzZeichen)
Liefert von rechts beginnend soviel Zeichen wie in AnzZeichen angegeben wurde.
Beispiel: Links(„Artikelname“; 4) = „name“
Teil(Text; StartPos; AnzZeichen)
Liefert einen Teilinhalt, ab StartPos mit der Länge von AnzZeichen.
Beispiel: Links(„Artikelname“; 4; 3) = „kel“
InStr(Text; Zeichen)
Liefert die Position des Zeichens, von links beginnend.
Beispiel: InStr(„Artikel-Name“; "-") = 8
Länge(Text)
Liefert die Länge des Textes
Beispiel: Länge(„Artikel“) = 7
Das sind im Prinzip die Grundfunktionen die du aber beliebig kombinieren kannst.
Einige Beispiel:
Links(Text; InStr(Text; Zeichen)-1)
Liefert den Text bis zum Zeichen
Beispiel: Links(„Artikel-Name“; InStr(„Artikel-Name“; "-")-1) = Artikel
Rechts(Text ;Länge(Text)-InStr(Text; "-"))
Liefert den Text ab dem Zeichen
Rechts(„Artikel-Name“; Länge(„Artikel-Name“)-InStr(„Artikel-Name“; "-")) = Name
Verwendung der String-Funktionen
Text kannst du durch ein gebundenes Feld ersetzen [Feldname], oder durch einen Formularbezug zu einem ungebunden Formularfeld Formulare!Formularname!Feldname.
Bei einer Verwendung in einer Abfrage lautet des Syntax z.b.:
Länge des Beschreibungsfeldes: Länge([Beschreibung])
Verwendung in einer Abfrage:
Sortiert:Teil([Beschreibung];InStr([Beschreibung];"Artikelname")+12;(InStr([Beschreibung];"Artikelbeschreibung"))-(InStr([Beschreibung];"Artikelname")+12))
ggf. [Beschreibung] durch den Formularsbezug ersetzt.
Gruß
Oliver
neue Woche, neues Glück – die Sonne scheint und somit erhellt sich das Thema etwas, wenn ich raus schaue ist es aber dennoch etwas dunstig.
Zitat:
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Das war deine gestellte Frage, ich interpretierte es so, das du verschiedene Feldinhalte in einer Abfrage, einem Formular oder Bericht zusammenführen willst.
Bei gebundenen Felder wäre das meine Antwort1, bei ungebundenen Felder meine Antwort 6.
Ich muss zugeben, deine Ansätze mit Links() verwirrten mich etwas, aber erst durch SJ’s Antwort und deine Antwort 8, habe ich kapiert, das du Teilinhalte auslesen willst.
Weiterhin mutmaße ich: [Beschreibung] ist ein ungebundenes Formularfeld, den Teilinhalt des Feldes benötigst du in einer Abfrage bzw. Datenherkunft (evtl. eines Kombifeldes) in dem selben Formular oder sonst irgendwo.
Ich weis nicht ob es immer der Text zwischen dem Text „Artikelname“ und dem Text „Artikelbeschreibung“ ist, oder ob es um bestimmte Positionen innerhalb des Textes geht (Antw. 8).
Daher hier die benötigten „Werkzeuge“:
Links(Text; AnzZeichen)
Liefert von links beginnend soviel Zeichen wie in AnzZeichen angegeben wurde.
Beispiel: Links(„Artikelname“; 7) = „Artikel“
Rechts(Text; AnzZeichen)
Liefert von rechts beginnend soviel Zeichen wie in AnzZeichen angegeben wurde.
Beispiel: Links(„Artikelname“; 4) = „name“
Teil(Text; StartPos; AnzZeichen)
Liefert einen Teilinhalt, ab StartPos mit der Länge von AnzZeichen.
Beispiel: Links(„Artikelname“; 4; 3) = „kel“
InStr(Text; Zeichen)
Liefert die Position des Zeichens, von links beginnend.
Beispiel: InStr(„Artikel-Name“; "-") = 8
Länge(Text)
Liefert die Länge des Textes
Beispiel: Länge(„Artikel“) = 7
Das sind im Prinzip die Grundfunktionen die du aber beliebig kombinieren kannst.
Einige Beispiel:
Links(Text; InStr(Text; Zeichen)-1)
Liefert den Text bis zum Zeichen
Beispiel: Links(„Artikel-Name“; InStr(„Artikel-Name“; "-")-1) = Artikel
Rechts(Text ;Länge(Text)-InStr(Text; "-"))
Liefert den Text ab dem Zeichen
Rechts(„Artikel-Name“; Länge(„Artikel-Name“)-InStr(„Artikel-Name“; "-")) = Name
Verwendung der String-Funktionen
Text kannst du durch ein gebundenes Feld ersetzen [Feldname], oder durch einen Formularbezug zu einem ungebunden Formularfeld Formulare!Formularname!Feldname.
Bei einer Verwendung in einer Abfrage lautet des Syntax z.b.:
Länge des Beschreibungsfeldes: Länge([Beschreibung])
Zitat:
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Füge den Text zwischen Artikelname und Artikelbeschreibung von Textfeld"Beschreibung" in das Textfeld"Sortiert" ein.
Verwendung in einer Abfrage:
Sortiert:Teil([Beschreibung];InStr([Beschreibung];"Artikelname")+12;(InStr([Beschreibung];"Artikelbeschreibung"))-(InStr([Beschreibung];"Artikelname")+12))
ggf. [Beschreibung] durch den Formularsbezug ersetzt.
Gruß
Oliver
Antwort 11 von Ossiman
Hallo Oliver,
da ich am Wochende fertig werden wollte trat ich wie von Dir vermutet auf einem anderen Forum auf.
Ich hoffe Du verzeihst :-))
Modul: (Modulname „Test“)
Function HoleTeilZeichenkette(SuchenIn As String, _
Zeichenkette1 As String, _
Zeichenkette2 As String) As Variant
Dim lStart As Long
Dim lEnde As Long
Dim lPos As Long
Dim lLaenge As Long
lStart = InStr(SuchenIn, Zeichenkette1)
If lStart > 0 Then
lPos = lStart + Len(Zeichenkette1)
lEnde = InStr(SuchenIn, Zeichenkette2)
If lEnde > 0 Then
lLaenge = lEnde - lPos
HoleTeilZeichenkette = Trim$(Mid$(SuchenIn, lPos, lLaenge))
End If
End If
End Function
Aufruf:
Me!Artikel = HoleTeilZeichenkette(Me!Beschreibung, "artikel", "Artikelnummer")
da ich am Wochende fertig werden wollte trat ich wie von Dir vermutet auf einem anderen Forum auf.
Ich hoffe Du verzeihst :-))
Modul: (Modulname „Test“)
Function HoleTeilZeichenkette(SuchenIn As String, _
Zeichenkette1 As String, _
Zeichenkette2 As String) As Variant
Dim lStart As Long
Dim lEnde As Long
Dim lPos As Long
Dim lLaenge As Long
lStart = InStr(SuchenIn, Zeichenkette1)
If lStart > 0 Then
lPos = lStart + Len(Zeichenkette1)
lEnde = InStr(SuchenIn, Zeichenkette2)
If lEnde > 0 Then
lLaenge = lEnde - lPos
HoleTeilZeichenkette = Trim$(Mid$(SuchenIn, lPos, lLaenge))
End If
End If
End Function
Aufruf:
Me!Artikel = HoleTeilZeichenkette(Me!Beschreibung, "artikel", "Artikelnummer")

