Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Ergebnis älterer Abfragen aus DataSet entfernen (https://www.delphipraxis.net/26525-ergebnis-aelterer-abfragen-aus-dataset-entfernen.html)

r_kerber 24. Jul 2004 19:06


Ergebnis älterer Abfragen aus DataSet entfernen
 
Hallo allerseits,

ich habe folgendes Problem. Für einen Datenbankzugriff (MySQL via ODBC.net) verwende ich eine Connection, ein Command und einen DataAdapter. In der Connection lege ich fest, wo die Datenbank ist, in dem Command defieniere ich eine SQL-Abfrage und der DataAdapter verbindet das Ganze mit der DataSet. Durch folgenden Code
Delphi-Quellcode:
    cmdEinheiten.CommandText := 'SELECT * FROM einheiten WHERE ' +
      'einheit_name = ''' +  ddlEinheitVon.SelectedValue + '''';
    daEinheiten.Fill (dsUmrechnungen1, 'einheiten');
    s := dsUmrechnungen1.Tables['einheiten'].Rows.
      Item[0]['umrechnung'].ToString;
greife ich dann auf das Abfrageergebnis zu und hole mir den Wert eines Tabellenfeldes.
Nun modifiziere ich die Select-Anweisung, um einen weiteren Wert zu erhalten. Im DataSet wird nun der neu gefundene Datensatz angefügt. Das Ergebnis der vorherigen Abfrage bleibt bestehen. Ich habe bis jetzt keine Möglichkeit gefunden, das Ergebnis der vorherigen Anfrage zu entfernen und nur die aktuelle Datenmenge zur Verfügung zu stellen. Weiß jemand wie, das geht.
BTW: Kann sein, dass ich auch auf dem Holzweg bin, und ich eigentlich anders an meine Wunschdaten herankomme ... :wall: :duck:

bttb930 24. Jul 2004 19:29

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Ich würde es mal mit einer Query versuchen:

Delphi-Quellcode:
with qEinheiten do
begin
  SQL.Clear;
  SQL.Add('SELECT * FROM einheiten WHERE ' +
    'einheit_name = :einheit_name');
  Parameters.ParamByName('einheit_name').Value := ddlEinheitVon.SelectedValue;
  Open;
  First;
  ...

//  daEinheiten.Fill (dsUmrechnungen1, 'einheiten');
//  s := dsUmrechnungen1.Tables['einheiten'].Rows.
//    Item[0]['umrechnung'].ToString;
Aber vielleicht habe ich deine Frage auch nicht komplett verstanden...

r_kerber 24. Jul 2004 20:42

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Hallo bttb930,

Du hast aber gesehen, dass wir bei .net sind, oder! Und die VCL will ich möglichst nicht verwenden. Bei der Anwendung handelt es im übrigen um einen ASP.Net-Webservice!

Robert_G 26. Jul 2004 13:08

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Du könntest mit ...
Delphi-Quellcode:
  SomeDataTable.Clear();
... die alten Ergebnisse aus der Tabelle bekommen.
AAABEEER...

Warum ein ganzes DataSet wenn du nur einen Wert haben willst?
Für solche Fälle gibt es die ExecuteScalar Methode des Providers deines Vertrauens. ;)



Edit: Ich habe jetzt noch ein wenig Mittagspause geopftert, um es zu D8 zu übersetzen (Sollte IMHO so passen :roll: )
Delphi-Quellcode:
function getUmrechnung( pConnection :OracleConnection; pName :string ) :string;
var
   bldSelText     :System.Text.StringBuilder;
   cmdSelEinheiten :OracleCommand;
   i_Name         :OracleParameter;
begin
  {$region 'Build Select Command'}

  bldSelText := System.Text.StringBuilder.Create();
  bldSelText.Append('SELECT Umrechnung'#10);
  bldSelText.Append('FROM  Einheiten'#10);
  bldSelText.Append('WHERE Einheit_Name = :i_Name');

  cmdSelEinheiten := OracleCommand.Create(bldSelText.ToString()
                                         ,pConnection);

  i_Name := cmdSelEinheiten.Parameters.Add('i_Name'
                                          ,OracleType.VarChar
                                          ,255);

  {$endregion}

  i_Name.Value := pName;
  try
    result := cmdSelEinheiten.ExecuteScalar().ToString();
  except on System.NullReferenceException Do
    result := System.String.Empty;
  end;
end;
Edit: War doch ein Fehlerchen drin....

r_kerber 26. Jul 2004 19:39

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Hallo Robert,

danke für den Tip. Funktioniert im Prinzip. Allerdings ist die Arbeit mit Parametern bei OdbcCommand anders als bei Oracle (keine named Parameter). Und da ich diese ODBC-Parameter noch nicht ganz geschnallt habe, habe ich's erst mal ohne gemacht.
Paralell dazu habe ich in einer Mailing-Liste zu .net folgenden Tip erhalten:
Delphi-Quellcode:
    if ((dsUmrechnungen1.Tables <> NIL) AND
       (dsUmrechnungen1.Tables.Contains('einheiten')))
       THEN dsUmrechnungen1.Tables['einheiten'].Clear();
Damit wird dann die alte Ergebnismenge gelöscht!

Robert_G 26. Jul 2004 19:55

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Zitat:

Zitat von Robert_G
Du könntest mit ...
Delphi-Quellcode:
  SomeDataTable.Clear();
... die alten Ergebnisse aus der Tabelle bekommen.
AAABEEER...

:P

r_kerber 26. Jul 2004 21:36

Re: Ergebnis älterer Abfragen aus DataSet entfernen
 
Wer lesen kann ist klar im Vorteil. :oops: Und den Code aus der Mailingliste mußte ich erst mal aus C# nach Delphi übersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 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