none
Access 2003 vs MSSQL Me.Dynaset.RecordCount

    Frage

  • Ich habe eine Datenbank mit der Möglichkeit der Anbindung an einem Backend an eine mdB oder über odbc an eine MSSQL Datenbank.

    Funktioniert auch alles bis auf

    Me.Dynaset.RecordCount

    ich öffne ein Formular und brauche beim Schliessen des Formulars den Wert Me.Dynaset.RecordCount

    Funktioniert bei beiden Varianten nur bei mssql bekomme ich > 101 Datensätzen nur 101 und nicht die richtige Anzahl - es sei den ich scrolle das Formular bis zum Ende durch.

    was ist das? odbc Einstellung? Einstellung am SQL Server?

    Dienstag, 9. April 2013 13:54

Antworten

  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:92c62961-1875-4c66-8edd-2d5eb2f27bfe@communitybridge.codeplex.com...

    Funktioniert auch alles bis auf
    Me.Dynaset.RecordCount
    ich öffne ein Formular und brauche beim Schliessen des Formulars den
    Wert Me.Dynaset.RecordCount
    Funktioniert bei beiden Varianten nur bei mssql bekomme ich > 101
    Datensätzen nur 101 und nicht die richtige Anzahl - es sei den ich
    scrolle das Formular bis zum Ende durch.

    Zum Glück, würde ich sagen. Es macht doch keinen Sinn alle Datensätze vom SQL Server ins Formular reinzuschaufeln, nur um die Anzahl Datensätze auszulesen. Das wäre rein von der Performance ein absoluter Nonsense. Dass Access trotzdem die richtige Zahl liefert ist eher Zufall (oder schlechte Angewohnheit). Access kann auch einfacher die Anzahl Datensätze in "seinen" Objekten Auslesen, als aus dem SQL Server. Also schaufelt es nur das zum Formular, was für die Verarbeitung benötigt wird.
    Wenn Du (auch in Access) aus einem Dynaset die Anzahl Datensätze haben willst, musst Du zuerst einen MoveLast machen (was dann Deinem zum Ende-Scrollen gleich kommt).

    Die bessere Variante ist ein einfaches SELECT COUNT(*) Statement an den SQL Server zu schicken. Das kann der Ruck-Zuck beantworten, ohne nur einen einzelnen Datensatz zu lesen, wenn das Statement vernünftig über Indices ausgeführt werden kann.

    Gruss
    Henry

    was ist das? odbc Einstellung? Einstellung am SQL Server?

    • Als Antwort markiert MCDPone Dienstag, 16. April 2013 07:15
    Freitag, 12. April 2013 08:37

Alle Antworten

  • Am 09.04.2013 schrieb MCDPone:

    Ich habe eine Datenbank mit der Möglichkeit der Anbindung an einem Backend an eine mdB oder über odbc an eine MSSQL Datenbank.

    Funktioniert auch alles bis auf

    Me.Dynaset.RecordCount

    Mit einer MDB als Backend muss Me.RecordCount allerdings
    funktionieren.

    ich öffne ein Formular und brauche beim Schliessen des Formulars den Wert Me.Dynaset.RecordCount

    Funktioniert bei beiden Varianten nur bei mssql bekomme ich > 101 Datensätzen nur 101 und nicht die richtige Anzahl - es sei den ich scrolle das Formular bis zum Ende durch.

    Du kannst das Recordset durchlaufen und so die Anzahl der Datensätze
    bekommen. Alternativ auf dem MSSQL eine SP aufrufen, die die Anzahl
    der Datensätze Zurück liefert.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Dienstag, 9. April 2013 17:01
  • Ja in der MdB funktioniert es

    habe es jetzt über einen recordset gelöst

    nur würde mich das interessieren was dahinter steckt das "nur" 101 datensätze geladen werden

    Freitag, 12. April 2013 05:52
  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:92c62961-1875-4c66-8edd-2d5eb2f27bfe@communitybridge.codeplex.com...

    Funktioniert auch alles bis auf
    Me.Dynaset.RecordCount
    ich öffne ein Formular und brauche beim Schliessen des Formulars den
    Wert Me.Dynaset.RecordCount
    Funktioniert bei beiden Varianten nur bei mssql bekomme ich > 101
    Datensätzen nur 101 und nicht die richtige Anzahl - es sei den ich
    scrolle das Formular bis zum Ende durch.

    Zum Glück, würde ich sagen. Es macht doch keinen Sinn alle Datensätze vom SQL Server ins Formular reinzuschaufeln, nur um die Anzahl Datensätze auszulesen. Das wäre rein von der Performance ein absoluter Nonsense. Dass Access trotzdem die richtige Zahl liefert ist eher Zufall (oder schlechte Angewohnheit). Access kann auch einfacher die Anzahl Datensätze in "seinen" Objekten Auslesen, als aus dem SQL Server. Also schaufelt es nur das zum Formular, was für die Verarbeitung benötigt wird.
    Wenn Du (auch in Access) aus einem Dynaset die Anzahl Datensätze haben willst, musst Du zuerst einen MoveLast machen (was dann Deinem zum Ende-Scrollen gleich kommt).

    Die bessere Variante ist ein einfaches SELECT COUNT(*) Statement an den SQL Server zu schicken. Das kann der Ruck-Zuck beantworten, ohne nur einen einzelnen Datensatz zu lesen, wenn das Statement vernünftig über Indices ausgeführt werden kann.

    Gruss
    Henry

    was ist das? odbc Einstellung? Einstellung am SQL Server?

    • Als Antwort markiert MCDPone Dienstag, 16. April 2013 07:15
    Freitag, 12. April 2013 08:37
  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:1c5db6eb-3464-47dc-8b8c-95949bca355d@communitybridge.codeplex.com...

    nur würde mich das interessieren was dahinter steckt das "nur" 101

    Es werden wohl eher 100 gelesen und das Recordset gibt immer noch EOF = False zurück, also wird Dir mitgeteilt, es sind mindestens 101 Datensätze drin. Genau so wie der Recordcount auch in der OH definiert ist.

    Stell' Dir mal vor, es wären 1 Mio Datensätze im Formular anzeigbar und die Tabelle oder Abfrage wäre einige GBytes gross. Wie lange würde das Formular für das Laden wohl brauchen? Ich denke, das sollte Erklärung genug sein. Dass es in neueren Verionen von Access überall so strikt gehandhabt wird, hängt wohl eher an dem unsäglichen Design Entscheid, dass SharePoint Listen als Backends missbraucht werden können. Dort wird das dann noch viel langsamer.

    Gruss
    Henry

    Freitag, 12. April 2013 08:41