AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism Ergebnis älterer Abfragen aus DataSet entfernen
Thema durchsuchen
Ansicht
Themen-Optionen

Ergebnis älterer Abfragen aus DataSet entfernen

Ein Thema von r_kerber · begonnen am 24. Jul 2004 · letzter Beitrag vom 26. Jul 2004
Antwort Antwort
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 24. Jul 2004, 18:06
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 ...
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 24. Jul 2004, 18:29
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...
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 24. Jul 2004, 19:42
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!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 26. Jul 2004, 12:08
Du könntest mit ...
  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 )
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....
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#5

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 26. Jul 2004, 18:39
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!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 26. Jul 2004, 18:55
Zitat von Robert_G:
Du könntest mit ...
  SomeDataTable.Clear(); ... die alten Ergebnisse aus der Tabelle bekommen.
AAABEEER...
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#7

Re: Ergebnis älterer Abfragen aus DataSet entfernen

  Alt 26. Jul 2004, 20:36
Wer lesen kann ist klar im Vorteil. Und den Code aus der Mailingliste mußte ich erst mal aus C# nach Delphi übersetzen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz