Select Zugriff mit Variablen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Select Zugriff mit Variablen

    Guten Abend und frohes neue Jahr!

    Ich habe zwei kleine Probleme, die bestimmt einfach zu lösen sind aber die Suche hat mir nichts gebracht. Die Situation:

    Eine CheckedListBox mit der man verschiedene User aus der Datenbank auswählen kann. Die zugehörigen Tabellen zu jedem User sollen in einer ListBox angezeigt und später bearbeitet werden können.

    Problem: Wie filtere ich die Spalte nach den angehakten Usern also nach einer Variablen? Das Folgende klappt nicht:

    Quellcode

    1. ChkListBoxUser.CheckedItems.Count <> 0 Then
    2. Dim x As Integer
    3. Dim s As String = ""
    4. Dim user1 As String
    5. For x = 0 To ChkListBoxUser.CheckedItems.Count - 1
    6. user1 = ChkListBoxUser.CheckedItems(x).ToString
    7. s = s & "Ausgewählte Nutzer: " & (x + 1).ToString & ChkListBoxUser.CheckedItems(x).ToString & ControlChars.CrLf
    8. Next x
    9. MessageBox.Show(s)
    10. ...
    11. cmd.CommandText = "SELECT * FROM Liste where user = user1" *********** Das hier klappt nicht
    12. reader = cmd.ExecuteReader
    13. ListBox.Items.Clear()
    14. Do While reader.Read
    15. ListBox.Items.Add(reader("Titel"))
    16. Loop
    17. ...


    Die Fehlermeldung: Unknown column 'user1' in 'where clause'
    Weiss jemand, wie ich das besser machen könnte?
    Vielen Dank schonmal!

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

    Enigma schrieb:

    Problem: Wie filtere ich die Spalte nach den angehakten Usern also nach einer Variablen? Das Folgende klappt nicht:

    also daß problem, datensätze anzuhaken oder auf bool-spalten zu filtern ist in DbExtension-Download neuerdings auch gelöst. (Erläuterung letzter Post, downloadlink 1. Post).
    CheckedListboxen sind ungünstig, weil sie Databinding nicht gescheit unterstützen.
    Danke für deine Antwort aber das hilft mir irgendwie nicht weiter.
    Funktioniert der Ausdruck Select...From... Where user = Name nur mit dem tatsächlichen Eintrag und nicht mit einer vorher deklarierten Variablen "Name"?

    Was bedeutet, dass CheckedListBoxen Databindings nicht unterstüzten`? Das verstehe ich nicht? Und was würde man alternativ verwenden?
    Das geht natürlich was du vorhast, nur wollte dich ErfinderDesRates glaub ich ehr darauf hinweisen, das es nicht die optimale Lösung ist.

    Ebenfalls solltest du mal die Basics lernen nicht unbedingt von VB.Net, aber eventuell was Datenbanken angeht ;)

    VB.NET-Quellcode

    1. cmd.CommandText = "SELECT * FROM Liste where user = '" & user1 & "'"

    Dies sollte deinen Fehler lösen.

    Das Prüfen ob eine Checkbox markiert ist oder nicht würde ich mit einer Foreach-Schleife und einer If Abfrage lösen.

    Wieso nimmst du nicht anstatt einer Listbox ein DataGridView? Dies finde ich persönlich schöner als eine Listbox, Listview oder ähnlichem..

    Soviel dazu.

    icemanns schrieb:

    wollte dich ErfinderDesRates glaub ich ehr darauf hinweisen, das es nicht die optimale Lösung ist.

    jain.
    Also die Frage lautet:
    Eine CheckedListBox mit der man verschiedene User aus der Datenbank auswählen kann. Die zugehörigen Tabellen zu jedem User sollen in einer ListBox angezeigt und später bearbeitet werden können.
    Darauf antworte ich, indem ich auf eine vollständige Lösung dieses Problems verlinke.

    Auf seinen Code gehe ich tatsächlich nicht ein, weil dort der "Erbsen-Zähle-Ansatz" verfolgt wird - also die Datensätze werden einzeln ausgelesen, statt eine DataTable zu befüllen.

    Mittm "Erbsen-Zähle-Ansatz" befasse ich mich nicht, weil da kriegt man mittelfristig einen Vogel, und auch wird kein Databinding unterstützt.
    In diesem Sinne haste also recht.

    Aber Enigma stiert so verkrampft auf seinen Erbsen-zähle-Ansatz, dasser die angebotene vollständige Lösung nicht auffassen kann.

    Enigma schrieb:

    Danke für deine Antwort aber das hilft mir irgendwie nicht weiter.
    Er will unbedingt was mit seinem "Select ... Where..." unterfangen - das kannernicht zur Seite legen.

    Oh, ich sehe grad, dasser immerhin nach Databinding nachgefragt hat. Aber annererseits auch komisch, denn die SampleLösung beruht doch vollständig auf Databinding. Gradezu erschlagend, es sind ja 9 Projekte (davon 3 Helper-Projekte, die nix anzeigen). Und jedes zeigt Variationen von Databinding.

    Aber ich erklär nochma Databinding:
    Beim Databinding füllt man nicht mehr Daten in Controls ein (ListBox.Items.Add(reader("Titel"))), sondern man setzt DataSources.
    Vorzugsweise schaltet man eine kleine Komponente namens BindingSource zwischen Dataset und Controls. BindingSource reicht die Daten durch, und bietet 2 Arten von Filter an: a) klassischer Filter-Ausdruck b) Filter aufgrund einer Beziehung (Relation, DataRelation) (erklär ich hier nicht).
    Das hat mehrere Vorteile:
    1. kein Code zum Füllen und auslesen von Controls
    2. Die Controls updaten sich selbst. Also wenn codeseitig ein Daten-Wert geändert oder gelöscht oder zugefügt wird, merkt das Control das, und zeigt die Änderung immer korrekt an. Gegenrichtung ebenfalls, d.h.: Daten und Controls sind synchron - gebunden eben.
    3. Man kann auch mehrere Controls an dieselben Daten binden, wodurch auch die Controls untereinander synchronisiert sind.
    4. Man kann Filter und Relationen bauen, etwa, dass man eine Kategorie anwählt, und daraufhin alle zugehörigen Artikel zu sehen bekommt.
    Diese Liste ist nur unvollständig. Grad die Geschichte mit den BindingSources ist nicht zu unterschätzen - es ist erstaunlich was für vielfältige Präsentations-Möglichkeiten sich durch geeignetes Zusammenstöpseln dieser Filterstrecken bewerkstelligen lassn.

    Was bedeutet es, dass CheckedListBoxen Databindings nicht unterstüzten`? Das verstehe ich nicht?
    zunächst ganz konkret: Im gegensatz zu normale Listbox oder Datagridview hat CheckedListBox halt keine "DataSource" - Property, und scheidet einfach für Databinding aus.
    Und was würde man alternativ verwenden?
    Na Datagridview. aber die Sample-Solution quillt doch über von dem Zeug. (Na gut, CheckboxColumns werden nur auf 3 Forms in 2 Projekten verwendet, dassis relativ wenig)

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

    Auch wenn es absolut Offtopic ist... Mich erinnert der Erfinder immer wieder an nen alten Prof von der Uni XD
    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