![]() |
Datenbank: Firebird • Version: 2.1.3 • Zugriff über: Firebird .NET Provider
Daten aus einer Select-Anweisung auslesen ohne DataGrid
Hallo zusammen,
ich versuche mich mal wieder in Delphi Prism. Dank ![]() 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; |
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
Zitat:
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:
PS: da nur gelesen wird, werden keine Transactions gebraucht.
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'] <> 'deleted' then summe := summe + Query1.FieldByName('Preis').AsFloat; Query1.Next; end; Query1.Close; |
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
Zitat:
Zitat:
|
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
Hi,
ich nutze zwar nicht Prism, aber vielleicht nützt es ja was. Zum Füllen eines ListView nuttze ich den DataReader.
Code:
Ist leider nur C# VS, aber vielleicht hilft es.
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(); Frank |
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
Zitat:
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; |
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
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:
würde es mich überraschen, wenn da Daten zu mir geliefert werden.
cmd.ExecuteNonQuery
Übersetzt heisst das ja "Ausführen aber nicht Daten holen" |
AW: Daten aus einer Select-Anweisung auslesen ohne DataGrid
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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-2025 by Thomas Breitkreuz