AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Dataset immer wieder neu erstellen (create/free) oder ein mal bei Bedarf
Thema durchsuchen
Ansicht
Themen-Optionen

Dataset immer wieder neu erstellen (create/free) oder ein mal bei Bedarf

Ein Thema von norwegen60 · begonnen am 12. Feb 2016 · letzter Beitrag vom 12. Feb 2016
 
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
509 Beiträge
 
Delphi 12 Athens
 
#1

Dataset immer wieder neu erstellen (create/free) oder ein mal bei Bedarf

  Alt 12. Feb 2016, 11:33
Datenbank: MsSQL • Version: 2008 R2 • Zugriff über: ADO
Hallo zusammen,

bei uns in der Firma gibt es gerade Diskussionen um zwei verschiedene Philosophien, wie auf Daten zugegriffen werden kann.

Philosophie 1:
In einem Datenmodul wird fix ein TAdoDataset platziert, das bei ersten Gebrauch geöffnet wird und danach über ähnliche Schnittstellen wie unten angesprochen wird


Philosophie 2:
Das Dataset wird bei jedem Bedarf erstellt, die gesuchten Daten an ein fDataset übergeben und das Dataset danach wieder freigegeben.
Delphi-Quellcode:
 TBaseDataObject = Class
  Private

    /// <summary>
    /// backing field number list, will be filled each time data is loaded
    /// </summary>
    fNumberList: TIntegerList;

    /// <summary>
    /// backing field for where conditions to get data
    /// </summary>
    fWhereConditions: TStringList;

    /// <summary>
    /// backing field for order statements to get data
    /// </summary>
    fOrderStaments: TStringList;

    /// <summary>
    /// backing field for dataset for binding in grids
    /// </summary>
    fDataSet: TCustomClientDataSet;

....

Function TBaseDataObject.GetDataSet: TADODataSet;
Var
  lRealDataSet: TADODataSet;
Begin
  lRealDataSet := TADODataSet.Create(Nil);
  lRealDataSet.Connection := GetConnection();
  lRealDataSet.BeforeOpen := TDataTableOpenEvents.DataTableBeforeOpen;
  Result := lRealDataSet;
End;

// -----------------------------------------------------------------------------
Procedure TBaseDataObject.Refresh;
Var
  lRealDataSet: TADODataSet;
  li: Integer;
  workingOnLocalDatabase: String;
Begin
  fDataSet.DisableControls; // avoiding flicker

  lRealDataSet := GetDataSet;


  lRealDataSet.CommandText := getSelectStatement;
  fDataSet.EmptyDataSet;
  fNumberList.Clear;

  Try
    lRealDataSet.Open;
    If lRealDataSet.RecordCount > 0 Then
    Begin
      lRealDataSet.First;
      Repeat
        fDataSet.Append;
        fNumberList.Add(StrToIntDef(lRealDataSet.FieldByName(fPkName).Value, -1));

        for li:=0 to pred(lRealDataSet.FieldCount) do { Alle Felder kopieren }
        begin
          fDataSet.FieldByName(lRealDataSet.Fields[li].FieldName).Value := lRealDataSet.Fields[li].Value;
        end;

        fDataSet.Post;
        lRealDataSet.Next;
      Until (lRealDataSet.Eof);
    End
    Else
      Logger.Debug('TBaseDataObject.Refresh', 'No data for table %s [%s]', [fTableName, getSelectStatement]);
  Except
    On E: Exception Do
      Logger.Fatal('TBaseDataObject.Refresh', 'Could not get field definitions for table %s, Field %S Exeption: %s', [fTableName, lRealDataSet.Fields[li].FieldName, E.Message]);
  End;
  fDataSet.First;
  DataBase.FreeDataSet(lRealDataSet);
  fActive := true;
  fDataSet.EnableControls;
End;
Der Unterschied könnte auch darauf reduziert werden, dass das Dataset in einem Fall einmal geöffnet wird und dann immer wieder verwendet wird und im anderen Fall jedes mal befreit und wieder neu erstellt wird.

Welche Auswirkungen hat die dauernde Neuerstellung auf Laufzeit und Netzbelastung?
Was spricht aus eurer Sicht für / gegen die eine oder andere Methode?

Wäre froh um ein paar unabhängige Meinungen

Danke
Gerd
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz