AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem Auslesen von MySQL und Ausgabe in ListViews
Thema durchsuchen
Ansicht
Themen-Optionen

Problem Auslesen von MySQL und Ausgabe in ListViews

Ein Thema von Vienesko · begonnen am 25. Aug 2017 · letzter Beitrag vom 28. Aug 2017
Antwort Antwort
Vienesko

Registriert seit: 21. Mai 2017
Ort: Hamburg
13 Beiträge
 
#1

Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 00:31
Datenbank: mySQL • Version: 5 • Zugriff über: MySQL Workbench
Moin moin,

ich habe ein Problem mit einer MySQL Datenbank in der Verbindung mit der Ausgabe in eine ListView.
Ich suche schon den ganzen Tag nach hilfreichen Threads im Internet aber mir fallen keine passenden Stichwörter ein. Deshalb versuche ich es jetzt mal so.

Kurze Erklärung was passieren soll: Ich habe eine Datenbankoberfläche programmiert, die diverse Editfelder, Buttons und auch 3 Listviews enthält. ListView1 enthält Artikel mit Preisen etc (Artikelstamm; Name: "barcodes"), ListView2 enthält einige, ausgewählte Einträge der 1. ListView (wie ein digitaler Kühlschrank; Name: "inhouse") und ListView 3 soll später ein Einkaufszettel werden, auf den man auch Einträge aus dem Artikelstamm hinzufügen kann usw (Name: "ekz"). Aber da bin ich noch nicht. Datenbanktechnisch ist das ganze über eine MySQL Datenbank mit derzeit 3 Tabellen gelöst.

So nun zu meinem Problem:
Bei Programmstart (später auch dynamischer) soll das Programm den Inhalt aller drei Tabellen in die jeweiligen ListViews schreiben. Mit der ListView1, also der Stammdatenbank, geht das auch wunderbar. Gibt mir alle Einträge aus. Sobald ich aber die Statements für ListView2 hinzufüge, schmeisst er mir mein Programm komplett durcheinander bis hin zur Startverweigerung. In mySQL kommen die Daten aber an. Es geht nur um Übertragen in die ListView.

Ich wette, es ist eigentlich ganz einfach aber manchmal verbeisst man sich da so und findet seinen Fehler nicht. Da wäre ich für eure Hilfe sehr dankbar. Hier die betreffenden Zeilen:

Delphi-Quellcode:
/bei Programmstart auslesen der Datenbank "barcodes"
SQLQuery1.SQL.Clear;
SQLQuery1.Params.Clear;
SQLQuery1.SQL.Text:= 'SELECT ID,Produktname,Hersteller,Inhalt,Lieferant,Preis,Barcode,Kommentar FROM barcodes';
SQLQuery1.Open;
//schreiben der Daten aus der Datenbak "barcodes" in die Listview
 while not SQLQuery1.Eof do
begin
 item:=mainFrm.ListView1.Items.Add;
 item.Caption:= SQLQuery1.FieldByName('ID').AsString;
 item.SubItems.Add(SQLQuery1.FieldByName('Produktname').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Hersteller').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Inhalt').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Lieferant').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Preis').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Barcode').AsString);
 item.SubItems.Add(SQLQuery1.FieldByName('Kommentar').AsString);
 SQLQuery1.Next;
 SQLQuery1.Close;
end;
 //bei Programmstart auslesen der Datenbank "inhouse"
SQLQuery2.SQL.Clear;
SQLQuery2.Params.Clear;
SQLQuery2.SQL.Text:= 'SELECT IDIH,ProduktnameIH,HerstellerIH,istIH,sollIH,MHDIH,BarcodeIH,KommentarIH FROM inhouse';
SQLQuery2.Open;
//schreiben der Daten aus der Datenbank "inhouse" in die Listview
while not SQLQuery2.Eof do
 item2:=mainFrm.ListView2.Items.Add;
 item2.Caption:= SQLQuery2.FieldByName('IDIH').AsString;
 item2.SubItems.Add(SQLQuery2.FieldByName('ProduktnameIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('HerstellerIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('istIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('sollIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('MHDIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('BarcodeIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('KommentarIH').AsString);
 SQLQuery2.Next;
 SQLQuery2.Close;
Ich bin noch ziemlicher Anfänger und bin daher für jeden konstruktiven Tipp dankbar. Ich vermute den Fehler in der Art wie ich den Query angehe.

Vielen Dank.
LG Vienesko
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#2

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 05:21
Hmm..


Delphi-Quellcode:
//schreiben der Daten aus der Datenbank "inhouse" in die Listview
while not SQLQuery2.Eof do
 item2:=mainFrm.ListView2.Items.Add;
 item2.Caption:= SQLQuery2.FieldByName('IDIH').AsString;
 item2.SubItems.Add(SQLQuery2.FieldByName('ProduktnameIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('HerstellerIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('istIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('sollIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('MHDIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('BarcodeIH').AsString);
 item2.SubItems.Add(SQLQuery2.FieldByName('KommentarIH').AsString);
 SQLQuery2.Next;
 SQLQuery2.Close;

Fehlt da nach while not SQLQuery2.Eof do nicht ein 'begin..end'
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.179 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 06:50
Ja, in der 2ten Schleife fehlt das begin/end + das SQLQuery.Close muss aus der Schleife raus:

while not SQLQuery1.Eof do
begin
item:=mainFrm.ListView1.Items.Add;
item.Caption:= SQLQuery1.FieldByName('ID').AsString;
item.SubItems.Add(SQLQuery1.FieldByName('Produktna me').AsString);
...
SQLQuery1.Next;
end;
SQLQuery1.Close;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 07:12
Außerdem würde ich mir eine Hilfsroutine schreiben (nennen wir sie DisplayData), der man ein TDataset und eine TListView-Instanz übergibt. Innerhalb dieser Routine werden dann zunächst alle Spalten und Zeilen der ListView gelöscht. Dann liest man die Feldnamen des Datasets aus und erzeugt daraus die Spalten neu. Anschließend geht man das Dataset durch und erzeugt wie gehabt je Datensatz eine neue Zeile und befüllt sie. Dadurch ist man flexibler und hat diese ganze Logik an zentraler Stelle.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 07:24
Und es wäre sinnvoll, vor dem Lesen der Daten die Listviews zu leeren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.179 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 07:39
Es wäre sinnvoll, den Zugriff auf die Daten (=SQL) vom UI (=ListView) zu trennen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 07:46
Das ist immer sinnvoll. Die Frage ist nur, wie weit man (gerade als Anfänger) dabei gehen will. Wenn ich seit 3 Wochen programmiere, werde ich mich durch Begriffe wie Dependency Injection eher abgeschreckt fühlen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.179 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 25. Aug 2017, 07:51
Das ist immer sinnvoll. Die Frage ist nur, wie weit man (gerade als Anfänger) dabei gehen will. Wenn ich seit 3 Wochen programmiere, werde ich mich durch Begriffe wie Dependency Injection eher abgeschreckt fühlen.
Das ist eine Sorge, die eigentlich nur Old School Programmierer haben. Wer neu beginnt, sollte solche Basics quasi schon mit der Muttermilch aufnehmen.
  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:02 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