Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Zählen von Daten aus DBF Datei


Ivy - Mi 23.03.11 10:26
Titel: Zählen von Daten aus DBF Datei
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 - Mi 23.03.11 10:41


SQL-Anweisung
1:
2:
3:
select spalte, count(spalte)
from Tabelle
group by spalte


Ivy - 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 - 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 - 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:


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 - Mi 23.03.11 11:58


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 - Mi 23.03.11 12:16

super danke geht ;)