ich muss aus eine db2 datenbank eine tabelle abfragen
in eine spalte stehen N zahlen!!!
z.b. 841749873214523897612374623874681723469236487632896418397
und ich will sie bei mir so angezeigt haben:
z.b. 8417-4987-3214-5238-9761-2374-6238-7468-1723-4692-3648-7632-8964-1839
ich möchte immer nach vier zahlen ein bindestrich kommt!!
würde mich freuen wenn mir jemand helfen könnte
thx, dino
ich muss aus eine db2 datenbank eine tabelle abfragen
in eine spalte stehen N zahlen!!!
z.b. 841749873214523897612374623874681723469236487632896418397
und ich will sie bei mir so angezeigt haben:
z.b.
8417-4987-3214-5238-9761-2374-6238-7468-1723-4692-3648-7632-8964-1839
ich möchte immer nach vier zahlen ein bindestrich kommt!!
Hallo,
das ist gar nicht so schwierig. Ich habe gerade mal eine Funktion geschrieben, die das gewünschte erledigt. Der Aufruf ist: BlockWrite(Line,BlockLength,Separator), sie gibt einen String zurück, in dem alle BlockLength Stellen ein Separator eingefügt wird. Dabei ist zu beachten, dass als Line auch ein String erwartet wird, Du Deine Zahl vorher also evtl. konvertieren musst. Die Funktion lässt sich bestimmt auch noch optimieren, aber nach meinen (zugegebenermaßen oberflächlichen) Versuchen funktioniert sie.
Genug der Worte, sprechen wir Code:
Public Function BlockWrite(Line As String, BlockLength As Integer, Separator As String) As String
Dim dStr As String
dStr = ""
Dim i, r As Integer
For i = 0 To Len(Line) \ BlockLength - 1
If dStr = "" Then
dStr = Left(Line, BlockLength)
Else
dStr = dStr + Separator + Mid(Line, i \* BlockLength + 1, BlockLength)
End If
Next
r = Len(Line) Mod BlockLength
If r 0 Then
If r = Len(Line) Then
dStr = Line
Else
dStr = dStr + Separator + Right(Line, r)
End If
End If
BlockWrite = dStr
End Function
Marc
ich danke dir erstmal für deine hilfe
ABER, ich kenne mich leider nicht so gut in access aus!!
ich mache access abfragen über diesen sql entwurfsansicht!!
und leider bin ich da nicht weiter bewandert!!!
könntest du mir vielleicht noch einpaar tips geben wo ich das einbaue!
danke dir schon mal für deine mühe für das ersteteil
OK, im Datenbankfenster gehst Du zum Bereich „Module“. Dort erstellst Du ein neues Modul und kopierst den Code-Teil aus meinem ersten Posting in das Code-Fenster. Dieses schließen, die Frage, ob Du speichern möchtest beantwortest Du mit „Ja“ (der Name, unter dem gespeichert wird, ist egal).
Jetzt öffnest Du Deine Abfrage (bzw. erstellst eine neue) im Entwurfsmodus. Ich gehe einfach mal davon aus, dass das Feld, dessen Inhalt formatiert werden soll auch in der Abfrage enthalten ist (sagen wir mal mit dem Feldnamen „NUMMER“). Jetzt fügst Du der Abfrage ein neues Feld hinzu, dort schreibst Du einfach in die erste Zeile: Ausdr1: BlockWrite([NUMMER];4;"-").
Das war’s schon. Abfrage ausführen und staunen. 
Schönes (verlängertes) Wochenende
Marc
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
der gibt mir eine fehlermeldung
################################
Fehler beim kompilieren!!
erwartet: zeilennummer oder sprungmarke oder anweisung oder anweisungsende
OK HILFE
#################################
soll ich die ersten zwei zeilen dort stehen lassen die er selbst erzeugt oder mach muss mit denen machen!!
DANKKKKKKKKEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
es funktioniert!!
ich danke dir vielmals.
kann vielleicht morgen den tag etwas geniessen!!
jetzt noch etwas
was ist wenn ich z.b. aus
4124234876123983
folgendes haben möchte:
-1-4124-2-2348-3-7612-4-3983
und sollte es möglich sein, vielleicht die aufzählung irgendwie hervor heben!?!?!
thx im vorraus schon mal
es funktioniert!!
ich danke dir vielmals.
kann vielleicht morgen den tag etwas geniessen!!
Glückwunsch 
was ist wenn ich z.b. aus
4124234876123983
folgendes haben möchte:
-1-4124-2-2348-3-7612-4-3983
Dazu ersetzt Du einfach die Funktion in dem erstellten Modul durch folgende:
Public Function BlockWrite(Line As String, BlockLength As Integer, Separator As String, Optional Count As Boolean = False) As String
Dim dStr As String
dStr = ""
Dim i, r, Counter As Integer
Counter = 1
For i = 0 To Len(Line) \ BlockLength - 1
If dStr = "" Then
If Count Then
dStr = Separator + "1" + Separator + Left(Line, BlockLength)
Else
dStr = Left(Line, BlockLength)
End If
Else
If Count Then
dStr = dStr + Separator + CStr(Counter) + Separator + Mid(Line, i \* BlockLength + 1, BlockLength)
Else
dStr = dStr + Separator + Mid(Line, i \* BlockLength + 1, BlockLength)
End If
End If
Counter = Counter + 1
Next
r = Len(Line) Mod BlockLength
If r 0 Then
If r = Len(Line) Then
If Count Then
dStr = Separator + "1" + Separator + Line
Else
dStr = Line
End If
Else
If Count Then
dStr = dStr + Separator + CStr(Counter) + Separator + Right(Line, r)
Else
dStr = dStr + Separator + Right(Line, r)
End If
End If
End If
BlockWrite = dStr
End Function
Diese Funktion hat einen weiteren optionalen Parameter. Das heißt, dass dieser Parameter nicht unbedingt angegeben werden muss, dann verhält sich die Funktion wie vorher auch. Willst Du jetzt aber die Aufzählung einschalten brauchst Du einfach nur „Wahr“ (ohne „“) als zusätzlichen Parameter in Deine Abfragedefinition einfügen, also etwa sowas: x: BlockWrite([Nummer];4;"-";Wahr).
und sollte es möglich sein, vielleicht die aufzählung
irgendwie hervor heben!?!?!
Das geht so ohne Weiteres in Deiner Abfrage nicht.
Gruß
Marc
1 „Gefällt mir“