Announcement

Collapse
No announcement yet.

ODBC Datenbankzugriff nicht als Snapshot - aber wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ODBC Datenbankzugriff nicht als Snapshot - aber wie?

    Hallo zusammen,

    ich entwickle eine Anwendung weiter, die per ODBCauf einen MS SQL-Server (2003) zugreift. Diese Anwendung wurde seinerzeit in Delphi 5 entwickelt.

    Es gibt dort eine Tabelle deren kompletten Daten zyklisch und sequentiell in einer bestimmten Reihenfolge verarbeitet werden. Während der Verarbeitung werden Datensätze dieser Tabelle verändert und zwar Daten die aufgrund der Sortierung noch nicht gelesen wurden.

    Beispiel:
    Code:
      ID  NAME         ZUORDNUNG STATUS
      === =======      ========= ======
    ->8   Wien         4         1    -> Status nach ID 4
      7   Bern         3         0
      6   Berlin       2         0
      5   Hamburg      2         0
      4   Österreich   1         1(0)    <- ÄNDERUNG
      3   Schweiz      1         0
      2   Deutschland  1         0
      1   Übersicht    1         0
    Und nun das Problem:
    Wenn nun die Schleife an einem dieser geänderten Datensätze angelangt (ÄNDERUNG), stehen dort noch die alten Daten (0) drin. Beim nächsten Durchlauf sind dann die aktuellen geänderten Daten vorhanden.

    Offenbar wird bei der Abfrage ein Snapshot erzeugt - aber wie dann ich das umstellen?

    Wie kann ich erreichen, dass mir die nun aktuellen Daten zurückgeliefert werden?

    Viele Grüße,
    Michael

  • #2
    (Push) Hmm, hätte nicht gedacht, dass sich das als so schwierig erweist...

    Keiner eine Idee?

    Comment


    • #3
      Originally posted by MicAlter View Post
      auf einen MS SQL-Server (2003) zugreift.
      Diese Version ist mir unbekannt. Hast du evtl. von MS einen nicht veröffentliche Version bekommen?

      Originally posted by MicAlter View Post
      Und nun das Problem:
      Wenn nun die Schleife an einem dieser geänderten Datensätze angelangt (ÄNDERUNG), stehen dort noch die alten Daten (0) drin. Beim nächsten Durchlauf sind dann die aktuellen geänderten Daten vorhanden.

      Offenbar wird bei der Abfrage ein Snapshot erzeugt - aber wie dann ich das umstellen?
      Nicht unbedingt wird ein Snapshot erzeugt. Je nach Curserlocation (bei MS SQL ist hier clUseClient) sind die Daten schon auf dem Client. Wenn dann benötigst du hier clUseServer.

      Ich sehe hier aber eher das du im ersten schritt nur alle Keys vom sever abfragst und kurz vor der Verarbeitung den aktuellen Datensatz nochmal abfragst um den aktuellen Wert zu bekommen.

      Comment


      • #4
        Hallo,

        da hast Du natürlich Recht - es ist Microsoft SQL Server 2005 (Express).

        Ich sehe hier aber eher das du im ersten schritt nur alle Keys vom sever abfragst und kurz vor der Verarbeitung den aktuellen Datensatz nochmal abfragst um den aktuellen Wert zu bekommen.
        Eigentlich frage ich nicht nur die Keys ab, sondern erhalte alle Datensätze samt Nutzdaten in einer bestimmten Reihenfolge:

        select * from systems order by layer desc, parent asc, status desc

        Wenn ich nun im ersten Schritt nur die Keys entsprechend der gewünschten Reihenfolge abfrage, dann würde dadurch doch die Performance ordentlich in die Knie gehen. Ich müsste dann ja folgende Schritte durchlaufen:

        Alle Keys holen
        Schleife (Alle Keys)
        - Vergleiche und Verarbeitung
        - ggf. Datensatz aktualisieren
        Schleife ENDE



        Je nach Curserlocation (bei MS SQL ist hier clUseClient) sind die Daten schon auf dem Client. Wenn dann benötigst du hier clUseServer.
        Ich glaube hier liegt mein Problem. Wo ist genau der Unterschied?

        Comment

        Working...
        X