Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Thomas_Klee am Oktober 27, 2019, 17:27:01

Titel: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am Oktober 27, 2019, 17:27:01
Hallo Gemeinde,

bin VBA Anfänger und habe ein Problem mit einem VBA-Code.

Ich möchte in einer Access-Datenbank gerne Fileverzeichnisse auslesen. Habe ich soweit auch schon mit ein paar zusammengeklaubten VBA Codes hinbekommen.

Jetzt habe ich das Problem, das mir das Verzeichnis in einem Tabellenfeld steht.
zum Beispiel:
c:\EPA\Mandant_393\scan\images\Test.pdf

Ich möchte jetzt dass er mir in eine andere Tabelle in die Felder 1,2,3,4,5,.....
1= C:
2= EPA
3= Mandant_393
4= scan
.....
schreibt.

Irgendwie bringt mir der VBA-Script aber einen Fehler mit der Variable "i" ?????

Dim dbs, rst, rst1
Dim werte() As String
Dim i() As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl_files")
Set rst1 = dbs.OpenRecordset("tbl_verzeichnis")
    If Not rst.EOF Then
        rst.MoveFirst
        Do Until rst.EOF
            werte = Split(rst("Datei").Value, "\", -1, 1)
            rst1.AddNew
            For i = LBound(werte()) To UBound(werte())
                rst1.Fields(x).Value = CStr(werte(x))
            Next
            rst1.Update
        rst.MoveNext
        Loop
    End If
    rst.Close
    rst1.Close
    Set dbs = Nothing
End Sub



Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: ebs17 am Oktober 27, 2019, 17:47:54
Wenn Du i als Laufvariable der Schleife verwenden willst, solltest Du nicht plötzlich auf x umspringen.

Mit Option Explicit würden Dir solche Dinge sehr schnell bewusst gemacht.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am Oktober 27, 2019, 17:54:42
Stimmt da war von i auf x gewechselt worden.

Aber trotzdem kommt die Fehlermeldung:
Typen unverträglich .... aber es ist doch ein String ... spricht Text
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Beaker s.a. am Oktober 27, 2019, 18:33:23
Hallo Thomas,
Deklariere doch erstmal deine Variablen richtig; - ein Variant für ein Objekt ist
eigentlich nicht so der Bringer
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rst1 As DAO.Recordset

Ein Array für eine Laufvariable auch nicht
Dim i As Integer
Des Weiteren halte ich auch die Umwandlung eines Strings in einen String nicht
für sinnvoll
rst1.Fields(i).Value = werte(i)
Ich persönlich würde auch die Recordsets nicht nur schliessen, sondern zusätzl.
terminieren
Set rst = Nothing
Set rst1 = Nothing


gruss ekkehard
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: ebs17 am Oktober 27, 2019, 18:34:13
ZitatAber trotzdem kommt die Fehlermeldung
Nicht trotzdem. Die Neutralisierung eines Fehlers ermöglicht, dass der nächste wirken kann.

Hinsichtlich Fehler würde ich mich an Deiner Stelle für die Zeile interessieren, die der Debugger kennzeichnet.
Dass Du andere über alles raten lassen willst, könnte man als Zumutung werten.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am Oktober 27, 2019, 18:46:55
Tschuldigung ... habe mich bisher immer mit Makros durchgehangelt und wenig VBA Ahnung.

Der Fehler springt direkt auf das "i" bei
For i =

Option Compare Database
Option Explicit

Sub trennen()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rst1 As DAO.Recordset
Dim werte() As String
Dim i() As Integer
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl_Files")
Set rst1 = dbs.OpenRecordset("tbl_verzeichnis")
    If Not rst.EOF Then
        rst.MoveFirst
        Do Until rst.EOF
            werte = Split(rst("Datei").Value, "\", -1, 1)
            rst1.AddNew
            For i = LBound(werte()) To UBound(werte())
                rst1.Fields(i).Value = werte(i)
                Next
            rst1.Update
        rst.MoveNext
        Loop
    End If
    rst.Close
    rst1.Close
    Set rst = Nothing
    Set rst1 = Nothing
    Set dbs = Nothing
End Sub

Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: ebs17 am Oktober 27, 2019, 19:33:13
ZitatDim i() As Integer
Mit den Klammern wird ein Integer-Array deklariert. Dieses ist dann als Laufvariable ungeeignet.
Da bräuchte man ein einfaches Integer oder besser gleich Long.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am Oktober 27, 2019, 21:58:51
Danke für eure Mithilfe für einen Anfänger .... mit der Wegname der () macht es jetzt was es machen soll. Super nett und schnell ;)
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am November 01, 2019, 14:53:26
Ich hätte nochmal eine Frage. Der Trenner hat ja so funktioniert, dass er mir die Werte in eine neue Tabelle schreibt.
Wäre es auch möglich in der gleichen Tabelle zu bleiben und dann zu sagen dass die Trennfunktion einfach das Feld [Pfad] in die Felder P01,P02,P03,P04 ..... im gleichen Datensatz schreibt. Also so ähnlich wie eine Aktualisierungsabfrage.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: MzKlMu am November 01, 2019, 15:56:39
Hallo,
Zitatin die Felder P01,P02,P03,P04 ..... im gleichen Datensatz schreibt.
das ist zwar möglich, aber für eine Datenbank der völlig falsche Weg. Das sind Aufzählungsfelder die in einer Datenbank zu vermeiden sind. Lasse es bei der extra Tabelle.

Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am November 01, 2019, 16:12:15
Ich wollte nachher halt gerne eine Kreuztabelleabfrage erstellen basieren auf der einen Tabelle, weil ich ja in der neuen Tabelle keinen Verknüpfer zu der Urtabelle habe  :(
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: MzKlMu am November 01, 2019, 16:14:48
Hallo,
Du musst noch ein Schlüsselfeld in die neue Tabelle übertragen, dann geht auch die Kreuztabelle. In die neue Tabelle so wie Du das jetzt hast, gehört ohne ein Fremdschlüsselfeld wenn es eine übergeordnete Tabelle gibt.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am November 01, 2019, 16:34:55
Dass Schlüsselfeld hätte in der Urtabelle den Feldname: [dateipfad] den den ich mit trennen ja aufteile. Wie muss ich das Skript anpassen, damit in der neuen Tabelle auch das Feld Dateipfad angelegt wird? Dann könnte ich es ja verknüpfen.
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: MzKlMu am November 01, 2019, 16:47:26
Hallo,
kannst Du der Urtabelle keinen Autowert als Primärschlüssel verpassen ?

Wozu brauchst Du diese Aufteileung überhaupt ?
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: Thomas_Klee am November 01, 2019, 17:13:42
Ich möchte nacher wenn das fileverzeichnis eingelesen und aufgesplittelt ist so eine Auswertung erzeugen.
Dann kann die Fachabteilung direkt sehen ob für alle Mandanten alles gut ist oder ob bei irgend einem Mandanten
etwas unklar oder zu tun ist.
Hintergrund:
Eine Verarbeitung erzeugt Dateien in ein Fileverzeichnis pro Mandant.
Daher auch der Aufbau:
T:\EPA\Mandant_XXX\Scan\... und dort vier Verzeichnisse done,error,images,index1
Titel: Re: Brauche hilfe mit Variable die Feld nach "\" in Tabellenfelder schiebe soll.
Beitrag von: MzKlMu am November 01, 2019, 19:18:19
Hallo,
Du hast doch jetzt alles was Du brauchst für die Kreuztabellenabfrage.
Der Mandant ist das gemeinsame Schlüsselfeld. Wobei die Ausgangstabelle ja gar nicht benötigt wird. Die Kreuztabellenabfrage kann direkt aus der neuen Tabelle erzeugt werden. Außerdem könnte der Mandant als "Verknüpfer" verwendet werden.
Eine Kreuztabellenabfrage wäre mit der von Dir angedachten Version (alles in einer Zeile) nicht möglich. Die Funktion "Anzahl" könnte nicht verwendet werden.

PS:
Bitte verwende für Codedarstellungen die Codetags des Forums und vermeide Leerzeilen im Code, sonst wird der Code ja länger als nötig und die Übersicht im Forum geht verloren. Ich habe die Codetags in Deinen Beiträgen eingebaut.