none
SQL-Server an ACCDB: ADO oder DAO?

    Frage

  • Hallo,

    wir stellen ein ADP-Projekt auf ACCDB um. Nachdem die Formularanbindung soweit klar ist (Filter auf eingebundene View) habe ich noch ein paar Fragen.

    1. Wie fülle ich Combo-Boxen?
       - Abfrage auf eingebundene Tabellen?
       - PT-Abfrage?

    2. Wie greife ich per Code auf Daten zu?
       - DAO über eingebundene Tabellen?
       - ADO über Connection?
    DAO ist wohl empfohlen, aber ist ADO nicht schneller?

    3. Wenn ich mit ADO arbeite, macht es Sinn, die Connection immer wieder zu schliessen oder kann ich sie ständig offen lassen?

    4. Wenn ich in einem Formular mit angebundener View beim Erfassen Felder per Code mit NULL fülle, steht nach dem Speichern in allen Feldern "#Gelöscht". Der Datensatz wurde aber gespeichert, wenn ich das Formular neu öffne, ist er da. Ist das Problem bekannt?

    Gruß Thomas
    Donnerstag, 7. Oktober 2010 14:23

Antworten

  • hallo Thomas,

    1. Wie fülle ich Combo-Boxen?
        - Abfrage auf eingebundene Tabellen?

    Das sollte immer der erste Ansatz sein.

        - PT-Abfrage?

    Sollte nur die Ausnahme sein, da eine PT wie eine AdHoc-Abfrage ist.

    Bei Performance-Problemen gibt es imho zwei Ansätze: Spezielle Views für die Combos (zur Optimierung der Abfrage) oder aber lokale Lookup-Tabellen im FE (bei großen Netzwerklatenzen).

    2. Wie greife ich per Code auf Daten zu?
        - DAO über eingebundene Tabellen?

    So oft es geht. Da hier die Session-Verwaltung nicht dein Problem ist.

        - ADO über Connection?
    DAO ist wohl empfohlen, aber ist ADO nicht schneller?

    Scheller? Ne, nicht wirklich.

    3. Wenn ich mit ADO arbeite, macht es Sinn, die Connection immer wieder zu schliessen oder kann ich sie ständig offen lassen?

    Das kommt auf deinen Anwendungsfall an. Innerhalb einer Schleife die Connection immer wieder zu öffnen und zu schliessen wird deinem DBA gar nicht gefallen ;)

    4. Wenn ich in einem Formular mit angebundener View beim Erfassen Felder per Code mit NULL fülle, steht nach dem Speichern in allen Feldern "#Gelöscht". Der Datensatz wurde aber gespeichert, wenn ich das Formular neu öffne, ist er da. Ist das Problem bekannt?

    Das Problem hier ist die Arbeitsweise von Jet/ACE und deine konkreter Code. Aber im Allgemeinen reduzierst du diese Fälle, indem du jeder Tabelle serverseitig ein ROWVERSION (TIMESTAMP) Feld verpasst.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    • Als Antwort markiert Thomas Warnke Mittwoch, 13. Oktober 2010 05:32
    Donnerstag, 7. Oktober 2010 14:59
    Moderator

Alle Antworten

  • hallo Thomas,

    1. Wie fülle ich Combo-Boxen?
        - Abfrage auf eingebundene Tabellen?

    Das sollte immer der erste Ansatz sein.

        - PT-Abfrage?

    Sollte nur die Ausnahme sein, da eine PT wie eine AdHoc-Abfrage ist.

    Bei Performance-Problemen gibt es imho zwei Ansätze: Spezielle Views für die Combos (zur Optimierung der Abfrage) oder aber lokale Lookup-Tabellen im FE (bei großen Netzwerklatenzen).

    2. Wie greife ich per Code auf Daten zu?
        - DAO über eingebundene Tabellen?

    So oft es geht. Da hier die Session-Verwaltung nicht dein Problem ist.

        - ADO über Connection?
    DAO ist wohl empfohlen, aber ist ADO nicht schneller?

    Scheller? Ne, nicht wirklich.

    3. Wenn ich mit ADO arbeite, macht es Sinn, die Connection immer wieder zu schliessen oder kann ich sie ständig offen lassen?

    Das kommt auf deinen Anwendungsfall an. Innerhalb einer Schleife die Connection immer wieder zu öffnen und zu schliessen wird deinem DBA gar nicht gefallen ;)

    4. Wenn ich in einem Formular mit angebundener View beim Erfassen Felder per Code mit NULL fülle, steht nach dem Speichern in allen Feldern "#Gelöscht". Der Datensatz wurde aber gespeichert, wenn ich das Formular neu öffne, ist er da. Ist das Problem bekannt?

    Das Problem hier ist die Arbeitsweise von Jet/ACE und deine konkreter Code. Aber im Allgemeinen reduzierst du diese Fälle, indem du jeder Tabelle serverseitig ein ROWVERSION (TIMESTAMP) Feld verpasst.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    • Als Antwort markiert Thomas Warnke Mittwoch, 13. Oktober 2010 05:32
    Donnerstag, 7. Oktober 2010 14:59
    Moderator
  • Hallo Stefan,

    So oft es geht. Da hier die Session-Verwaltung nicht dein Problem ist.

    welche Sessionverwaltung und welche Probleme?

    Das Problem hier ist die Arbeitsweise von Jet/ACE und deine konkreter Code. Aber im Allgemeinen reduzierst du diese Fälle, indem du jeder Tabelle serverseitig ein ROWVERSION (TIMESTAMP) Feld verpasst.

    TIMESTAMP-Felder habe ich erstellt. Nach Auswahl einer Combobox hole ich Daten aus einer Kundentabelle. Und da sind manchmal Felder leer. Gibt es einen Workaround? Statt Null mit vbNullString füllen??

    Gruß & schönen Abend

    Thomas

    Donnerstag, 7. Oktober 2010 19:16
  • hallo Thomas,

    So oft es geht. Da hier die Session-Verwaltung nicht dein Problem ist.

    welche Sessionverwaltung und welche Probleme?

    Ersetzte Session durch Connection und siehe deine Frage 3 .)

    Das Problem hier ist die Arbeitsweise von Jet/ACE und deine konkreter Code. Aber im Allgemeinen reduzierst du diese Fälle, indem du jeder Tabelle serverseitig ein ROWVERSION (TIMESTAMP) Feld verpasst.

    TIMESTAMP-Felder habe ich erstellt. Nach Auswahl einer Combobox hole ich Daten aus einer Kundentabelle. Und da sind manchmal Felder leer. Gibt es einen Workaround? Statt Null mit vbNullString füllen??

    Das bedeutet, das der Datensatz beim Speichern vom SQL Server noch einmal angefasst wird, entweder durch einen Trigger oder aber auch bestimmte Default-Werte. Danach findet Jet/ACE diesen speziellen Datensatz nicht mehr, da er ja sich verändert hat.

    vbNullString? ne, wird serverseitig eh zu NULL.

    Die Frage ist, ob du alle notwendigen Felder in der View hast. D.h. alle Felder der beteilitgten Primärschlüssel und die ROWVERSION-Felder?

    Wenn, ja, dann bleibt dir nur ein code-seitiges Requery.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Freitag, 8. Oktober 2010 09:11
    Moderator