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()); } |
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()); } |
Änderungen sind ungeprüft, da ich gerade kein C# zur Verfügung habe.
Ivy - Mi 23.03.11 12:16
super danke geht ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!