Announcement

Collapse
No announcement yet.

Locate oder SELECT / Wie Problem lösen?

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

  • Locate oder SELECT / Wie Problem lösen?

    Hallo zusammen

    Es würde mich wirklich interessieren, wie ein Firebird-Crack
    folgendes Problem lösen würde:

    Es besteht eine TStringlist mit 1000 Einträgen (auch doppelte),
    welche in eine Tabelle eingefügt werden sollen.
    Aber nur dann wenn diese Einträge in der Tabelle nicht schon bestehen.

    Man könnte nun die ganze Tabelle in den Zugriff nehmen und
    mittels LOCATE den Wert suchen. Wenn Locate = false liefert
    dann würde der Eintrag mittels Append in die Tabelle eingefügt.

    Irgendwie habe ich aber das Gefühl, dass dies unter einem Netzwerk
    nicht die richtige Lösung ist. (langsam)

    Andererseits glaube ich, dass 1000x SELECT auch nicht unbedingt
    korrekt ist.

    Wie löst Ihr einen solchen Fall.

    Herzlichen Dank und Gruss zum voraus
    Roland

  • #2
    Hallo!
    Ich würde für Deinen Anwendungsfall eine Stored Procedure schreiben, der ich die einzelnen Datensätze von außen übergebe.
    In dieser Procedure würde ich dann mittels select prüfen, ob es den Datensatz schon gibt und ihn dann ggf. einfügen.
    Damit hast Du dann die notwendigen Prüfungen serverseitig gelöst un d sparst Dir den Netzwerktraffic.

    Wenn Du es Programmseitig lösen möchtest, solltest Du den Select-Weg wählen.
    Der SELECT überträgt nur passende Datensätze zwischen Server und Client.
    Beim Locate widerum werden alle Daten vom Server zum Client übertragen und der Client filtert dann. Das kann dann schon sehr gemütlich werden. Und je nach verwendetem Dataset und dessen Cachingfähigkeiten werden, wenn Du Pech hast, für jeden Locate wieder alle Daten geholt.

    Hoffe, es hilft Dir weiter

    Thomas

    Comment


    • #3
      Hallo

      erstmals.. herzlichen Dank.

      Anscheinend habe ich dann etwas falsch verstanden.

      Ich wollte eigentlich so vorgehen...

      1. SELCT ArtikelNr,ArtikelText FROM ARTIKEL
      WHERE ArtikelNr between 100 and 500;

      Tabelle fibArtikel mit SELECT-Befehl öffnen.


      2. fibArtikel.LOCATE('ArtikelNr', 200, [];


      Habe ich richtig verstanden, dass beim 2. Schritt nochmals
      die gesamte Datenbank "geholt" wird?

      Herzlichen Dank und Gruss zum voraus
      Roland

      Comment

      Working...
      X