AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism Daten aus einer Select-Anweisung auslesen ohne DataGrid
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus einer Select-Anweisung auslesen ohne DataGrid

Ein Thema von RWarnecke · begonnen am 13. Feb 2011 · letzter Beitrag vom 14. Feb 2011
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 09:05
Datenbank: Firebird • Version: 2.1.3 • Zugriff über: Firebird .NET Provider
Hallo zusammen,

ich versuche mich mal wieder in Delphi Prism. Dank euch habe ich ja schon das Schreiben in eine Datenbank hinbekommen. Nur leider habe ich keinen blassen schimmer, wie ich die Daten wieder aus der Datenbank lese. Wirklich viel habe ich über Google nicht gefunden. Vielleicht habe ich auch nicht die richtigen Suchwörter eingegeben. Deshalb wäre es nett, wenn Ihr mir erklären könnt, wie ich die Daten eines SELECT-Befehls auslese und in eine ganz normale ListView schreibe. Ich möchte keine Datenbank-Komponenten (DBGrid oder ähnliches) verwenden.

Hier mein Anfang, beim Kommentar komme ich nicht weiter.
Delphi-Quellcode:
method MainForm.button2_Click(sender: System.Object; e: System.EventArgs);
var
  cmd: FbCommand;
  conn: FbConnection;
begin
  conn := new FbConnection('User ID=sysdba;Password=masterkey;' +
              'Database=111.111.111.111:/firebird/testdb.fdb; ' +
              'DataSource=111.111.111.111;Charset=NONE;');
  var SQLCommandText1 := "SELECT * FROM Details;";
  conn.Open();
  var trans := conn.BeginTransaction();
  cmd := new FbCommand(SQLCommandText1, conn, trans);
  cmd.ExecuteNonQuery();
  // Eine ListView mit den Daten befüllen
  trans.Commit();
  conn.Close();
end;
Rolf Warnecke
App4Mission

Geändert von RWarnecke (13. Feb 2011 um 09:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 09:45
Ich möchte keine Datenbank-Komponenten (DBGrid oder ähnliches) verwenden
Du meinst du willst keine Datenbank-Controls verwenden.
Ich denke, als Delphi Programmierer sollte man hier etwas präziser sein.
Aber jetzt zur eigentlichen Frage.
Um Daten aus einer Datenbank zu lesen muss man eine Abfrage ausführen.
Query-Komponenten sind von TDataset abgeleitet und erben daher dessen Methoden und Properties.
In folgendem Beispiel werden zwei Wege gezeigt, um auf die Inhalte der Felder zuzugreifen.
Der Weg über .FieldByName().AsXXXX ist zwar aufwändiger zu schreiben, aber gerade beim
Lesen häufig nötig um die Exception "ungültige Variantumwandlung" zu vermeiden.
(denn Felder können auch "NULL" enthalten)
Delphi-Quellcode:
var
  summe : double;
begin
  // eine Query öffnen und mit einer Schleife die Werte im Feld "Preis" aufsummieren
  Query1.SQL.Text := 'SELECT * FROM Details';
  Query1.Open; // entspricht .Active := True;
  while not Query1.Eof do
  begin
    if Query1['Kategorie'] <> 'deletedthen
      summe := summe + Query1.FieldByName('Preis').AsFloat;
    Query1.Next;
  end;
  Query1.Close;
PS: da nur gelesen wird, werden keine Transactions gebraucht.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 10:01
Ich möchte keine Datenbank-Komponenten (DBGrid oder ähnliches) verwenden
Du meinst du willst keine Datenbank-Controls verwenden.
Ich denke, als Delphi Programmierer sollte man hier etwas präziser sein.
Ja, Du hast recht. Hätte ich anders schreiben sollen.

Aber jetzt zur eigentlichen Frage.
Um Daten aus einer Datenbank zu lesen muss man eine Abfrage ausführen.
Query-Komponenten sind von TDataset abgeleitet und erben daher dessen Methoden und Properties.
In folgendem Beispiel werden zwei Wege gezeigt, um auf die Inhalte der Felder zuzugreifen.
Der Weg über .FieldByName().AsXXXX ist zwar aufwändiger zu schreiben, aber gerade beim
Lesen häufig nötig um die Exception "ungültige Variantumwandlung" zu vermeiden.
(denn Felder können auch "NULL" enthalten)
Delphi-Quellcode:
var
  summe : double;
begin
  // eine Query öffnen und mit einer Schleife die Werte im Feld "Preis" aufsummieren
  Query1.SQL.Text := 'SELECT * FROM Details';
  Query1.Open; // entspricht .Active := True;
  while not Query1.Eof do
  begin
    if Query1['Kategorie'] <> 'deletedthen
      summe := summe + Query1.FieldByName('Preis').AsFloat;
    Query1.Next;
  end;
  Query1.Close;
PS: da nur gelesen wird, werden keine Transactions gebraucht.
Diesen Teil kenne ich und habe Ihn schon x-mal angewendet. Ich will das ganze aber unter Delphi Prism machen und nicht unter Delphi.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 10:55
Hi,

ich nutze zwar nicht Prism, aber vielleicht nützt es ja was.

Zum Füllen eines ListView nuttze ich den DataReader.

Code:
con.Open();
FbCommand cmd = new FbCommand("select * from stat$waage where datum between '01.10.2010' and '30.10.2010'", con);
FbDataReader dr = cmd.ExecuteReader();
string str;
ListViewData.BeginUpdate();
    while (dr.Read())
    {
        str = dr["Nummer"].ToString();
        ListViewData.Items.Add(str);
    }
ListViewData.EndUpdate();
dr.Close();
Ist leider nur C# VS, aber vielleicht hilft es.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 11:10
Ich will das ganze aber unter Delphi Prism machen
Ups.
Unter .NET gibt es ebenfalls ein Dataset, das aber über einen DataAdapter gefüllt werden muss.
Also so ganz grob müsste das so aussehen:
Delphi-Quellcode:
var
 adapter:FbDataAdapter;
 DetailDS:DataSet;
 aRow : DataRow;
 connection : ..
begin
  adapter := new FbDataAdapter('SELECT * FROM Details', connection);
  DataSet DetailDS := new DataSet();

  adapter.Fill(DetailDS, 'Details');

  foreach aRow in DetailDS.Tables['Details'].Rows do
  begin
    ShowMessage(aRow['EinFeld']);
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 13. Feb 2011, 11:11
Ich bin zwar kein Prism Experte, aber wenn ich Daten via SQL haben möchte (also ein Query) und dann einen solchen Befehl eintippe
Code:
cmd.ExecuteNonQuery
würde es mich überraschen, wenn da Daten zu mir geliefert werden.

Übersetzt heisst das ja "Ausführen aber nicht Daten holen"
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid

  Alt 14. Feb 2011, 07:18
Hallo zusammen,

danke erstmal für eure Antworten. Dank dem kleinen Beispiel von DataSpider habe ich es jetzt hinbekommen. Das Schlüsselwort war ExecuteReader.

Delphi-Quellcode:
method MainForm.button2_Click(sender: System.Object; e: System.EventArgs);
var
  cmd: FbCommand;
  conn: FbConnection;
  dr: FbDataReader;
begin
  conn := new FbConnection('User ID=sysdba;Password=masterkey!;' +
              'Database=111.111.111.111:/firebird/testdb.fdb; ' +
              'DataSource=111.111.111.111;Charset=NONE;');
  var SQLCommandText1 := "SELECT * FROM Details;";
  conn.Open();
  cmd := new FbCommand(SQLCommandText1, conn);
  dr := cmd.ExecuteReader();
  ListBox1.BeginUpdate();
  while (dr.Read()) do begin
    ListBox1.Items.Add(dr[0].ToString + ' - ' + dr[1].ToString + ' - ' + dr[2].ToString);
  end;
  ListBox1.EndUpdate();
  conn.Close();
end;
Rolf Warnecke
App4Mission
  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 09:45 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