Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access Endlosformular per Recordset füllen

Begonnen von Schakal, November 16, 2017, 15:26:37

⏪ vorheriges - nächstes ⏩

Schakal

Hallo Access Profies.
Ich habe eine Frage zum Endlosformular und Datensätze.
Ich habe eine Abfrage erstellt und mit einem Formular verbunden. Wenn ich das Endlos Formular starte bekomme ich 6 Datensätze angezeigt. So weit alles gut und richtig.

Nun wollte ich aber das über VBA alles machen und scheitere an folgenden Punkt -  Vielleicht sehe ich vor lauter Bäumen den Wald nicht mehr.
Hier mein Code für den Event "Formular beim Laden"
**********************
Private Sub Form_Load()

   Dim strSQL As String
   Dim rs As DAO.Recordset


       
strSQL = "SELECT Activities.Id, Activities.Artikelnummer, Activities.Artikelbez, Activities.z_CustomerName, Activities.Id_assembly, Activities.LieferWunsch," _
                & " Activities.Lieferdatum From Activities WHERE ((Activities.LieferWunsch) < (Date()-5))"
Set rs = CurrentDb.OpenRecordset(strSQL)

   If rs.RecordCount > 0 Then

   
  Do While Not rs.EOF

       Me.ArtikelNr = rs(1)      'meine Textfelder
       Me.ArtikelBz = rs(2)     'meine Textfelder
       Me.Kunde = rs(3)        'meine Textfelder
       Me.Maschine = rs(4)    'meine Textfelder
       Me.LieferW = rs(5)      'meine Textfelder
       Me.Lieferdate = rs(6)    'meine Textfelder
           rs.MoveNext
       Loop
     
       rs.Close
Set rs = Nothing
Set db = Nothing


    End If

End Sub
*********************************
Alles funktioniert so weit aber ich bekomme nur einen Datensatz anstatt 6 - und zwar immer den letzen, ist ja logisch beim Loop und MoveNext.
Wie kann ich alle 6 Datensätze angezeigt bekommen (wie wenn ich es über ein "Standard Abfrage" einrichte).
Ich habe auch die Abfrage nicht mehr dem Formular zugewiesen.
Übersehe ich etwas?
Was mache ich falsch?
Bitte um Hilfe
Danke :)

Lachtaube

Grüße von der (⌒▽⌒)

MzKlMu

Hallo,
warum gehst Du hier den deutlich komplizierteren Weg über ein Recorset das Formular zu füllen ?
Was gefällt Dir nicht an dem gebundenen Formular ?

Der Programmieraufwand ist um ein vielfaches höher als mit einem gebunden Formular. Die Daten müssen ja bei Änderung auch wieder zurückgeschrieben werden. Was auch Aufwand ist.

Ehrlich gesagt, weiß ich auch gar nicht wie das geht ein Endlosformular so zu füllen. Ich habe auch gerade Zweifel, ob das mit einem Endlosform überhaupt so geht.

Nachtrag:
Habe gerade den Beitrag von Lachtaube gelesen. Es geht also nicht, wie ich mir dachte.
Ein gebundenes Formular hat dieses Problem erst gar nicht.
Gruß Klaus

Schakal

Hallo Lachtaube
hallo MzKIMu
das habe ich vermutet. Ich dachte ich komm ohne dem gebundenen Formular aus.
Na dann muss ich das wohl akzeptieren das es nicht geht. Ein Versuch war es wert.
Vielen dank somit brauche ich mich damit nicht auf zu halten um eine Lösung zu finden.
Auch ein großer Wert.
Danke ;)

MzKlMu

Hallo,
ZitatIch dachte ich komm ohne dem gebundenen Formular aus.
Na dann muss ich das wohl akzeptieren das es nicht geht. Ein Versuch war es wert.
Es würde mich jetzt doch mal interessieren, warum Du um ein gebundenes Formular herumkommen willst. Nichts ist einfacher als ein gebundenes Formular.

Ich glaube Du unterschätzt auch den Aufwand der nötig ist mit ungebundenen Formularen zu arbeiten erheblich. Die bieten meist keine Vorteile, im Gegenteil.
Gruß Klaus

Beaker s.a.

Hallo,
Ungeachtet der Vorteile gebundener Formulare, geht das schon; - so zu
sagen "Late Binding" (ungetestet).
Set rs = CurrentDb.OpenRecordset(strSQL)

   If Not rs.EOF Then    'ist IMO sicherer als .RecordCount
   
       Me.ArtikelNr.ControlSource = rs(1).Name     'meine Textfelder
       Me.ArtikelBz.ControlSource = rs(2).Name     'meine Textfelder
       Me.Kunde.ControlSource = rs(3).Name        'meine Textfelder
       Me.Maschine.ControlSource = rs(4).Name    'meine Textfelder
       Me.LieferW.ControlSource = rs(5).Name      'meine Textfelder
       Me.Lieferdate.ControlSource = rs(6).Name    'meine Textfelder

       Me.RecordSource = strSQL

       rs.Close
       Set rs = Nothing


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

#6
Ekkehard, man kann die Fragestellung natürlich verschieden interpretieren. :)

Und ja, man kann auch ein geöffnetes Recordset einem (Endlos-)Formular zuweisen. Nur ein ungebundenes Endlosformular - so habe ich die Anforderung (vielleicht miss)verstanden, gibt es nicht.

PS: Um Feldnamen eines Recordsets auszulesen, muss dieses keine Datensätze enthalten.

[edit]da war ein Wort im Eifer des Schreibgefechts verloren gegangen[/edit]
Grüße von der (⌒▽⌒)

PhilS

Zitat von: Schakal am November 16, 2017, 16:07:51Na dann muss ich das wohl akzeptieren das es nicht geht. Ein Versuch war es wert.
Die Frage ist hier: Warum möchtest du ein ungebundenes Formular?
Ein komplett ungebundenes Endlosform ist nicht möglich, aber vielleicht lässt sich was immer du erreichen möchtest auch auf anderem Weg erreichen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

Hallo,
Nochmal vorweg, - ungeachtet der Vorteile gebundener Formulare ...
ZitatEin komplett ungebundenes Endlosform ist nicht möglich,
Hm, vielleicht habe ich euch falsch verstanden, aber bei mir (A2010) geht das.
Ein ungebundenes Form (alle Steuerelementinhalte leer) wird bei mir mit einem
leeren "DS" angezeigt.
Mit dem gezeigten Code "Beim Laden" werden alle DS des RS angezeigt. Es lassen
sich sogar DS anfügen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

der gezeigte Code macht aus dem ungebundenen Form ein gebundenes:

--Datenherkunft wird gesetzt.
--Steuerelementinhalte werden auf die Datenherkunft-Felder gesetzt.

MzKlMu

#10
Hallo,
um in die gleiche Kerbe zu hauen:  ;D
Der gezeigte Code macht sonst nix wie ein gebundenes Formular, da ist nix mehr ungebunden. Du bindest halt per VBA. Daher kannst Du auch neue DS anlegen und bestehende DS ändern. Dass es gebunden ist, erkennst Du auch daran, dass nicht extra gespeichert werden muss. Was bei einem ungebunden Formular notwendig wäre.
Da kannst Du Dir den Code auch sparen und das Formular gleich gebunden erstellen.
Ein ungebundenes Formular kann nicht endlos sein.
Gruß Klaus

Beaker s.a.

Hallo Franz, hallo Klaus,
Ist mir alles klar, deshalb sprach ich ja
Zitat- so zu sagen "Late Binding"
Und
ZitatDu bindest halt per VBA
Was ja vom TS so gewollt war
ZitatNun wollte ich aber das über VBA alles machen

Das ich das auch für überflüssig halte habe ich zweimal erwähnt
Zitatungeachtet der Vorteile gebundener Formulare

gruss ekkehard

edit:
Ich kann's mir nicht verkneifen  ;)
ZitatEin ungebundenes Formular kann nicht endlos sein.
Doch, es zeigt nur nix an.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)