Autor Beitrag
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mi 23.03.11 10:26 
Hey,
ich habe eine Spalte in meiner DBF datei in der sich 3 verschiedene werte befinden können (PASS,FAIL,BREAK). Nun möchte ich eine funktion haben die mit die anzahl der jeweiligen werte herausgibt. Also pass 5mal vorhanden, Fail 3mal usw....
wie kann ich das realisieren?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 23.03.11 10:41 
ausblenden SQL-Anweisung
1:
2:
3:
select spalte, count(spalte)
from Tabelle
group by spalte
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mi 23.03.11 10:46 
ja auf die idee bin ich auch schon gekommen. gibt es keine möglchkeit das ohne sql zu lösen mit irgendeiner schleife oder so??
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 23.03.11 10:59 
Natürlich, aber das ist normalerweise zu unflexibel, meistens nicht performant und zu aufwändig.

Du definierst dir 3 Variablen, die als Zähler für deine 3 Möglichkeiten zur Verfügung stehen.
Dann schaust du bei jedem Datensatz nach, welchen Inhalt deine Spalte hat.
Abhängig vom Inhalt erhöhst du dann den Wert der entsprechenden Variablen.

Probleme:
1. Was machst du, wenn das Feld einen anderen Wert bekommen kann (z.B. durch Änderung der Anwendung)?
- Noch ein Zähler, eine weitere Bedingung abfragen.
-> Also muss dein Programm wieder geändert werden.
2. Du musst immer die gesamte Tabelle durchlesen. Bei 100 Datensätzen nicht so schlimm. Aber irgendwann dauert das zu lange.

Du kannst natürlich dein Programm vorher so flexibel gestalten, dass es eine beliebige Anzahl an möglichen Variationen berücksichtig. Aber was musst du dafür am Anfang machen? Eine Abfrage, wieviele verschiedene Variationen gibt es. Und das ist schon wieder fast identisch mit der SQL-Abfrage. (Ist sicher nicht die einzige Lösungsmöglichkeit)

Fazit:
Das SQL-Statement ist meiner Meinung nach die einzig sinnvolle Lösung.
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mi 23.03.11 11:07 
hmm ich finde es mit dem sql halt ein wenig umständlich, weil ich hab jetzt mal meinen code hier:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 string queryString = "SELECT DISTINCT COUNT(Testresult) FROM D:\\Projekte\\PASSFAIL.DBF WHERE Testresult= 'PASS'";
        OdbcCommand command = new OdbcCommand(queryString, oConn);
        command.Connection = oConn;
        oConn.Open();
        cmbTestresult.Items.Clear();
        OdbcDataReader reader = command.ExecuteReader();
        cmbTestmode.DataSource = dt;
        while (reader.Read())
        {
            chart1.Series[0].Points.AddXY("Pass", reader.GetValue(0).ToString());//eintragen des ergebnises in das chart
        }


so jetzt müsst ich für alle drei das ja wiederholen und das sql statement neu deifinieren, damit ich alle 3 werte bekomme....
bisschen komisch finde ich^^
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 23.03.11 11:58 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
string queryString = "SELECT Testresult, COUNT(Testresult) FROM D:\\Projekte\\PASSFAIL.DBF group by Testresult";
        OdbcCommand command = new OdbcCommand(queryString, oConn);
        command.Connection = oConn;
        oConn.Open();
        cmbTestresult.Items.Clear();
        OdbcDataReader reader = command.ExecuteReader();
        cmbTestmode.DataSource = dt;
        while (reader.Read())
        {
            chart1.Series[0].Points.AddXY(reader.GetValue(0).ToString, reader.GetValue(1).ToString());//eintragen des ergebnises in das chart
        }


Änderungen sind ungeprüft, da ich gerade kein C# zur Verfügung habe.
Ivy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mi 23.03.11 12:16 
super danke geht ;)