Hallo,
ich hole mir vom SQL Server via ADODB ein Recordset, um dieses an ein Formular zu übergeben (set me.recordset = rcs).
Leider sind nach meinem bisherigen Kenntnisstand ADO Recordsets nicht updatefähig / bearbeitungsfähig, wenn die Grundlage dieses Recordsets eine Abfrage, basierend auf mehr als einer Tabelle ist.
Dies ist aber ein Problem. Ich möchte die Daten gern bearbeiten.
So habe ich eine Tabelle tbl1 mit den Spalten ID(int), KundenIdRef(int), Auswahl(bit/bool).
In einem Formular möchte ich nun den Kundennamen anzeigen und die Möglichkeit haben, ein Häkchen zu setzen.
Also sieht mein Recordset so aus:
dim rcs as adodb.recordset
set rcs = new adodb.recordset
rcs.source "SELECT k.name, s.auswahl FROM Kundenliste as k INNER JOIN tbl1 as s ON k.IdKunde = s.KundenIdRef"
rcs.ActiveConnection = con
rcs.CursorType = adOpenDynamic
rcs.LockType = adLockOptimistic
rcs.Open
Dann Übergabe an Formular mit set me.recordset = rcs
Problem wie oben geschildert: ich kann keine Häkchen setzen, da der Recordset nicht aktualisierbar ist.
Nun, wie macht Ihr das Ganze? Kann man das Recordset von seiner Datenquelle "entbinden", sodass es sozusagen ein Recordset (Rcs) ist, welches im Speicher liegt und dort bearbeitet werden kann? Somit könnte ich dann wenigstens mit einer For Each Schleife die Häkchen in die DB bringen... Aber wie "entbinde" ich das Rcs? Ein Set rcs.datasource = nothing macht das Rcs dann für das Formular auch nicht bearbeitbar.
LG
			
			
			
				Hallo!
Falls die Auswahldaten nicht direkt in der Datenbank landen müssen, könntest du die Connection vom Recordset kappen. Dann sollte es änderbar werden.
Bedingung zum Binden an das Formular: clientseitiger cursor, cursortyp: keyset oder static
Zuerst die Verbindung mit set rcs.ActiveConnection = nothing kappen und dann an das Formular binden.
mfg
Josef
			
			
			
				Habe ich versucht, jedoch ist das Formular immer noch nicht bearbeitbar. Es erscheint unten in der Access Zeile eine Meldung: "Feld kann nicht bearbeitet werden, es ist an das unbekannte Steuerelement Auswahl gebunden."
Zudem stürzt Access wenige Sekunden danach ohne Fehlermeldung völlig ab. Das hab ich öfter. Leere Recordsets oder Recordsets ohne Connection scheint Access zu hassen.
			
			
			
				Hast du es so probiert:
dim rcs as adodb.recordset
set rcs = new adodb.recordset
rcs.source "SELECT k.name, s.auswahl FROM Kundenliste as k INNER JOIN tbl1 as s ON k.IdKunde = s.KundenIdRef"
rcs.ActiveConnection = con
rcs.CursorLocation = adUseClient
rcs.CursorType = adOpenKeyset
rcs.LockType = adLockOptimistic
rcs.Open
set rcs.ActiveConnection  = nothing
set DeineFormRef.Recordset = rcs
' .... und natürlich an dieser Stelle rcs nicht mit rcs.Close schließen
Ansonsten: kannst du eine Beispielanwendung erstellen, in der das Problem zu sehen ist?
mfg
Josef
			
			
			
				Zitat von: datekk am Februar 05, 2019, 18:35:40
So habe ich eine Tabelle tbl1 mit den Spalten ID(int), KundenIdRef(int), Auswahl(bit/bool).
In einem Formular möchte ich nun den Kundennamen anzeigen und die Möglichkeit haben, ein Häkchen zu setzen.
Zwei Schüsse aus der Hüfte:
Die Tabelle hat einen Primärschlüssel?
Kannst du probeweise das 
bit-Feld ändern zu 
smallint und probieren, ob das einen Unterschied macht?
			
 
			
			
				Lieben Dank Euch. Ich bastel morgen mal eine Beispiel DB mit realem SQL Server Zugriff... Da schauen wir uns das mal zusammen an. 
Bis morgen.
LG
			
			
			
				Problem: Sobald ich die Active Connection auf nothing setze, bricht mein Access zusammen. Auf einem anderen Rechner läuft es jetzt.
Hier die Datei. Vielleicht lassen sich noch elegantere Lösungen finden um die Daten bearbeiten zu können und um ggf. auch einen neuen DS anfügen zu können.
			
			
			
				1.) Das unveränderte Beispiel mit Set FrmRcs.ActiveConnection = Nothing funktioniert bei mir fehlerfrei.
2.) Wer lesen kann, ist im Vorteil. ;-)
Wenn ich Set ... = Nothing auskommentiere, kommt bei dem Versuch der Änderung folgende Fehlermeldung: Form is read-only, because the Unique Table property is not set.
Konsequenz:
In Form-Open, nach zuweisen des Recordsets, Folgendes ergänzen:
Me.UniqueTable = "Auswahl"
-> Funktioniert!
(Alles getestet mit Access 2010)
			
			
			
				Lieber PhiS,
ich weiß gar nicht, wie ich Dir danken soll  ::) ::) ::)
Me.UniqueTable bringt die Lösung auf die ich schon so lang gewartet habe. 
1000 Dank.
			
			
			
				Übrigens.. Ich konnte in diesem Zusammenhang auch rausbekommen, wie das Recordset vor Set me.Recordset = rcs mit dieser Eigenschaft belegt werden kann:
rcs.Properties("Unique Table").Value = "Auswahl"
Set me.Recordset = rcs