![]() |
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:
greife ich dann auf das Abfrageergebnis zu und hole mir den Wert eines Tabellenfeldes.
cmdEinheiten.CommandText := 'SELECT * FROM einheiten WHERE ' +
'einheit_name = ''' + ddlEinheitVon.SelectedValue + ''''; daEinheiten.Fill (dsUmrechnungen1, 'einheiten'); s := dsUmrechnungen1.Tables['einheiten'].Rows. Item[0]['umrechnung'].ToString; 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: |
Re: Ergebnis älterer Abfragen aus DataSet entfernen
Ich würde es mal mit einer Query versuchen:
Delphi-Quellcode:
Aber vielleicht habe ich deine Frage auch nicht komplett verstanden...
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; |
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! |
Re: Ergebnis älterer Abfragen aus DataSet entfernen
Du könntest mit ...
Delphi-Quellcode:
... die alten Ergebnisse aus der Tabelle bekommen.
SomeDataTable.Clear();
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:
Edit: War doch ein Fehlerchen drin....
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; |
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:
Damit wird dann die alte Ergebnismenge gelöscht!
if ((dsUmrechnungen1.Tables <> NIL) AND
(dsUmrechnungen1.Tables.Contains('einheiten'))) THEN dsUmrechnungen1.Tables['einheiten'].Clear(); |
Re: Ergebnis älterer Abfragen aus DataSet entfernen
Zitat:
|
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