Hallo :D
ich habe ein Endlosformular an einen ADO Recordset angebunden. Das Formular wird beim öffnen korrekt dargestellt. Allerdings wars das auch schon. Sobald Daten aktualisiert werden sollen (z.B. me.requery), fliegen die Daten aus dem Formular. Die Recordset Anbindung in die Current Ebene zu setzen funktioniert gleich gar nicht.
Nach einem Requery sind alle Daten weg und in der ersten Zeile steht in jeder Spalte nur '#NAME?'.
Wie kann ich die Daten also aktualisieren, also z.B. ein Requery durchführen oder Filtern?
Oder wäre es besser, den Ado RS vorher in ein DAO oder normalen RS zu überführen?
Danke.
LG
datekk.
Zitat von: datekk am Februar 17, 2017, 08:04:39ich habe ein Endlosformular an einen ADO Recordset angebunden.
[...]
Nach einem Requery sind alle Daten weg und in der ersten Zeile steht in jeder Spalte nur '#NAME?'.
Wie kann ich die Daten also aktualisieren, also z.B. ein Requery durchführen oder Filtern?
Die Frage lässt sich mit den bisherigen Informationen nicht beantworten.
Wie wird das ADO.Recordset erstellt?
Wie wird es an das Formular gebunden?
Zitat von: datekk am Februar 17, 2017, 08:04:39Oder wäre es besser, den Ado RS vorher in ein DAO oder normalen RS zu überführen?
Nein, ich sehe nicht, was das bringen sollte.
ZitatWie wird das ADO.Recordset erstellt?
Durch eine Funktion, die ein ADODB Recordset zurück gibt.
Die Funktion (ADODBRecordset) hat als Grundlage eine Abfrage in der Variablen SQL. Diese wird in ein normales Recordset-Element übernommen.
Set rcs = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
Dann wird ein ADODB Recordset aufgebaut. Die Felder des 'normalen' Recordset werden in den ADODB Recordset übernommen und zwei weitere Felder werden angefügt., Dann wird das ganze mit Daten gefüllt.
Die Funktion läuft in einem eigenen Modul.
Im Formular im Bereich Open wird der Recordset geholt mit
Dim sql As String
sql = "SELECT * From Kundenliste;"
Set Me.Recordset = ADODBRecordset(sql)
Hintergrund sind die beiden Felder die ich nur im Speicher zufügen und im Formular anzeigen möchte. Das klappt auch alles, bis auf die Aktualisierung (requery).
Zitat von: datekk am Februar 17, 2017, 11:06:36Dann wird ein ADODB Recordset aufgebaut. Die Felder des 'normalen' Recordset werden in den ADODB Recordset übernommen und zwei weitere Felder werden angefügt., Dann wird das ganze mit Daten gefüllt.
Ähem, OK.
Wenn das Recordset aktualisiert werden soll, dann müsste ja dieser Prozess auch wieder durchlaufen werden. Dies durch einen einfachen Aufruf von Requery auszulösen ist etwas viel erwartet. Du müsstest hier also selbst die Aktualisierung ausprogrammieren, indem du genau diese Prozess wieder anstößt.
Und wie? Und wo?
Einen erneuten Anstoß würde ja "Set Me.Recordset = ADODBRecordset(sql)" wieder auslösen. Aber wo muss ich das dann nochmal erledigen?
Zitat von: datekk am Februar 17, 2017, 15:02:29Einen erneuten Anstoß würde ja "Set Me.Recordset = ADODBRecordset(sql)" wieder auslösen. Aber wo muss ich das dann nochmal erledigen?
Ja, genau. Die Prozedur zum Laden der Daten musst du überall dort aufrufen, wo du vorher das Me.Requery schreiben wolltest.
Wenn du auch die Standard-Aktualisierung über die Tastatur ([CTRL]+[F9]) behandeln willst, muss du die Tastaturereignisse des Formulars entsprechend abfangen und behandeln.
Ich danke Dir PhilS. Genau das ist die Lösung gewesen. Damit geht ja dann auch das Filtern. Ich habe die Variable 'sql' auf Modulebene gesetzt. Dann klappt das neu laden und Filtern super.
:)