PDA

Vollständige Version anzeigen : Spalte einer Tabelle nach eigener Formel füllen


Guybrush.Threepwood
15.02.2008, 15:51
Hallo,

ich hoffe, ich finde hier eine Lösung für mein Problem. Vielleicht ist es ja auch nicht so kompliziert und nur ein Anwenderproblem :D

Ich habe eine Tabelle, dort sind 8 Spalten.

Ich habe in einer Spalte einen Kennzahl, die ist immer 8 Stellen lang. Diese muss ich jetzt genauer analysieren (klingt komplizierter als es ist) und das Ergebnis in eine andere Spalte reinschreiben.

Eine gültige Nummer sieht z.B. so aus:

21040900

Diese muss in zweier Blöcke geteilt werden (21 | 04 | 09 | 00) und bei dem ersten vorkommen von "00" muss die Berechnung abgebrochen und die Anzahl der gültigen Ebenen angezeigt werden.

21 = 1. Ebene
04 = 2. Ebene
09 = 3. Ebene
00 = ...gilt nicht

Also gibt es nur drei Ebenen.

Das ganze habe ich auch schon als Funktion niedergeschrieben:


Public Function CalcLevel(ByVal Nr As String)

Dim I As Integer
Dim strVar As String
Dim intZaehler As Integer

intZaehler = 0

For I = 1 To Len(nr) Step 2
strVar = Mid(nr, I, 2)
If strVar = "00" Then Exit For
intZaehler = intZaehler + 1
Next I

CalcLevel = intZaehler

End Function


Nur wie verdrahte ich das Teil, damit diese funktion sich die Zahl aus einer Spalte nimmt und das Ergebnis in eine andere Spalte überträgt?

Ich hab da echt schon rumgefummelt, aber irgendwie verstehe ich das Prinzip noch nicht so ganz...

Vielleicht kann mir da jemand aufs Pferd helfen.

Danke & Gruß

GT


Aus dem Code-Archiv ins Access-Forum verschoben.

stadtwald
15.02.2008, 16:33
Hallo,

am einfachsten geht es mit einer Abfrage.

UPDATE "Tabellenname" SET "Zielfeld" = CalcLevel("Wert");

Du kannst das aber auch via VBA mittels DAO oder ADO lösen.


Function CalcLevel2()

Dim db As Database
Dim rs As Recordset
Dim strSQL As String

Set db = CurrentDb

strSQL = "Select * from TBL_TEST;"

Set rs = db.OpenRecordset(strSQL)

Do Until rs.EOF

rs.Edit
rs!anz = CalcLevel(rs!wert)
rs.Update

rs.MoveNext
Loop

End Function


Viele Grüße

Patrick

achtelpetit
15.02.2008, 23:03
Wenn das nicht nur eine einmalige Sache ist, wäre es eine gute Idee, jedem Zweier-Block gleich ein eigenes Feld zuzuordnen. Dann hast Du in Zukunft 'ne Menge Zirkus gespart.

Guybrush.Threepwood
16.02.2008, 13:22
Hallo,

Danke fürs verschieben und der Code - Formatierung, dachte ich hätte alles bedacht. Naja.

@stadtwald, ich werd es mal probieren, danke.

@achtelpetit, leider nicht möglich, ich bekomme die Daten so zugeschickt.

Guybrush.Threepwood
18.02.2008, 09:28
Der geht!

Update in einer Abfrage felst die Hütte...

Gruß GT