Announcement

Collapse
No announcement yet.

Datensatz ID und ADO (bzw. ADO.Net)

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

  • Datensatz ID und ADO (bzw. ADO.Net)

    Hallo,

    eine Frage zum Thema Datensatz ID und ADO (bzw. ADO.Net).
    Zur Zeit erstelle ich eine ID über eine StoredProcedure (SQL Server).
    Da ich dort mittlerweile mit CursorLocation clUseClient arbeite und die Verbindung immer wieder trenne, baue ich sie beim anlegen eines neuen Datensatzes wieder auf um eine neue ID zu erhalten.

    Da es bei ADO.Net nur noch ClientCursor (mit getrennter Verbindung) geben wird, würde mich interessieren ob es dort eine andere Möglichkeit gibt eine eindeutige ID zu erhalten als bisher oder ob dort das oben beschrieben Verfahren zu empfehlen ist.

    Wird es möglicherweise in Delphi 7 ADO.Net Komponenten geben oder wird nur der mühsame weg über die Typbibliothek und der Verzicht auf Visuelle Entwicklung möglich sein um .Net zu nutzen ?

    Viele Grüße

    Walter

  • #2
    Hallo,

    &gt;...baue ich sie beim anlegen eines neuen Datensatzes <br>
    &gt;wieder auf um eine neue ID zu erhalten.

    das ist nur eine Option von mehreren. Der Client darf zum Beispiel im ltBatchOptimstic-Modus (clUseClient) beliebig viele Datensätze neu anlegen, <b>ohne</b> das jedesmal eine Datenbankverbindung (neue ID vom SQL Server) benötigt wird. Dies steht auch bei Master-/Detail-Datenmengen zur Verfügung. Erst dann, wenn alle diese neuen Datensätze über UpdateBatch in die Datenbank eingefügt werden, muss die von jedem Client (clUseClient) vergebene "Hilfs-ID" (in eigener Regie hochgezähltes privates Objektfeld) gegen den richtigen Wert eingetauscht werden. Dazu steht sowohl die Stored Procedure als auch ein INSTEAD OF-Trigger zur Verfügung.

    Daher gibt es an dieser Stelle keine Kollision mit ADO.NET. Im Gegenteil, da ADO.NET zwischen dem automatischen Generieren der SQLs (<b>CommandBuilder</b>) und dem expliziten SQLs/SPs über <B>DataAdapter</b> unterscheidet, hat man deutlich mehr Gestaltungsspielraum.

    &gt;Wird es möglicherweise in Delphi 7 ADO.Net Komponenten geben...

    Gute Frage - von Borland ist dazu keine offizielle Info erhältlich - zur Zeit brodelt nur die Gerüchteküche :-)

    P.S: Wenn Delphi .NET weiterhin ignoriert, schiesst sich Borland selbst aus der Windows-Welt

    Comment


    • #3
      Hallo,<br>
      ich löse das Problem der clientseitig erzeugten ID's seit vielen Monaten erfolgreich direkt im AfterInsert Event des Datasets mit:<br>
      <pre>
      FieldByname('IDField').asString := CreateClassID;
      </pre>
      Das setzt natürlich voraus, dass man mit Speicherplatz in seiner Datenbank nicht geizen muss, da eine ClassID 38 Zeichen lang ist. Entfernt man die geschweiften Klammern und Bindestriche bleiben noch
      32 Zeichen übrig. Das bedeutet, dass das varchar ID-Feld mindestens 32 Zeichen lang sein muss. Dafür hat man immer eine eindeutige ID.<br>
      Wenn einem diese Methode gefällt (so wie mir), kann man auch eine neue TADODataset Komponente ableiten, eine neue Eigenschaft (z.B. KeyField) einführen, das AfterInsert Event überschreiben und darin dem KeyField automatisch die ID zuzuweisen. Somit hat man immer ohne grossen Programmieraufwand eine ID in seinem Keyfield.<br>
      Viele Grüss

      Comment

      Working...
      X