aximand
Goto Top

Keine gültige Recordseteigenschaft bei Abfrage eines MSSQL-Views

Hallo,

ich habe in einer Datenbank neben Tabellen auch einige Views.

Bei wenigen views bekomme ich als Rückgabewertvon RecordCount -1, obwohl einige Datensätze vorhanden sind, wenn ich mit dem Managementstudio die SQL-Abfrage ausführe.

Es erscheint der Laufzeitfehler 7965 "Das eingegebene Objekt ist keine gültige Recordseteigenschaft."


Private Sub Form_Load()

Dim rs As ADODB.Recordset
ConnectSQL (0) '0= OfficeLine Datenbank, 1= QS-Datenbank  
Set rs = New ADODB.Recordset

With rs
Set .ActiveConnection = conDB 'Public conDB As ADODB.Connection  

  .LockType = adLockOptimistic
  .CursorType = adOpenKeyset
  .Open "Select * from vwDWDWareneingangsBelegPositionen_QSoffen" ' view aller QS_erfolgt = NULL  

End With
Debug.Print rs.RecordCount 'zeig mir die Anzahl an Datensätze  
Set Me.Recordset = rs
 
Do Until Me.Recordset.EOF
    Me.VorID.ControlSource = Me.Recordset.Fields("VorID").Name  
    Me.Belegjahr.ControlSource = Me.Recordset.Fields("Belegjahr").Name  
    Me.Belegnummer.ControlSource = Me.Recordset.Fields("Belegnummer").Name  
    Me.Liefertermin.ControlSource = Me.Recordset.Fields("Liefertermin").Name  
    Me.Recordset.MoveNext
Loop
view

Content-ID: 384348

Url: https://administrator.de/contentid/384348

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

colinardo
colinardo 24.08.2018 aktualisiert um 13:05:57 Uhr
Goto Top
Wundert mich nicht, du nutzt einen dynamischer Cursor und da gibt RecordCount keine zuverlässigen Werte:
https://stackoverflow.com/questions/28560897/vbscript-adodb-recordset-re ...

Grüße Uwe
Aximand
Aximand 24.08.2018 um 13:09:20 Uhr
Goto Top
Mir gehts ja auch eigentlich nicht um RecordCount, sondern darum, dass diese Fehlermeldung hoch kommt.
Und das nur bei 2,3 Views. Würde ich jetzt eine andere Tabelle oder einen anderen View darein setzten, dann zieht sich die Abfrage die Daten.
Dann passen zwar die Feldzuweisungen unten nicht, weil es die Felder nicht in den Tabellen/VIews gibt - aber grundsätzlich funktionierts
colinardo
Lösung colinardo 24.08.2018 aktualisiert um 13:34:09 Uhr
Goto Top
Ach so, das liegt meist an der CursorLocation der Connection (ODBC)
Binding a Form to an ADODB Command
How to bind Microsoft Access forms to ADO recordsets

p.s. ich fühle mich an meine ersten Erfahrungen und Stolpersteine mit Access zurück erinnert face-smile

An deiner Stelle würde ich von Access weg gehen und es mit Web-Interfaces zusammenbauen. Access ist eine Sackgasse was Cross-Platform angeht, und von der Zuverlässigkeit ganz zu schweigen, da kann ich dir Geschichten erzählen die dir die Haare zu Berge stehen lassen würden.
Aximand
Aximand 24.08.2018 um 13:38:25 Uhr
Goto Top
.CursorLocation = adUseClient

das fehlte - läuft ^^

irgendwie ist Access doch deutlich anders zu Excel. Ich komm mir vor wie ein nerviges kleines Kind, das dauernd nach seiner Mutter schreit "wie geht das?"

THX!
Aximand
Aximand 24.08.2018 um 13:44:25 Uhr
Goto Top
Öhm, unser ERP-System nutzt als Frontend Access - von daher ^^
Aximand
Aximand 24.08.2018 um 13:52:09 Uhr
Goto Top
Da die Darstellung jetzt läuft komm ich zur nächsten Hürde....

Wenn ich auf QS OK klicke, dann soll jetzt erst einmal testweise eine Nachricht ausgegeben werden, später

Private Sub cbOK_Click()
MsgBox " Klick erfolgt"  
End Sub

Allerdings lässt sich da nix klicken???
view
colinardo
colinardo 24.08.2018 aktualisiert um 17:30:24 Uhr
Goto Top
Allerdings lässt sich da nix klicken???
Glaskugel polier... Du hast keinen PrimaryKey in der SQL-Tabelle definiert, dann will Access nämlich in den Readonly Mode. Bin ich auch schon mal drüber gestolpert und testweise kann ich das auch bestätigen.
https://access-programmers.co.uk/forums/showthread.php?t=216733
Aximand
Aximand 27.08.2018 um 07:23:42 Uhr
Goto Top
Guten Morgen,

es ist/war ein View. Ich denke, dass es daran liegt, dass ich den View, der x Tabellen einbezieht eben nicht aktualisieren kann.
Ich hab mir wie folgt geholfen:

Die Abfrage der Sicht in eine lokale AccessTabelle ziehen und das Formular mit Bezug zur lokalen Tabelle aufbauen. Das funktioniert so weit ganz gut.