Announcement

Collapse
No announcement yet.

Cursor positionieren in der Datenmenge

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

  • Cursor positionieren in der Datenmenge

    Hallo,

    ich versuche seit kurzem mein Datenbank-Projekt auf Interbase umzustellen.
    Aus Performance-Gründen möchte ich so viel wie möglich mit StoredProcedures arbeiten.
    Jetzt bin ich bei einem Problem angekommen, für das ich hier im Forum noch keine Idee gefunden habe:

    Ich habe mir mit einer StoredProcedure Daten in IBDataSet selektiert und diese in einem DBGrid dargestellt.
    Jetzt möchte ich in den Cursor auf einen bestimmten Datensatz positionieren ohne die anderen Datensätze in dem DBGrid zu verlieren.
    Später möchte ich dann diesen Datensatz eventuell einzeln selektieren, wie das geht ist mir klar. Aber der Zwischenschritt: nur den Cursor auf den einen Datensatz stellen, da fehlt mir jegliche Idee.

    Wer hat eine Idee für mich? Vielen dank im voraus.

    Ralf

  • #2
    Hallo,

    mit welcher Delphi-Version wird gearbeitet? Wenn Delphi 6 zur Verfügung steht, würde ich die Daten im TDBGrid über <b>TIBClientDataSet</b> darstellen. Das hat den Vorteil, dass alle Datensätze sofort beim Öffnen zum Client kopiert und dort nur im Arbeitsspeicher vorgehalten werden. Der InterBase kann seine Ergebnismenge sofort wieder verwerfen. Hat man nun eine bestimmte Zeile im TDBGrid zur Bearbeitung ausgewählt, so kann man diesen Datensatz gezielt über den Primärschlüssel mit den aktuellsten Daten aus der Datenbank nachladen (TIBDataSet) und zur Bearbeitung anzeigen (dazu würde ich nicht das TDBGrid nehmen, sondern auf normale TDBEdits zurückgreifen). Mit diesem Prinzip kann man am elegantesten die von datenzeigerorientierten ISAM-Datenbanken her gewohnte Arbeitsweise auf die mengenorientierten SQL-Datenbanken umstellen. Eine 1:1-Umstellung ist nicht sinnvoll, da SQL-Datenbanken intern nach einem ganz anderen Prinzip arbeiten als dBASE, Paradox oder ACCESS

    Comment


    • #3
      Hallo Herr Kosch,

      leider steht mir zur Zeit nur Delphi 5 Professional zur Verfügung.

      Gibt es dafür auch eine Lösung?

      Ral

      Comment


      • #4
        Hallo,

        in diesem Fall würde ich auf die permanente Übersichtdarstellung im TDBGrid verzichten und dieses nur kurzzeitig für die Auswahl des zu bearbeitenden Datensatzes öffnen: <br>
        1. Auswahl-Formular mit TDBGrid erzeugen, TIBDataSet öffnen.<br>
        2. Benutzer wählt einen Datensatz aus, Transaktion wird über Commit bestätigt (IBX schliesst daraufhin automatisch TIBDataSet)<br>
        3. Auswahl-Formular schliessen und zerstören <br>
        4. Im Hauptfenster den ausgewählten Datensatz über seinen Primärschlüssel einzeln über eine 2. TIBDataSet-Instanz nachladen.

        Wenn man dieses Prinzip verfolgt, stehen dem Anwender im Schritt 1 immer aktuelle Daten (neue Transaktion, neue SELECT-Abfrage) zur Verfügung, ohne dass der InterBase gestresst wird. Auch während der Bearbeitung des ausgewählten Datensatzes wird immer nur mit einem einzigen Datensatz gearbeitet.

        Wenn im Programm mehrere Datenmengen unabhängig voneinander aktiv sein müssen, würde ich jeweils separate TIBTransaction-Instanzen vorsehen (damit ein Commit bei einer Datenmenge nicht automatisch alle anderen mit schliesst)

        Comment

        Working...
        X