Tabelle füllen mit externer Datei

Hallo Rainer!

Wahnsinn, es funktioniert!!!
Ich werde jetzt mal die ganzen Files in das Testverzeichnis kopieren um zu sehen ob es noch irgendwo klemmt.

DANKE du bist echt super! Melde mich gleich wieder mit dem Ergebnis.

Gruss Gerd

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

Hallo Rainer,

hatte eben nur darauf geachtet ob das .yes da ist und dabei den anderen Teil nicht beachtet.
Der .yes wird prima erzeugt, habe aber einen Gedankenfehler, also du falsche informationen bekommen. Ist dadurch passiert, weil wir immer ohne .yes gearbeitet habe.

Ist etwas kompliziert aber ich versuche es mal:

Der Teil, wo die Datenfiles in die Query geschrieben werden ist OK.
Dort stehen sagen wir mal 46 Dateinamen die wir als Grundlage nehmen.
Jetzt kommt der Gedankenfehler von mir…da ich in meinem Testverzeichnis nur Dateinamen ohne .yes stehen hatte und es Dir auch so gesagt habe, liest das Programm jetzt alle Dateinamen ohne .yes (da gibt es jetzt natürlich keine mehr von), syncronisiert, wandelt sie um in .yes und schreibt sie auf die 4 Server.

Es sollte aber so sein, dass die Dateinamen in der Query (stehen dort ohne .yes) als .yes gelesen werden, syncronisiert und dann auch als .yes auf die 4 Server zu speichern.

Kannst du mir folgen?

Gruss Gerd

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

Hi Gerd,

Es sollte aber so sein, dass die Dateinamen in der Query
(stehen dort ohne .yes) als .yes gelesen werden, syncronisiert
und dann auch als .yes auf die 4 Server zu speichern.

Kannst du mir folgen?

ich versuche es mal.

das Programm bekommt zum Beispiel den Dateinamen ‚Test‘ und soll dann die Datei ‚Test.yes‘ lesen. Oder soll es die Datei ‚Test‘ lesen, die in Ruhe lassen und ‚Test.yes‘ schreiben? So muss es jetzt sein, Die Datei ‚Test‘ kann nicht verschwinden.

Oder sollen die Dateien ‚Test‘ und ‚Test.yes‘ gelesen werden und die Datei ‚Test.yes‘ geschrieben?

Du siehst, so ganz sehe ich noch nicht durch.

Erkläre es bitte noch einmal, ausgehend davon, daß es auf dem Server eine Datei ‚Test‘ und eine Datei ‚Test.yes‘ gibt. Welche soll gelesen werden? Daß nur die Datei ‚Test.yes‘ geschrieben werden soll, habe ich verstanden.

Gruß Rainer

Hallo Rainer,

ich wundere mich schon die ganze Zeit, dass du aus dieser Entfernung überhaupt verstehst was ich gerne hätte :smile:

Ich teile es in 2 Teile auf, der Teil wo wir in die Tabelle schreiben und der Teil wo wir syncronisieren und schreiben, OK?

Teil 1:
Wir lesen eine Datei aus, deren Inhalt sind Dateinamen ohne .yes. Diese schreiben wir in eine Tabelle, danach in eine Query, wo als Ergebnis noch (als Beispiel) 46 Dateinamen ohne .yes übrig bleiben.
Funktioniert schon!

Teil 2:
Diese (als Beispiel) 46 Dateinamen aus der Query ohne .yes müssen nun auf den 4 Servern gelesen werden (dort stehen sie aber mit .yes!!!), syncronisiert und wieder zurück geschrieben werden mit .yes

War das besser beschrieben?

Gruss Gerd

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

Hi Gerd,

War das besser beschrieben?

fast. :smile: Was Du bisher nicht geschrieben hast, die Pfade, die da kommen und durch die Endung .yes erweitert werden sollen, haben die denn überhaupt eine Endung? Wenn nein, ist das zuverlässig?

Einfach ein .yes anhängen, ohne erst zu prüfen was da steht, ist ja am Einfachsten. Wenn da aber schon eine Endung steht, z.B. ‚Test.txt‘ dann wird durch einfaches Anhängen daraus ‚Test.txt.yes‘, was u.U. falsch ist.

Möchtest Du das nur blind angehängt haben, oder ist eine Prüfung und das Ersetzen von allem, was nach einem Punkt kommt richtig?

Nur mit Anhängen würde der Code dann so aussehen, ob das richtig ist, kannst nur Du wissen.

Gruß Rainer

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection
Dim Feld() As String
Dim Pfd() 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
 ReDim Pfd(i)
 While objRS.EOF = False
 ReDim Preserve Pfd(i)
 Pfd(i) = objRS("SDS-Name")
 i = i + 1
 objRS.Movenext
 Wend

 objRS.Close
 objConnection.Close

 Sync
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

Private Sub QuickSort(ByVal LB As Long, ByVal UB As Long)
 Dim P1 As Long, P2 As Long, Ref As String, TEMP As String
 P1 = LB
 P2 = UB
 Ref = Feld((P1 + P2) / 2)
 Do
 Do While (Feld(P1) Ref)
 P2 = P2 - 1
 Loop
 If P1 P2)
 If LB Zl Then
 Tmp(n) = Feld(i)
 n = n + 1
 Zl = Feld(i)
 End If
 Next
 ReDim Feld(n - 1)
 For i = 0 To n - 1
 Feld(i) = Tmp(i)
 Next
End Sub

Private Sub Sync()
 Dim Txt As String, Daten As String
 Dim i As Integer, c As Integer, ff As Integer, l As Long
 Dim Server(3) As String, Pfad As String, Pos As Integer
 Server(0) = "c:\Server1\"
 Server(1) = "c:\Server2\"
 Server(2) = "c:\Server3\"
 Server(3) = "c:\Server4\"
 ff = FreeFile
 For i = LBound(Pfd) To UBound(Pfd)
 Daten = ""
 For c = 0 To 3
 Pfad = Server(c) + Pfd(i) + ".yes"
 If PathFileExists(Pfad) Then
 l = FileLen(Pfad)
 Txt = Space(l)
 Open Pfad For Binary As #ff
 Get #ff, , Txt
 Close #ff
 Daten = Daten + Txt
 End If
 Next
 If Trim(Daten) "" Then
 Feld = Split(Daten, vbCrLf)
 QuickSort LBound(Feld), UBound(Feld)
 Clean
 Daten = Join(Feld, vbCrLf)
 For c = 0 To 3
 Pfad = Server(c) + Pfd(i) + ".yes"
 Open Pfad For Output As #ff
 Print #ff, Daten
 Close #ff
 Next
 End If
 Next
End Sub

Hallo Rainer,

das sieht guuuuut aus!

Zuerst haben sie keine Endung, das ist der Teil wo die Datein gelesen werden und in die Tabelle/Query geschrieben werden.
Danach haben sie die Endung .yes und bekommen sie auch wieder, das ist gewollt und richtig so.

Teste jetzt noch einmal alles gründlich, brauche dafür paar Minuten.
DANKE!!!

Gruss Gerd

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

Hallo Rainer,

bin sprachlos und begeistert, es funktioniert ALLES!!!
Danke und wie gesagt, irgendwie möchte ich das bei Dir gut machen, für die absolut tolle Unterstützung!

Zwei Fragen hätte ich noch:

  1. Können wir (wenn du Zeit hast) den Code mal von oben bis unten durchgehen (besprechen), damit ich beim nächsten mal genau weiß was ich zu tun habe?

  2. Habe da noch eine Idee, sag mir bitte mal ob ich da richtig liege…Wenn ich eine exception für eine Datei haben möchte, also sagen wir mal, die Datei office–1.yes soll nicht syncronisiert werden, Könnte ich da z.B. eine Variabel setzen, wo ich im Formular mir ein Feld baue, wo ich die Datei, die nicht berücksichtig werden soll eintrage (den Namen, also office–1.yes) und diese mittels if then in deinem Code ausklammere?

Gruss Gerd

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

Hi Gerd,

bin sprachlos und begeistert, es funktioniert ALLES!!!

Wunderbar! Das freut mich!

Danke und wie gesagt, irgendwie möchte ich das bei Dir gut
machen, für die absolut tolle Unterstützung!

Einverstanden, bleib dem Brett treu und unterstütze uns, wenn wir Hilfe bei Access brauchen. :smile:

Zwei Fragen hätte ich noch:

  1. Können wir (wenn du Zeit hast) den Code mal von oben bis
    unten durchgehen (besprechen), damit ich beim nächsten mal
    genau weiß was ich zu tun habe?

Kein Problem. Am Besten siehst Du dir den Code erst mal genau an und stellst dann Fragen. Oder Du pickst Dir einen bereich heraus, bei dem du gar keine Ahnung hast, was der tut und ich erkläre, so gut ich kann.

  1. Habe da noch eine Idee, sag mir bitte mal ob ich da richtig
    liege…Wenn ich eine exception für eine Datei haben möchte,
    also sagen wir mal, die Datei office–1.yes soll nicht
    syncronisiert werden, Könnte ich da z.B. eine Variabel setzen,
    wo ich im Formular mir ein Feld baue, wo ich die Datei, die
    nicht berücksichtig werden soll eintrage (den Namen, also
    office–1.yes) und diese mittels if then in deinem Code
    ausklammere?

Ja. :smile:
Du könntest ein Textfeld, eine Liste und einen Button einbauen.
In das Textfeld trägst Du den Namen ein, beim Klick auf den Button wird er in die Liste geschrieben und aus dem Textfeld gelöscht.

In unserem Programm schreibst Du die Liste einfach mit Trennzeichen in einen String. Dann prüfst Du an der Stelle, an der die Dateinamen aus der Abfrage in das Array Pfd() geschrieben werden, ob der Name in dem String vorkommt. Wenn ja, wird er nicht in das Array übertragen, das war’s schon … Das habe ich gerade mal im Kopf gemacht, ohne tippen … Einschließlich ‚Private Sub …‘, ‚End Sub‘ … kämen die drei Steuerelemente und neun Zeilen Code hinzu. :smile:

Bekommst Du das hin? Das ist nicht schwer.

Gruß Rainer

Hallo Rainer,

Ja gerne, ich mache noch die Änderung mit dem Exception und dann knuddel ich den Code auseinander!

ähm…neun Zeilen und Private sub, end sub…?
Also ich habe mir das so vorgestellt:

Habe eine neue Tabelle mit den Namen Exception gerade definiert, damit die Werte mir nicht immer verloren gehen wenn ich Access schließe.
Dann habe ich 2 Textfelder in meinem Formular mit Bezug auf die Tabelle erzeugt (funktioniert auch schon, was ich in die Textfelder schreibe bleibt erhalten!).

Glaube die Änderung wird in Private Sub Transfer(ByVal Datei As String) gemacht.

Die Änderung würde ich ungefähr so schreiben (ist markiert durch -----:

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), „““", „“)

If objrs(2) = Text17 OR Text18 then
objrs(2) = hier müsste jetzt sowas wie delete rein…
next

Next
objRS.Update
Wend
Close #ff
End Sub

Was hälst du davon?

Gruss Gerd

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

Hallo Gerd,

Ja gerne, ich mache noch die Änderung mit dem Exception und
dann knuddel ich den Code auseinander!

OK.

ähm…neun Zeilen und Private sub, end sub…?
Also ich habe mir das so vorgestellt:

Habe eine neue Tabelle mit den Namen Exception gerade
definiert, damit die Werte mir nicht immer verloren gehen wenn
ich Access schließe.
Dann habe ich 2 Textfelder in meinem Formular mit Bezug auf
die Tabelle erzeugt (funktioniert auch schon, was ich in die
Textfelder schreibe bleibt erhalten!).

Glaube die Änderung wird in Private Sub Transfer(ByVal Datei
As String) gemacht.

Auch OK, ich hatte an eine variable Anzahl gedacht, man weiß ja nie, was noch dazu kommt. Aber bleiben wir erst mal bei Deinem Ansatz.

Die Änderung würde ich ungefähr so schreiben (ist markiert
durch -----:

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), „““", „“)

If objrs(2) = Text17 OR Text18 then
objrs(2) = hier müsste jetzt sowas wie delete rein…
next

Next
objRS.Update
Wend
Close #ff
End Sub

Was hälst du davon?

hmmm. Warum erst schreiben und dann Gedanken machen, wie man es wieder weg bekommt?

Du hast Dir auch die falsche Stelle herausgesucht. :smile:
Du prüfst vier Felder, wo nur eines passen kann.
Du prüfst ein paaar hundert Einträge obwohl Du später eine Liste mit nur 46 Einträgen verarbeitest, die nur Daten enthalten, die auch passen können.

Wie gefällt Dir diese Stelle: ?

 objRS.MoveFirst
 ReDim Pfd(i)
 While objRS.EOF = False
 If objRS("SDS-Name") Test17.Text And objRS("SDS-Name") Text18.Text Then
 ReDim Preserve Pfd(i)
 Pfd(i) = objRS("SDS-Name")
 i = i + 1
 End If 
 objRS.Movenext
 Wend

Wie gesagt hätte ich das lieber etwas variabler gehalten … :smile:

Wenn Du die Namen ohnehin praktisch im Code unterbringst, dann kannst Du das auch direkt dort hin tippen.

Dim Exception as String
Exception = „Test1|Test2“

 objRS.MoveFirst
 ReDim Pfd(i)
 While objRS.EOF = False
 If InStr(Exception, objRS("SDS-Name") = 0 Then
 ReDim Preserve Pfd(i)
 Pfd(i) = objRS("SDS-Name")
 i = i + 1
 End If 
 objRS.Movenext
 Wend

Nicht verzweifeln mit mir.

Gruß Rainer

Guten Morgen Rainer,

ich dachte mir nur, dass ich es abfange wenn es in die Tabelle geschrieben wird, weil im zweiten Teil die Tabelle/Query als Grundlage genommen wird.
In den Code selbst die Exception zu schreiben ist irgendwie uncool :smile:
Habe dein Beispiel mal eingegeben, aber da kommt dann die Meldung „Das Steuerelement kann nur dann auswerten, wenn es den Fokus hat“. Liegt es daran, dass der Fokus nicht auf dem Textfeld steht? Kann ja eigentlich nicht sein. Soll ich es vielleicht direkt von der Tabelle auslesen (die Tabelle ich ich für die 2 Textfelder erstellt habe)?

Gruss Gerd

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

Hallo Rainer,

der Code von Dir ist wirklich extrem interessant und ich würde ganz gerne von oben anfangen.

Private Declare Function PathFileExists Lib „shlwapi.dll“ Alias „PathFileExistsA“ (ByVal pszPath As String) As Long

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

Was mich ein wenig verwirrt ist, dass du dort eine shlwapi.dll einsetzt, welche Funktion hat diese dll und woher weiß man das es eine solche dll gibt :smile:

Gruss Gerd

Hallo Gerd,

Ja gerne, ich mache noch die Änderung mit dem Exception und
dann knuddel ich den Code auseinander!

OK.

ähm…neun Zeilen und Private sub, end sub…?
Also ich habe mir das so vorgestellt:

Habe eine neue Tabelle mit den Namen Exception gerade
definiert, damit die Werte mir nicht immer verloren gehen wenn
ich Access schließe.
Dann habe ich 2 Textfelder in meinem Formular mit Bezug auf
die Tabelle erzeugt (funktioniert auch schon, was ich in die
Textfelder schreibe bleibt erhalten!).

Glaube die Änderung wird in Private Sub Transfer(ByVal Datei
As String) gemacht.

Auch OK, ich hatte an eine variable Anzahl gedacht, man weiß
ja nie, was noch dazu kommt. Aber bleiben wir erst mal bei
Deinem Ansatz.

Die Änderung würde ich ungefähr so schreiben (ist markiert
durch -----:

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), „““", „“)

If objrs(2) = Text17 OR Text18 then
objrs(2) = hier müsste jetzt sowas wie delete rein…
next

Next
objRS.Update
Wend
Close #ff
End Sub

Was hälst du davon?

hmmm. Warum erst schreiben und dann Gedanken machen, wie man
es wieder weg bekommt?

Du hast Dir auch die falsche Stelle herausgesucht. :smile:
Du prüfst vier Felder, wo nur eines passen kann.
Du prüfst ein paaar hundert Einträge obwohl Du später eine
Liste mit nur 46 Einträgen verarbeitest, die nur Daten
enthalten, die auch passen können.

Wie gefällt Dir diese Stelle: ?

objRS.MoveFirst
ReDim Pfd(i)
While objRS.EOF = False
If objRS(„SDS-Name“) Test17.Text And
objRS(„SDS-Name“) Text18.Text Then
ReDim Preserve Pfd(i)
Pfd(i) = objRS(„SDS-Name“)
i = i + 1
End If
objRS.Movenext
Wend

Wie gesagt hätte ich das lieber etwas variabler gehalten …

-)

Wenn Du die Namen ohnehin praktisch im Code unterbringst, dann
kannst Du das auch direkt dort hin tippen.

Dim Exception as String
Exception = „Test1|Test2“

objRS.MoveFirst
ReDim Pfd(i)
While objRS.EOF = False
If InStr(Exception, objRS(„SDS-Name“) = 0 Then
ReDim Preserve Pfd(i)
Pfd(i) = objRS(„SDS-Name“)
i = i + 1
End If
objRS.Movenext
Wend

Nicht verzweifeln mit mir.

Gruß Rainer

Guten Morgen Gerd,

ich dachte mir nur, dass ich es abfange wenn es in die Tabelle
geschrieben wird, weil im zweiten Teil die Tabelle/Query als
Grundlage genommen wird.

OK, kann man auch machen. Dann schreib die Prüfung aber vor die Stelle, an der geschrieben wird und trage die daten gar nicht erst ein, wenn eine Ausnahme gefunden wurde.

In den Code selbst die Exception zu schreiben ist irgendwie
uncool :smile:
Habe dein Beispiel mal eingegeben, aber da kommt dann die
Meldung „Das Steuerelement kann nur dann auswerten, wenn es
den Fokus hat“.

Aha, VBA. :smile:

Liegt es daran, dass der Fokus nicht auf dem Textfeld steht?

Keine Ahnung, in VB6 gibt es dieses Problem nicht.

Kann ja eigentlich nicht sein. Soll ich es
vielleicht direkt von der Tabelle auslesen (die Tabelle ich
ich für die 2 Textfelder erstellt habe)?

Weder noch. Bevor der Code startet sollten die Daten in Variablen stehen. Schieb die beiden Strings bei der Eingabe oder beim Start in eine oder zwei Variablen, je nach Geschmack und lass zur Laufzeit die Steuerelemente in Ruhe. :smile:

Gruß Rainer

Hallo Rainer,

Danke für den Tipp, ich werde versuchen alles so umzusetzen.
Dauert nur etwas und ich teile Dir das Ergebnis mit falls Interesse besteht…

Gruss Gerd

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

Hallo Gerd,

Private Declare Function PathFileExists Lib „shlwapi.dll“
Alias „PathFileExistsA“ (ByVal pszPath As String) As Long

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

Was mich ein wenig verwirrt ist, dass du dort eine shlwapi.dll
einsetzt, welche Funktion hat diese dll und woher weiß man das
es eine solche dll gibt :smile:

erwischt. :smile: Das ist die Stelle, wo ich etwas tiefer in die Trickkiste gegriffen habe. Die API-Porgrammierung wird in der VB-Hilfe kaum erwähnt.

Ich verwende die ‚API-Guide‘: FAQ:2681
Man findet auch bei http://www.msdn.microsoft.com Informationen darüber, aber nicht so schön übersichtlich.

Für fast alles, was bei VB mit den eingebauten Funktionen nicht geht, findet sich eine .dll
Damit kann man dann mit VB unter Windows fast jedes Problem lösen.

Ich würde mir die API-Guide mal ansehen, aber das kommt eigentlich erst, wenn Du VB schon recht gut beherrschst. Das brauchst Du erst, wenn Dir in VB die Befehle ausgehen. :smile:

Gruß Rainer

Hallo Gerd,

Danke für den Tipp, ich werde versuchen alles so umzusetzen.
Dauert nur etwas und ich teile Dir das Ergebnis mit falls
Interesse besteht…

natürlich besteht Interesse. Ich möchte schon sehen, ob der Code noch in Ordnung ist.

Im Moment ist er sicher noch nicht ganz optimal, aber doch immerhin ‚vorzeigbar‘. :smile: Mein Sohn ist Wirtschaftsinformatiker, der hat genickt. *gg*

Gruß Rainer

Hallo Rainer,

es lag wirklich an den Fokus. Habe den Fokus auf das Formular gesetzt:
Private Sub Start_Click()
Dim i As Integer
'------------------------
e = Forms!SDS!Ex1
d = Forms!SDS!Ex2
r = Forms!SDS!Ex3
'------------------------

und nun geht’s :smile:

Gruss Gerd

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

Hallo Gerd,

es lag wirklich an den Fokus. Habe den Fokus auf das Formular
gesetzt:
Private Sub Start_Click()
Dim i As Integer
'------------------------
e = Forms!SDS!Ex1
d = Forms!SDS!Ex2
r = Forms!SDS!Ex3
'------------------------

und nun geht’s :smile:

so weit ist das schön, daß es funktioniert, sympathischer wäre es mir trotzdem, wenn der Wert in eine Variable übernommen würde. :smile:

Vor ein paar Jahren habe ich auch noch direkt mit dem Inhalt der Steuerelemente gearbeitet, ohne die Inhalte erst in Variablen zu übernehmen. Eine schlechte Angewohnheit. Das macht man dann auch, wenn der Code davon unsauber und langsam wird und irgendwann schleichen sich da auch Fehler ein … Diese alten Programme würde ich heute Niemandem mehr zeigen wollen. :smile:

Gruß Rainer

Hallo Rainer,

gib mir bitte noch etwas Zeit, ich arbeite daran es irgendwann so zu machen wie du. Nur ohne DICH wäre ich gar nicht erst so weit gekommen!!!

Gruss Gerd

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

Hi Gerd,

gib mir bitte noch etwas Zeit, ich arbeite daran es irgendwann
so zu machen wie du.

*gg* natürlich. :smile:

Ich wollte nur vermeiden, daß Du Dir einen schlechten Stil angewöhnst und mich irgendwann verfluchst, weil ich Dir das nicht gesagt habe.

Lauffähig ist ja nicht alles, schnell soll es auch noch sein.
Wenn Du mal ein paar Hunderttausend Datensätze hast und Dein Programm ist immer noch schnell, weil Du optimalen Code schreiben kannst, weißt Du warum.

Gruß Rainer