Announcement

Collapse
No announcement yet.

anzahl Datensätze beschränken

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

  • anzahl Datensätze beschränken

    Ich habe ein kleines Adressprogramm geschrieben.
    Beim Laden der Datensätze werden mir alle 15000 Sätze geladen, dies dauert etwas lange.
    Ich benutze eine Oracle datenbank und den oledbadapter.

    Gibt es eine Möglichkeit die Daten beim einlesen zu fetchen?

    oder

    Gibt es eine Möglichkeit erst nur 100 Sätze zu lesen und über einen Button die nächsten 100 Sätze lesen?

  • #2
    Eine Möglichkeit wäre SQL mit dem Parameter TOP 100 (MSSQL Syntax.)<p>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo,

      die DataAdapter-Methode <b>Fill</b> darf in der überladenen Fassung auch mit den Parametern <b>StartRecord</b> und <b>MaxRecord</b> aufgerufen werden, um ein Paging zu aktivieren. Allerdings ist das nur die 2. Wahl, da der SQL Server bei jedem Aufruf immer die vollständige Ergebnismenge aufbauen muss. Daher ist es besser, die Ergebnismenge gleich über die SELECT-Abfrage einzuschränken.
      <code>
      aAdp.Fill(aDS, iStartRecord, iPageSize, "Orders");
      </code>
      &#10

      Comment


      • #4
        Danke Herr Kosch, hat mir erstmal weitergeholfen.

        Jetzt habe ich aber noch das Problem, dass ich beim Einfügen eines neuen Datensatzes nicht auf diesen Datensatz komme.

        Beispiel:

        1. Ich stehe auf Datensatz 3 von 100.
        2. Ich sage neuen Datensatz einfügen.

        private void Add()
        {
        try
        {
        // Aktuelle Bearbeitungen löschen
        this.BindingContext[objDataset,"ADRESSE"].EndCurrentEdit();
        this.BindingContext[objDataset,"ADRESSE"].AddNew();
        }
        catch (System.Exception eEndEdit)
        {
        System.Windows.Forms.MessageBox.Show(eEndEdit.Mess age);
        }
        this.objDataset_PositionChanged();
        }

        3. Meine Datensatz anzeige zeigt mir an: Datensatz 3 von 101.
        4. Ich stehe jetzt immer noch auf dem 3.Datensatz. Wie komme ich auf den eingefügten Datensatz?
        Auch wenn ich nach hinten springe komme ich nur auf den Datennsatz 100. Anzeige Datensatz 100 von 101.

        private void NavLast()
        {
        this.BindingContext[objDataset,"ADRESSE"].Position = (this.objDataset.Tables["ADRESSE"].Rows.Count - 1);
        this.objDataset_PositionChanged();

        Comment


        • #5
          Hallo,
          das folgende Beispiel verhält sich so wie gewünscht.
          <br>
          A) Datenbank tempdb
          <code>
          USE tempdb
          GO
          CREATE TABLE TestTbl
          (
          recid INTEGER NOT NULL IDENTITY PRIMARY KEY,
          wert NVARCHAR(9) NOT NULL
          )
          GO
          INSERT INTO TestTbl (wert) VALUES ('Test1')
          INSERT INTO TestTbl (wert) VALUES ('Test2')
          INSERT INTO TestTbl (wert) VALUES ('Test3')
          GO
          </code>
          b) Windows Forms-Anwendung
          <br>
          Legt ein typisiertes DataSet an, das DataGrid wird über die <b>DataView</b>-Komponente an das DataSet gebunden. Wenn der 2. Button angeklickt wird, ist im DataGrid sofort der zuletzt hinzugefügte Datensatz ausgewählt (das DataGrid scrollt dabei bei Bedarf nach hinten):
          <code>
          private CurrencyManager aCM;
          <br>
          private void button1_Click_1(object sender, System.EventArgs e)
          {
          sqlDataAdapter1.Fill(dataSet12, dataSet12.TestTbl.TableName);
          aCM = (CurrencyManager)this.BindingContext[dataView1];
          statusBar1.Text = aCM.Count.ToString();
          }
          <br>
          private void button2_Click(object sender, System.EventArgs e)
          {
          dataSet12.TestTbl.AddTestTblRow("Neu");
          statusBar1.Text = aCM.Count.ToString();
          aCM.Position = aCM.Count - 1;
          }
          <br>
          private void button3_Click(object sender, System.EventArgs e)
          {
          DataRowView aDRV = dataView1.AddNew();
          aDRV["wert"] = "NeuX";
          aDRV.EndEdit();
          statusBar1.Text = aCM.Count.ToString();
          aCM.Position = aCM.Count - 1;
          }
          </code>
          Die Methode <b>AddNew</b> des <i>CurrencyManagers</i> sollte im eigenen Programm nicht verwendet werden (auch wenn das bei den kurzen Demos immer schön bequem ist). In der Hilfedatei des .NET-Frameworks liest sich das so: "<i>You typically use this property only if you are creating your own control incorporating the CurrencyManager. Otherwise, to add items, if the data source is a DataView, use the AddNew method of the DataView</i>".
          <br>
          Es ist daher besser, einen der beiden anderen Weg zu verwenden: <br>
          a) Typisiertes DataSet mit der automatisch generierten Addxyz-Methode <br>
          b) DataView-Methode AddNew

          Comment


          • #6
            Danke funktioniert

            Comment

            Working...
            X