Tabelle füllen mit externer Datei

Hallo Rainer,

fast fertig…? Ich sehe im Moment noch kein Land :smile:

Hier ist der Code:
SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name], [Sds-task].[CDS-ID], [Sds-task].Datum
FROM [Sds-task]
WHERE ((([Sds-task].[SDS-Typ]) Like „allusers“));

Werde mir Zuhause nochmal den Code von Dir reinziehen, vielleicht hilft es ja.

Danke nochmal für die tolle Unterstützung!
Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

fast fertig…? Ich sehe im Moment noch kein Land :smile:

ich schon :smile:

Hier ist der Code:
SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name],
[Sds-task].[CDS-ID], [Sds-task].Datum
FROM [Sds-task]
WHERE ((([Sds-task].[SDS-Typ]) Like „allusers“));

Verrätst Du mir jetzt noch, welches Feld den Pfad enthält?
Typ vermutlich nicht, Datum ganz sicher nicht, ID? Name? Irgendwo müssen ja Dateinamen auftauchen. Du kannst das sehen, ich nicht.

Noch eine Frage zu dem String, wieso eigentlich LIKE?
Wenn in dem Feld immer genau ‚allusers‘ stehen muss, dann hätte ich ‚=‘ geschrieben … egal, macht das Selbe, denke ich. :smile:

Werde mir Zuhause nochmal den Code von Dir reinziehen,
vielleicht hilft es ja.

Warte einfach, bis es fertig ist und dann reden wir noch einmal über den Debugger, den scheinst Du zu ignorieren, dabei erklärt der so viel. :smile:

Gruß Rainer

Hallo Gerd,

fast fertig…? Ich sehe im Moment noch kein Land :smile:

Guten Morgen, Rainer!

Das Feld ist SDS-Name, dort ist der Dateiname enthalten.

Du hast Recht, man kann „Like“, „Wie“ oder „=“ benutzen, das Ergebnis ist immer gleich :smile:

Danke & Gruss Gerd

ich schon :smile:

Hier ist der Code:
SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name],
[Sds-task].[CDS-ID], [Sds-task].Datum
FROM [Sds-task]
WHERE ((([Sds-task].[SDS-Typ]) Like „allusers“));

Verrätst Du mir jetzt noch, welches Feld den Pfad enthält?
Typ vermutlich nicht, Datum ganz sicher nicht, ID? Name?
Irgendwo müssen ja Dateinamen auftauchen. Du kannst das sehen,
ich nicht.

Noch eine Frage zu dem String, wieso eigentlich LIKE?
Wenn in dem Feld immer genau ‚allusers‘ stehen muss, dann
hätte ich ‚=‘ geschrieben … egal, macht das Selbe, denke
ich. :smile:

Werde mir Zuhause nochmal den Code von Dir reinziehen,
vielleicht hilft es ja.

Warte einfach, bis es fertig ist und dann reden wir noch
einmal über den Debugger, den scheinst Du zu ignorieren, dabei
erklärt der so viel. :smile:

Gruß Rainer

Hallo Gerd,

Das Feld ist SDS-Name, dort ist der Dateiname enthalten.

OK, ich bau’s nachher ein, im Moment ist die Zeit knapp.

Du hast Recht, man kann „Like“, „Wie“ oder „=“ benutzen, das
Ergebnis ist immer gleich :smile:

LIKE ist eigentlich für etwas anderes da. Das ist dann nur beim Lesen etwas irreführend, aber wichtig ist ja, daß es funktioniert. :smile:

Gruß Rainer

Hallo Rainer,

take your time, bin doch froh dass du mir hilfst!

Gruss
Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Teil 1 sollte jetzt so weit sein, daß Du die Pfade angezeigt bekommst.

Bevor wir wieder den zweiten Schritt vor dem ersten machen, hätte ich gern eine Bestätigung, daß Dir da 46 Pfade auf deine Userform geprintet werden.

Gruß Rainer

Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection
Dim Feld() As String
Dim Pfd(45) As String

Private Sub Befehl0\_Click()
 Dim i As Integer
 OpenDB
 strSQL = "SELECT [Sds-task].\* FROM [Sds-task]"

 OpenRS strSQL

 Transfer "c:\server1\sds-task.lst"
 Transfer "c:\server2\sds-task.lst"
 Transfer "c:\server3\sds-task.lst"
 Transfer "c:\server4\sds-task.lst"

 objRS.Close

 strSQL = "SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name], [Sds-task].[CDS-ID], [Sds-task].Datum From [Sds-task] WHERE ((([Sds-task].[SDS-Typ]) Like 'allusers'));"

 OpenRS strSQL

 objRS.MoveFirst
 While objRS.EOF = False
 Pfd(i) = objRS("SDS-Name")
 Me.Print Fld(i)
 i = i + 1
 Wend
 objConnection.Close
End Sub

Private Sub Transfer(ByVal Datei As String)
 Dim ff As Integer, Zl As String
 Dim Fld() As String, i As Integer

 ff = FreeFile
 Open Datei For Input As #ff
 While Not EOF(ff)
 Line Input #ff, Zl
 Fld = Split(Zl, " ")
 objRS.AddNew
 For i = 0 To 3
 objRS(i) = Replace(Fld(i), """", "")
 Next
 objRS.Update
 Wend
 Close #ff
End Sub

Private Sub OpenDB()
 Dim strSQL As String
 Dim DB As String
 DB = "c:\SDS.mdb"
 Set objConnection = New ADODB.Connection

 With objConnection
 .CursorLocation = adUseClient
 .Mode = adModeShareDenyNone
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = DB
 .Open
 End With
End Sub

Private Sub OpenRS(ByVal strSQL As String)
 Set objRS = New ADODB.Recordset
 With objRS
 Set .ActiveConnection = objConnection
 .CursorLocation = adUseClient
 .CursorType = adOpenStatic
 .LockType = adLockOptimistic
 .Source = strSQL
 Call .Open
 End With
End Sub

Hallo Rainer,

Erstmal DANKE!

Es kommt eine Fehlermeldung bei der Funktion OpenRS Zeile:
Set .ActiveConnection = objConnection mit der Meldung Laufzeitfehler 424, Objekt erforderlich.

Gruss Gerd

Hallo,

Teil 1 sollte jetzt so weit sein, daß Du die Pfade angezeigt
bekommst.

Bevor wir wieder den zweiten Schritt vor dem ersten machen,
hätte ich gern eine Bestätigung, daß Dir da 46 Pfade auf deine
Userform geprintet werden.

Gruß Rainer

Private Sub Befehl0_Click()
Dim i As Integer

Dim objRS As ADODB.Recordset
:smiley:im objConnection As ADODB.Connection
:smiley:im Feld() As String
:smiley:im Pfd(45) As String

OpenDB
strSQL = „SELECT [Sds-task].* FROM [Sds-task]“

OpenRS strSQL

Transfer „c:\server1\sds-task.lst“
Transfer „c:\server2\sds-task.lst“
Transfer „c:\server3\sds-task.lst“
Transfer „c:\server4\sds-task.lst“

objRS.Close

strSQL = „SELECT DISTINCT [Sds-task].[SDS-Typ],
[Sds-task].[SDS-Name], [Sds-task].[CDS-ID], [Sds-task].Datum
From [Sds-task] WHERE ((([Sds-task].[SDS-Typ]) Like
‚allusers‘));“

OpenRS strSQL

objRS.MoveFirst
While objRS.EOF = False
Pfd(i) = objRS(„SDS-Name“)
Me.Print Feld(i)
i = i + 1
Wend
objConnection.Close
End Sub

Private Sub Transfer(ByVal Datei As String)
Dim ff As Integer, Zl As String
Dim Fld() As String, i As Integer

ff = FreeFile
Open Datei For Input As #ff
While Not EOF(ff)
Line Input #ff, Zl
Fld = Split(Zl, " „)
objRS.AddNew
For i = 0 To 3
objRS(i) = Replace(Fld(i), „““", „“)
Next
objRS.Update
Wend
Close #ff
End Sub

Private Sub OpenDB()
Dim strSQL As String
Dim DB As String
DB = „c:\SDS.mdb“
Set objConnection = New ADODB.Connection

With objConnection
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
.Provider = „Microsoft.Jet.OLEDB.4.0“
.ConnectionString = DB
.Open
End With
End Sub

Private Sub OpenRS(ByVal strSQL As String)
Set objRS = New ADODB.Recordset
With objRS
Set .ActiveConnection = objConnection
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Source = strSQL
Call .Open
End With
End Sub

Rainer,

habe Dim objRS As ADODB.Recordset ’ neu eingesetzt
Dim objConnection As ADODB.Connection ’ neu eingesetzt

und nun läuft es bis call.open durch mit der Meldung:
„The connection can not be used to perform this connection“

Sagt Dir diese Meldung etwas???

Gruss
Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

Private Sub Befehl0\_Click()
 Dim i As Integer
 Dim objRS As ADODB.Recordset

das sieht so aus, als hättest Du den Code geändert.

Bei mir steht am Anfang:

Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection
Dim Feld() As String
Dim Pfd(45) As String

Private Sub Befehl0\_Click()
...

Daß die Deklarationen für die Verbindung, das Recordset und die beiden Arrays noch vor der ersten Prozedur stehen war kein Versehen, das ist erforderlich.

Du hast die Deklarationen in die Prozedur eingefügt, damit sind sie nur noch für diese eine Prozedur gültig, wir brauchen sie aber für das gesamte Projekt.

Deshalb fehlt in der Prozedur OpenDB das DB-Objekt und das hat den Fehler ausgelöst.

Gruß Rainer

Hallo Gerd,

habe Dim objRS As ADODB.Recordset ’ neu eingesetzt
Dim objConnection As ADODB.Connection ’ neu eingesetzt

vermutlich an der falschen Stelle, nämlich in der Prozedur, stimmt’s?

Dadurch ist das Recordset nur in dieser Prozedur verfügbar.
Nun willst Du in einer anderen Prozedur dieses recordset lesen, es ist aber nicht da.

Diese Deklarationen dürfen in keiner Prozedur stehen, sondern darüber im Bereich ‚Allgemein‘ und nur da, sonst geht das nicht.

Gruß Rainer

Hallo Rainer!

Schade, ich dachte ich hätte mal etwas richtig gemacht :frowning: Sorry!

Ja hast Recht, dann funktioniert es…aber dann kommt bei:
Me.Print Feld(i) die Fehlermeldung: „Index außerhalb gültigen Bereichs“

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Gerd,

Schade, ich dachte ich hätte mal etwas richtig gemacht.

*gg* Das ist doch gut, nun weißt Du, warum manche deklarationen in der Prozedur stehen, andere nicht. :smile:

Ja hast Recht, dann funktioniert es…aber dann kommt bei:
Me.Print Feld(i) die Fehlermeldung: „Index außerhalb gültigen
Bereichs“

Da habe ich Unfug getippt, da wollte ich schreiben …

Me.Print Pfd(i)

… sorry, so etwas passiert mir immer wenn ich nicht selbst testen kann. :frowning:

Gruß Rainer

Hallo Rainer,

kein Thema, das verstehe ich nur zu gut…
Aber der Fehler ist immer noch, nur die Meldung lautet jetzt:
„Objekt unterstützt diese Eigenschaft oder Methode nicht“.

Mir sagt das leider gar nichts…

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

kein Thema, das verstehe ich nur zu gut…
Aber der Fehler ist immer noch, nur die Meldung lautet jetzt:
„Objekt unterstützt diese Eigenschaft oder Methode nicht“.

Mir sagt das leider gar nichts…

das heißt, daß Du auf ein Objekt etwas anwenden möchtest, das dieses Objekt nicht kann.

In dem Fall will ich auf das Objekt die Anweisung Print anwenden, was offensichtlich nicht geht. Das kann ich mir nur erklären, wenn Me keine Form ist, oder wenn es in Access nicht möglich ist, auf eine Userform zu printen. Scheinbar haben wir etwas gefunden, wo sich AccessVBA von VB6 unterscheidet. :smile:

Eine Userform musst Du haben, sonst hättet Du ja keinen Button, den Du klicken kannst.

Kannst Du mal bitte für diesen und weitere Tests ein Listensteuerelement auf die Userform legen und mir dessen namen mitteilen? Dann ändere ich diese eine Zeile mal.

Gruß Rainer

Hallo Rainer,

wenn du es nicht weiß, dann komme ich da im Leben auch nicht drauf :smile:

Habe ein Listenfeld erstellt mit dem Namen Liste6

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

Habe ein Listenfeld erstellt mit dem Namen Liste6

dann ersetze mal die Zeile:

Me.Print Pfd(i)

durch

Liste6.AddItem Pfd(i)

Das muss dann laufen und in der Liste sollen danach deine Pfade stehen.

Wenn Du wieder einen Fehler bekommst ‚Index außerhalb …‘ dann hast Du zu viele Pfade zurück bekommen und musst … Warten wir’s ab, ich will schon wieder zwei Schritte auf einmal machen. :smile:

Wenn das passt sind wir fast fertig!

Gruß Rainer

Hallo Rainer,

wenn das fertig ist, lade ich dich zum Bier ein!

Also die Fehlermeldung ist immer noch, hört sich nur viel komplizierter an:
„Die Eigenschaft Herkunfttyp (RowSourceType)muss auf Wertliste gesetzt sein, um diese Methode verwenden zu können“

Hab ich dann auch gemacht, meine das Listenfeld auf Wertliste gesetzt, aber nun bleibt er bei Pfd(i) = objRS(„SDS-Name“) hängen mit der Meldung: „Index ausserhalb des gültigen Bereichs“

Im Listenfeld steht aber jetzt 1 Dateiname, der aber sehr sehr oft…

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

wenn das fertig ist, lade ich dich zum Bier ein!

*gg* wenn Du Dich ins Saarland verirrst … :smile:

Also die Fehlermeldung ist immer noch, hört sich nur viel
komplizierter an:
„Die Eigenschaft Herkunfttyp (RowSourceType)muss auf Wertliste
gesetzt sein, um diese Methode verwenden zu können“

? ‚Bahnhof‘. Etwas anderes verstehe ich hier nicht, aber …

Hab ich dann auch gemacht, meine das Listenfeld auf Wertliste
gesetzt,

… das hast Du ja zum Glück gelöst. *SchwißVonDerStirnWisch*

aber nun bleibt er bei Pfd(i) = objRS(„SDS-Name“)
hängen mit der Meldung: „Index ausserhalb des gültigen
Bereichs“

Im Listenfeld steht aber jetzt 1 Dateiname, der aber sehr sehr
oft…

Ein Blick in den Code …

Da steht immer der erste Datensatz, wenn ich nicht sage, geh mal zum nächsten … Ich bin aber auch unkonzentriert. Sorry.

Wenn ich mich auf ein Programm konzentrieren kann, drauflos tippe, teste … dann sehe ich so etwas. Immer mal etwas ändern, warten, dann wieder hineindenken ist sehr viel anstrengender. Das nur zu meiner Entschuldigung. Ein Anfängerfehler, aber ich weiß wirklich, wie es richtig geht. :smile:

Dann die ganze, geänderte Prozedur, da haben wir ja jetzt ein wenig gebastelt.

Private Sub Befehl0\_Click()
 Dim i As Integer
 OpenDB
 strSQL = "SELECT [Sds-task].\* FROM [Sds-task]"

 OpenRS strSQL

 Transfer "c:\server1\sds-task.lst"
 Transfer "c:\server2\sds-task.lst"
 Transfer "c:\server3\sds-task.lst"
 Transfer "c:\server4\sds-task.lst"

 objRS.Close

 strSQL = "SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name], [Sds-task].[CDS-ID], [Sds-task].Datum From [Sds-task] WHERE ((([Sds-task].[SDS-Typ]) Like 'allusers'));"

 OpenRS strSQL

 objRS.MoveFirst
 While objRS.EOF = False
 Pfd(i) = objRS("SDS-Name")
 Liste6.AddItem Pfd(i)
 i = i + 1
 objRS.Movenext
 Wend
 objConnection.Close
End Sub

Alles andere können wir unangetstet lassen, nun läuft es.
Teste mal noch und schreib das Ergebnis, ich bau schon mal den zweiten Teil ein.

Gruß Rainer

Ha, Anfängerfehler, der war gut…was bin ich denn dann :smile:Ich weiß schon wie schwierig es ist so etwas aus der Entfernung zu bewältigen, Danke dafür nochmal!

Saarland…hmmm…dann wie in der Werbung, per Post senden und wir stoßen per wer-weiss-was an :smile:

Also der Code ist kopiert, aber bei:From [Sds-task] WHERE ((([Sds-task].[SDS-Typ]) Like
‚allusers‘));" erkennt er das ’ vor allusers als AUSKLAMMERZEICHEN und ich kenne den Syntax nicht um das zu änder.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Gerd,

Ha, Anfängerfehler, der war gut…

Saarland…hmmm…dann wie in der Werbung, per Post senden und
wir stoßen per wer-weiss-was an :smile:

Machen wir wenn es fertig ist. Ich denke da finde ich etwas passendes in meinem Kühlschrank. :smile:

Also der Code ist kopiert, aber bei:From [Sds-task] WHERE
((([Sds-task].[SDS-Typ]) Like
‚allusers‘));" erkennt er das ’ vor allusers als
AUSKLAMMERZEICHEN und ich kenne den Syntax nicht um das zu
änder.

aaarghhhh! Wenn ich von VB6 aus einen SQL-String abschicke, dann sind das Anführungszeichen.
In Deinem Originalcode standen da Anführungszeichen, die musste ich ersetzen, weil VB die so nicht verarbeitet hat.
Aber wir hatten ja kürzlich schon ein Problem mit Anführtungszeichen und dabei haben wir die Syntax ja gesehen, einen Versuch ist es wert … schreib mal …

… WHERE ((([Sds-task].[SDS-Typ]) Like „“"„allusers“"""));"

Das geht oder nicht. Ungetestet, eher geraten.

Aber sag mal, vorhin hattest Du doch schon eine Liste mit Pfaden, da hat der SQL-String doch funktioniert? Nur das objRS.MoveNext hat gefehlt … Das verstehe ich nicht …

Gruß Rainer