Mehrere DataTables füllen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Befree.

    Mehrere DataTables füllen

    Hallo @all,

    ich bin neu hier im Forum angemeldet allerdings schaue ich schon seit einiger Zeit regelmäßig vorbei und mir wurden schon einige Fragen durch euch beantwortet. Dafür schon einmal Danke! Das Forum hier ist Super..

    Hier mein kleines Problem:

    Ich habe auf meiner MSSQL 2005 Datenbank zwei Tabellen für Messungen die ich Dokumentieren muss. Die Tabell Header und die Tabelle Messwerte. Header beinhaltet die Messungsdetails (ID, Prüfdatum, Prüfer, Untergrenze, Obergrenze, Einheit...) die Tabelle Messungen enthält dann die einzelnen Messwerte (ID, ID_Messung, Nr, Messwert). Verknüpft sind die Tabellen über Header.ID = Messwerte.ID_Messung.

    1. Über einen View (GetHeader) möchte ich nur Header Datensätze die auch Messungen verknüpft haben zurückbekommen um sie in einem Datagridview anzuzeigen, dazu habe ich folgende Abfrage erstellt

    SQL-Abfrage

    1. SELECT Header.ID, Header.Prüfdatum, Header.Prüfer, Header.UG, Header.OG, Header.Prüfmerkmal, Header.Messeinheit, Header.Bemerkung
    2. FROM Header INNER JOIN
    3. Messwerte ON Header.ID = Messwerte.ID_Messung
    4. GROUP BY Header.ID, Header.Prüfdatum, Header.Prüfer, Header.UG, Header.OG, Header.Prüfmerkmal, Header.Messeinheit, Header.Bemerkung
    5. ORDER BY Header.Auftrag


    Es funktioniert zwar (auch wenn SQL Management Studio einen rießigen Text daraus macht), aber ich bin mir nicht sicher ob das auch der richtige weg ist oder ob es besser/schöner/schneller geht. Ich zweifel auch daran das es gut ist alle Messwert Datensätze durchzuackern (Das werden mit der Zeit einfach zu viele denke ich, da pro header mindestens 10 Messwerte vorhanden sind)

    2. Das Ergebnis der Abfrage sieht dann in etwa so aus:

    115091 | 06.02.2013 11:28:39 | Befree | 2,92 | 3,12 | Höhe | mm | test123

    115093 | 06.02.2013 13:15:30 | Befree | 2,95 | 3,18 | Höhe | mm | test543

    115094 | 06.02.2013 14:27:37 | Befree | 3,12 | 7,50 | Gewicht | kg | Blablatest

    Diese Ansicht hab ich in meinem Datagridview.. alles wunderbar. Jetzt möchte ich dies aber auch Filtern können, dazu möchte ich wissen welche Prüfmerkmale und welche Einheiten in der Abfrage (Also im dadagridview bzw im DataTable) vorhanden sind um diese in VB in comboboxen eintragen zu können. Also in diesem Fall Prüfmerkmal = Höhe, Gewicht und Einheiten = mm, kg. Bis jetzt mache ich das über zwei weitere Views.

    SQL-Abfrage

    1. SELECT Prüfmerkmal
    2. FROM GetHeader
    3. GROUP BY Prüfmerkmal
    und

    SQL-Abfrage

    1. SELECT Messeinheit
    2. FROM GetHeader
    3. GROUP BY Messeinheit


    In VB frage ich also alle 3 Views nacheinander ab - 3x "Select * From View Where XY".. was auch funktioniert

    Natürlich könnte ich in VB das DataTable durchlaufen und mir ermitteln was darin vorkommt aber da früher oder später nicht nur 3 Ergebnisse kommen denke ich das die Lösung zu langsam wäre. Aber ich bin mir auch nicht sicher ob das so gut ist wenn ich den View 3 mal hintereinander über VB abfrage da die Abrage des GetHeaders ja alle Messwerte durchackern muss.

    Gibt es nicht eine möglichkeit diese 3 Views irgendwie in eine Stored Procedure zu verpacken oder ähnliches...? Irgendetwas mit dem ich mit einer Abfrage alles erschlage. Kann eine Stored Procedure nicht ganze Tables bzw Views zurückgeben sodas ich mit einer Abfrage 3 Tables zurückbekomme?

    Ich steh hier ein wenig auf dem Schlauch wie man das am besten angeht.



    Ich hoffe man kann mit meinen Beschreibungen was anfangen :)



    Greez
    Also ich mache es im Prinzip so wie du.
    Ich bastel mir meine Abfrage über mehrere Tabellen im Designer zusammen und gebe das Ergebnis je nach dem in einem DGV aus.

    Weitere Filterung nehme ich über die Bindingsource vor.

    ErfinderDesRades hat hierzu ein paar sehr nützliche Tutorials im Forum verfasst die du dir unbedingt mal anschauen solltest!
    Gruß von der KSE

    ks-entwicklung.de
    Generell würde ich empfehlen:
    Hol dir die Daten in ein ein DataSet. Mein Vorredner hat ja schon auf die Tuts vom EdR hingewiesen. Definiere im DataSet die 1:n Beziehung zwischen den beiden Tabellen.
    Zieh dir die Header-Daten vom DataSet in die Form und zwar nicht die Ursprungs-Headertabelle, sondern die findest du auch als Unterknoten der Messwertetabelle im Datenquellenfenster. Dann nimmt er nur die verknüpften Headerdaten (die willst du ja auch nur).

    Filtern in der BindingSource
    Für deine Select-Combos möchtest du ja als Datenquelle jeweils die existierenden Messwerte haben. Das geht entweder über eine Linq-Abfrage übers DataSet oder du kannst das DataSet selbst über dessen Partial-Class um eine Funktion erweitern (falls du diese Art Abfrage noch öfter brauchen solltest), welche dir die intern im DataSet zurechtgefilterten Daten als, sagen wir mal List(of) zurückliefert. Beide Varianten lassen sich an die DataSource-Eigenschaft der Combos anbinden.

    Das Filtern ist dann eigentlich recht einfach: im SelectedIndex_Changed-Event einen Filterstring zurechtbasteln und den an die Filter-Eigenschaft der Bindingsource anhängen.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    @Marsianer:


    oder du kannst das DataSet selbst über dessen Partial-Class um eine Funktion erweitern (falls du diese Art Abfrage noch öfter brauchen solltest)


    Könntest du das mal näher erklären, da ich mir immer im Dataset weitere TableAdapter anlege, um meine FilterComboboxen zu füllen.Oder ich maches indem ich mir Bindingsources erstelle, die auf den gleichen TableAdapter der Grunddaten verweisen. Anschließend setze ich dann immer den entsprechenden Filter bei der Bindingsource.
    Gruß von der KSE

    ks-entwicklung.de

    KSE schrieb:

    Also ich mache es im Prinzip so wie du.
    Ich bastel mir meine Abfrage über mehrere Tabellen im Designer zusammen und gebe das Ergebnis je nach dem in einem DGV aus...
    ErfinderDesRades hat hierzu...
    aber ich mache es komplett anders!

    Ich mansche niemals per Sql-Inner Join mehrere Tabellen zu einer zusammen, sondern wenn ich Daten mehrerer Tabellen brauche, lade ich die schön getrennt in mehrere DataTables meines Datasets.
    Aus diesem Datenmaterial im Dataset kann ich dann nach Belieben verschiedene Views komponieren, und natürlich auch filtern und Zeugs anstellen.

    gugge DB-Programmierung ohne Datenbank, "Datenbank in 10 Minuten" auf Movie-Tuts oder bei Microsoft: Forms over Data Videos
    Mal ne allgemeine Frage @Erfinder

    Du lädst dir ja immer brav alle Daten der Tabellen... Hierbei sehe ich (ggf.) einen großen Nachteil.
    Und zwar die Perfomance. Je nach Größe der Tabellen kann da ja schon einiges zusammenkommen. Ich finde es nicht schlecht schon im Vorfeld die Daten entsprechend zu filtern (was er über nen Inner-Join ja macht).

    Oder sehe ich das falsch?

    PS: Nen

    SQL-Abfrage

    1. SELECT DISTINCT Messeinheit
    2. FROM Header


    sollte reichen.

    Frage @TE

    Wieso

    SQL-Abfrage

    1. GROUP BY Header.ID, Header.Prüfdatum, Header.Prüfer, Header.UG, Header.OG, Header.Prüfmerkmal, Header.Messeinheit, Header.Bemerkung


    Du scheinst hier den kompletten SELECT zu gruppieren... Das ist doch sinnlos?!
    Benutz "DISTINCT" aka "Bitte keine Duplikate mein lieber Server..."
    Solange du keine Funktionen wie "SUM"... "MAX" usw. verwendest brauchst kein Group By
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    MemoAnMichSelbst schrieb:

    Ich finde es nicht schlecht schon im Vorfeld die Daten entsprechend zu filtern (was er über nen Inner-Join ja macht).
    ein Inner Join filtert ja nicht wirklich.
    Also hast du 30 Kunden und 1000 Bestellungen, und Joinst das zusammen, da kriegst du 1000 Bestellungen, und in den Bestellungen sind jeweils Kunden-Daten enthalten, und zwar hoch-redundant.

    Filtern tut man mitte Distinct oder Where - Klausel.

    Wobei Distinct ja Dopplungen weg-filtert, und ich frage da gleich: Wie konnten die Dopplungen ühaupt in den Datenbestand hineinkommen?

    jdfs. es ist durchaus machbar, eine Dataset-Tabelle mit nur einem Teil der in der DB liegenden Daten zu befüllen.
    Ganz üblich wäre etwa eine Befüllung mit Bestellungen, gefiltert auf eine bestimmte KundeID.
    Ich bezog mich darauf "möchte ich nur Header Datensätze die auch Messungen verknüpft haben zurückbekommen".
    Die Daten die keine Messungen beinhalten werden hier durch den INNER join schon herausgefiltert.


    Ich gehe mal davon aus, dass es Dopplungen gibt, da die Tabellen mehr Daten enthalten. Er Selektiert ja nicht via "*", sondern explizit Spalten.
    Also gehe ich mal davon aus, dass es Spalten gibt, die die Datensätze unterscheiden würden, welche aber hier irrelevant sind.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Danke schon mal für die hilfreichen Tipps...

    ich mache den Inner Join um die Verknüpfung zwischen ID Header und den Messwerten zu bekommen. Dadurch bekomme ich aber erstmal auch pro Messwert einen Header Datensatz. Darum war das ganze Group By drin..

    SQL-Abfrage

    1. SELECT DISTINCT Messeinheit FROM Header


    ist das was ich suchte :)

    die Tut's werde ich mir jetzt mal ansehen. Das mit der BindingSource auf die Comboboxen werde ich auch ausprobieren. Danke

    MemoAnMichSelbst schrieb:

    Er Selektiert ja nicht via "*", sondern explizit Spalten.
    stimmt - du hast recht.
    Ich hab heut Leseschwäche :(

    Ah ja - ich bin ja auf KSE eingestiegen, der Abfragen über mehreren Tabellen konstruiert (eben zusammenmanscht)

    Der TE lädt ja erfreulicherweise die Tabellen getrennt, und darin täte ich ihn nur bestätigen wollen würden :thumbsup:

    Und zur Eingangsfrage:

    Befree schrieb:

    Gibt es nicht eine möglichkeit diese 3 Views irgendwie in eine Stored Procedure zu verpacken oder ähnliches...? Irgendetwas mit dem ich mit einer Abfrage alles erschlage.
    Nein - Sql ist meiner Meinung nach miserabel konzipiert, dass eine Abfrage immer nur eine flache Tabelle returnt.
    Das Mis-Design daran ist, dass die Daten in Wirklichkeit ja nicht flach sind, sondern sind strukturierete, untereinander verknüpfte Gebilde.

    Ich würde mir ein Sql wünschen, wo man so abfragen kann:

    SQL-Abfrage

    1. Select From Kunde, Bestellung, BestellPosten, Artikel Where Kunde.ID = 12
    Und Sql sollte intelligent genug sein, das mit einem Dataset mit 4 Tabellen zu beantworten, befüllt mit dem einen Kunden, allen seinen Bestellungen, allen BestellPosten dieser Bestellungen und allen Artikeln, auf die von den BestellPosten verwiesen wird.

    Prinzipiell ist das möglich - die angegebenen Informationen sind ausreichend. Ich habe auch selbst einen Automaten geproggt, der vergleichbares treibt - allerdings gewissermaßen als Workaround - im Hintergrund werden mehrere Sql-Commands generiert und abgefahren.
    Ja, ich lade es entweder einzeln oder ich lade es über einen view der mir das gibt was ich gerade brauche.

    Das mit dem "DISTINCT" war genau das was ich brauchte und was ich meinte. Hatte ich irgendwie nicht mehr drin im kopp.

    Mein zweites Problem ist nun leider etwas unter gegangen. Ich möchte nicht, wie Marsianer es verstanden hat, Messwerte als Filter benutzen. Ich hätte nur gerne das in der Kombobox was es auch im Datagridview zu sehen gibt als Auswahl. Wenn ich also im Datagridview das folgende angezeigt bekomme..


    115091 | 06.02.2013 11:28:39 | Befree | 2,92 | 3,12 | Höhe | mm | test123

    115093 | 06.02.2013 13:15:30 | Befree | 2,95 | 3,18 | Höhe | mm | test543

    115094 | 06.02.2013 14:27:37 | Befree | 3,12 | 7,50 | Gewicht | kg | Blablatest

    hätte ich gerne Höhe, Gewicht und "<Kein Filter>" als Eintrag in der CB. Und dazu sind mir nur zwei Lösungen eingefallen.

    a) Ich mach ne Schleife durch alle Rows und adde was noch nicht in der CB ist.

    b) Ich lass mir die Daten noch vom SQL Server bereitstellen

    Leider sind beide möglichkeiten bei XXX-Datensätzen nicht wirklich toll. Ich denke die Schleife wäre das schlimmere also lass ich die mal außen vor.

    SQL-Abfrage

    1. SELECT DISTINCT Prüfmerkmal
    2. FROM View_Header
    3. WHERE Selbe-bedingung-wie-bei-ganzer-abfrage


    würde mir genau das liefern... aber, führt dann den View den ich eigentlich schon geladen habe ein zweites mal aus. Bei der nächsten CB ein drittes mal usw.. Das hätte ich gerne vermieden. Ist ne kleinigkeit, tut dem Server wahrscheinlich nich viel, aber es stört mich die selbe Abfrage mehr als einmal zu machen.


    Kann ich nicht irgendwie nachträglich combobox.items.addRange( "Datatable.select("DISTINCT Prüfmerkmal")) schreiben oder sowas...


    Ich hoffe man versteht das kauderwelsch



    Edit:

    Das schönste wäre eine Stored Procedure dachte ich eben...

    SQL-Abfrage

    1. (
    2. @View TABLE OUTPUT,
    3. @Prüfmerkmale TABLE OUTPUT
    4. )
    5. SET @VIEW = SELECT * FROM VIEW_Header WHERE Prüftatum < XY
    6. SET @Prüfmerkmale = SELECT DISTINCT Prüfmerkmale FROM @View


    und alles ist fein.. eine Abfrage 2 Ergebnisstabellen, aber is wohl nich

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Befree“ ()

    KSE schrieb:

    Könntest du das mal näher erklären

    Naja, ich gehe in den Codebereich meines DataSets und lege da einfach eine Funktion an. In dem hiesigen Programmbeispiel wäre das ungefähr so:

    VB.NET-Quellcode

    1. Partial Class MeinDataSet
    2. Public Function Prüfmerkmale() as List(of String) 'Ich setzte jetzt mal voraus, dass die Prüfmerkmale Strings sind
    3. Dim Ergebnisliste as List(of String)
    4. For Each Eintrag in Messwert
    5. 'Hier die gefundenen Maßeinheiten in die Ergebnisliste übertragen
    6. 'und auf nix Doppelungen achten.
    7. Next
    8. Return Ergebnisliste
    9. End Function




    Das geht sicherlich auch noch schöner, man kann es natürlich auch ohne ForEach machen, aber halt nur mal so als Beispiel. Die Funktion steht dann überall, wo das DataSet da ist, zur Verfügung:

    VB.NET-Quellcode

    1. MeineCombobox.DataSource = MeinDataSet.Prüfmerkmale()


    Insofern habe ich eventuell falsche Hoffnungen geweckt, weil die Function setzt natürlich voraus, dass das DataSet gefüllt ist. Bei mir ist das regelmäßig der Fall, weil ich es beim Programmstart fülle und global verwende. Hierzu benutze ich die DBExtensions vom EdR. Dadurch habe ich überall ein komplett funktionierendes DataSet mit Extrafunktionen zur Verfügung.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    Um dir darauf eine Antwort zu geben, würde mich interessieren wie du denn die SQL Abfrage (bzw. deren Ergebnis) in das Datagrid überträgst. Hierzu gibt es ja unterschiedliche Möglichkeiten. Und diese unterschiedlichen Möglichkeiten bieten wieder jeweils eigene Lösungen für dein Problem.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo,

    @Marsianer: Mir ist schon klar des es mit einer Schleife geht. Das hab ich ja auch im Beitrag zuvor geschrieben. Trotzdem Danke das du dir da Zeit nimmst.

    VB.NET-Quellcode

    1. Private Function GetComboBoxEntrys(ByVal Table As DataTable, ByVal Member As String) As List(Of String)
    2. Dim List As New List(Of String)
    3. List.Add("<Kein Filter>")
    4. For Each Row As DataRow In Table.Rows
    5. Dim newString As String = Row.Item(Member)
    6. If Not List.Contains(newString) Then
    7. List.Add(newString)
    8. End If
    9. Next
    10. Return List
    11. End Function


    Die Frage ist eher so.. geht das einfacher? Schneller..? Ich mein, wenn da 1000+ Rows im Table sind möchte ich die nicht unbedingt durchackern. Da wäre selbst eine zweite SQL Abfrage schneller denke ich.

    Befree schrieb:

    Die Frage ist eher so.. geht das einfacher? Schneller..? Ich mein, wenn da 1000+ Rows im Table sind möchte ich die nicht unbedingt durchackern. Da wäre selbst eine zweite SQL Abfrage schneller denke ich.


    Hi,

    je nun, ich wollte ja in erster Linie die Nachfrage von KSE beantworten. Ob eine Schleife hier zu merkbaren Verzögerungen führt... dafür bin ich ehrlich gesagt nicht fit genug. Vielleicht können das die Profis beantworten. Aber letztlich ist es doch so, dass bei einer SQL-Abfrage auch alle Datensätze durchgearbeitet werden müssen. Allerdings serverseitig, was sicher bei Client-Server-Konstruktionen bessere Performance bringt, weil nicht immer alle Datensätze durch die Gegend gefeuert werden müssen.

    Das Aufbohren des DataSets lohnt sich vor allem dann, wenn man bestimmte Ergebnisse öfter braucht. Desweiteren hat es als globales DataSet den Vorteil, dass die Daten im Hauptspeicher sind und nicht von der Festplatte oder vom Server geholt werden müssen. Das müsste eigentlich flott arbeiten. Beim Programmstart saugt sich das DataSet alle Daten heran und verarbeitet sie dann lokal. Zurückgeschrieben wird nur, wenn was verändert wurde. Und auch das kann man dann gesammelt am Ende machen.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    Verweis auf Post #15
    Erst dann kann doch überhaupt ne gescheite Antwort gegeben werden.
    Ich muss ja die Voraussetzungen kennen, die gegeben sind um zu sagen ob es mit diesen Voraussetzungen alternative Möglichkeiten gibt.
    Denn mit ner Schleifer drüber zu laufen halte ich für eine denkbar unelegante Lösung.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    ErfinderDesRades schrieb:

    Du hast doch eine Masseinheiten-Tabelle, oder?
    Dassis die Gretchen-Frage.

    Denn nach den Prinzipien der Datenmodellierung solltest du eine MassEinheiten-Tabelle haben, und die halt ins Dataset laden, und deine Combo daran binden.
    Und jede Messung würde logischerweise auf eine MassEinheit verweisen.

    Da gäbe es nix mit zusätzlichen Queries (die 20 MassEinheit-Datensätze würden einmal initial geladen), und v.a. nix mit Distinct oder eine Aussortier-Schleife für Doubletten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Es geht nicht um eine Mass Einheiten Tabelle - die gibt es nicht.

    Ich habe 2 Tabellen die vorgegeben sind und ich nicht ändern kann (und leider wurden diese nicht nach Datenmodellen erstellt). Die eine speichert alle Messdaten-Header. Die Andere die einzelnen Messwerte.

    In der Header stehen also Sachen wie der Prüfer, das Prüfmerkmal, die Einheit, das Prüfdatum.. also Werte die sich auf alle Messwerte beziehen

    In der Messwerte Tabelle stehen dann die einzelnen gemessenen Werte die sich auf den Header beziehen. Also z.B [3,14] [1,23] [5,54] [9,84]



    Die Aufgabe selbst ist im Moment nicht das Anzeigen der Messwerte sondern eine Übersicht der Header. Da es auf Jahre gesehen 100-tausende Messungen geben kann mache ich eine Abfrage auf einen View der mir schonmal nur die Header gibt die mind. einen dazugehörigen Messwert haben. Das war die Sache mit dem DISTINCT und dem JOIN.

    Ich habe also eine Form mit nicht viel mehr als einen datagridview, einer Textbox für den suchtext und ein Auswahlfeld nach was gesucht werden soll + Einer Kombobox für Prüfmerkmale die ich für die Filtervorgabe benutzen möchte.

    Suche ich jetzt Beispielsweise nach dem Prüfer "Befree" mache ich eine Abfrage auf den Header_View über einen SQLDataAdapter und fülle damit ein DataTable

    SQL-Abfrage

    1. SELECT * FROM VIEW WHERE Prüfer LIKE ¾free%


    Dieses gefüllte DataTable binde ich an das DataBinding - dieses ist gebunden an das Datagridview. Ich habe nun also alle Einträge geladen die in der Spalte Prüfer LIKE "Befree" sind.

    Da dies aber auch tausende Einträge sein könnten möchte ich über die weiteren Comboboxen eine Auswahl zum Filtern der schon gesuchten Daten schaffen. Ich möchte also das in die Comboboxen Filterkriterien geladen werden. Wenn das Ergebnis des Views nur Einträge gebracht hat die alle nur als Prüfmerkmal "Länge" haben, möchte ich nicht das man "Höhe" auswählen kann.

    Klar, gäbe es eine Tabelle aus der ich mir die Prüfmerkmale ziehen könnte würde ich diese laden und gut. Aber die gibt es nicht und das Programm das diese Messwerte speichert und eben auch die Header einträgt schreibt die Prüfmerkmale als String in den Header statt einfach nur die ID eines Prüfmerkmals.

    Um jetzt also herauszufinden welche Prüfmerkmale es gab könnte ich die schon mal gepostete Schleife nehmen und alles nach den Kriterien durchsuchen. Das will ich aber nicht. Die negative Seiten sind ja klar.

    Um es über SQL rauszubekommen müsste ich sowas wie

    SQL-Abfrage

    1. SELECT DISTINCT Prüfmerkmale FROM VIEW WHERE Prüfer LIKE %Befree%


    machen. Und das für jede Cobobox die ich damit füllen möchte. Zusätzlich wird bei jeder Abfrage erst der View mit distinct, join usw aufgerufen, was ich vermeiden wollte