Suchfunktion in einem Verwaltungsprogramm

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Aquin81.

    Suchfunktion in einem Verwaltungsprogramm

    Hallo zusammen,

    ich bin neu hier im Forum und habe die VB Programmierung für mich als Hobby entdeckt 8o .

    Bisher habe ich mir mit Hilfe des Internets oder Lektüre einiges aneignen können :) .

    Aber nun brauche ich eure Hilfe , da ich irgendwie auf dem Schlauch stehe.

    Nun zu meinem Problem:

    Ich habe mir ein kleines Verwaltungsprogramm geschrieben, wo ich Daten in einer Accessdatenbank anlegen bzw. ändere oder lösche.

    Diese Daten lasse ich mir auch in einen DataGrid anzeigen, bis hier hin alles wunderbar :thumbsup: !

    Aber wie schaffe ich es den Code so zu gestalten :cursing: , dass er mir die Daten mit den genauen Inhalt sucht:

    Sprich es geht um die Suchfunktion, der Code funktioniert nur werden mir alle Daten gesucht, wo die ersten Zeichen gleich sind ;( !

    cmd.CommandText = "SELECT * from TAB_STILLSTAENDE_OBB where Produktionsdatum like '%" & txbDatum_Filter.Text & "%' AND Ressource LIKE '%" & cobRessource_Filter.Text & "%' AND Artikelnummer LIKE '%" & txbSuchen_Artikelnummer.Text & "%'"

    Ich hoffe das ihr mich versteht ?( , Danke
    Erstmal herzlich Willkommen im Forum Aquin81 :thumbsup:

    Ist dein DataGridView an eine Bindingsource gebunden? Wenn ja, kannst du dir einfach die Daten über die Bindingsource filtern.


    VB.NET-Quellcode

    1. DeineBindingsource.Filter="Dein Filterstring"


    Wie stellst du Verbindung zu deiner DB her? Über den Datasetdesigner?
    Gruß von der KSE

    ks-entwicklung.de
    Hallo zusammen,

    leider bin ich mit den Links nicht weiter gekommen :( .
    Die Datenbank ist klein, es werden mit meinem VB Programm nur Daten abgelegt in einer Tabelle.
    In der Datenbank selber gibt es keine Abfragen oder Beziehungen.


    Die Verbindung zur Datenbank, stellle ich so her:


    'Verbindung zum Verzeichnis
    frmProgramm_Einstellungen.lblVerzeichnis_Access_Datenbank.Text = My.Settings.VerzeichnisAccess_Datenbankcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & frmProgramm_Einstellungen.lblVerzeichnis_Access_Datenbank.Text
    cmd.Connection = con
    cmd.CommandText =
    "SELECT * from TAB_STILLSTAENDE_OBB where Produktionsdatum like '%" & cobRessource_Filter.Text & "%'"Ausgabe()
    con.Close()



    Die Daten werden mit Hilfe einer Do while Schleife und der reader Funktion ins DataGrid geschrieben.
    Wenn der Benutzer z.B in der Combobox MAX eingibt, möchte ich nur die Daten die auch Max enthalten, und nicht noch Marc!
    Danke für eure Antworten :thumbsup:

    Aquin81 schrieb:

    leider bin ich mit den Links nicht weiter gekommen
    Schade.
    Weil die Vorraussetzungen (kleine Datenmengen, dateibasiert) sind optimal, um sich auf richtige Weise in Datenbänkerei einzuarbeiten (nämlich ohne Datenbank).

    Aber du scheinst dich von dem, was du bisher erstellt hast, nicht lösen zu können.

    Aquin81 schrieb:

    dass er mir die Daten mit den genauen Inhalt sucht
    Egal mit welcher Technik du arbeitest.
    Wenn du filterst und genaue Inhalte willst, dann darfst du keine Wildcards verwenden.

    In deinem angegebenen Beispiel sind das die %-Zeichen, die für "beliebige Zeichen" stehen.
    Deine Filter sind also von der Sorte "enthält" und nicht "ist genau".
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo zusammen,

    danke für die Antworten.

    Bitte mit den Links nicht falsch verstehen ^^ , sie sind sehr Interessant. Nur ich möchte nicht das ganze Projekt jetzt Umschreiben, da ich so gut wie fertig bin und mir dieser kleine Baustein fehlt.

    Muss ich für die Wildcards jetzt ein = verwenden oder sieht der Syntax anders aus? :cursing:

    Habe auch schon diverses versucht habe nur keine Lösung erreichen können.

    Oder kann ich mit dieser Methode gar nicht so genau Filtern.
    Ich verstehe dich auf der einen Seite schon, dass du fertig werden willst. Sollte aber dein Programm leben und sich stetig erweitern sollte es schon sauber umgesetzt werden. Du wirst irgendwann auf Probleme stoßen die du nur gepfuscht lösen kannst, weil du falsch angefangen hast...
    Gruß von der KSE

    ks-entwicklung.de

    Aquin81 schrieb:

    habe die VB Programmierung für mich als Hobby entdeckt

    Aquin81 schrieb:

    Nur ich möchte nicht das ganze Projekt jetzt Umschreiben, da ich so gut wie fertig bin und mir dieser kleine Baustein fehlt.

    Also das passt für mich nicht recht zusammen.
    Wenn dir die erste Aussage ernst ist, dann kannst du jetzt gewaltige Fortschritte in mehreren Dimensionen gleichzeitig machen:
    • lernen, dass ein Neu-Anfang was ganz normales ist inne EDV-Entwicklung
      1. Auch in großen Firmen werden ganz ausgereifte Prototypen bedenkenlos wieder eingestampft, sobald sich ein überlegener Ansatz zeigt - das gehört zu den BetriebsKosten.
      2. der Neu-Anfang ist auch immer überraschend einfach. Denn das eiglich mühsame an einer Entwicklung, eben dasses von vornherein unklar ist, und sich erst entwickelt - dassis bereits erledigt. Der "Neu-Anfang" ist nur das ausprogrammieren eines bereits bewährten Konzeptes.

    • Datenmodellierung, Dataset und Databinding lernen - dassis KnowHow, was dir jede weitere Entwicklung unerhört vereinfacht.
    Du kannst auch ein Experiment machen:
    Versuch dich so weiter durchzuwursteln, und merk dir, wie lange es dauert - ab jetzt.

    Wenn du fertig bist, fang nochmal neu an, und guck, wie lange das dauert.
    Es ist gut möglich, dass der Neu-Anfang trotz des fortgeschrittenen Zustandes schneller zum Endergebnis führt, als das weiter-gewurstel.

    vlt. lernst du bisserl die Bedeutung des Hopi-Sprichworts:
    "Wenn du ein totes Pferd reitest - steig ab!"

    ErfinderDesRades schrieb:

    Wenn du ein totes Pferd reitest - steig ab!
    Wenn dich allerdings das Pferd bis kurz vor's Ziel geführt hat, kannst du den Rest auch zu Fuß gehen ;)
    Oder du legst die restliche Wegstrecke mit einem neuen Pferd zurück.
    Zurück zum Ausgangspunkt gehst du nur, wenn dich das tote Pferd in die entgegengesetzte Richtung getragen hat.

    Ich habe oft erlebt, dass mit umständlichen oder unzeitgemäßen Techniken dennoch ein Ziel erreicht wurde.
    Bei Großprojekten wird dann nicht einfach von vorne neu begonnen.
    Meistens muss ja auch ein Zeitplan und ein Budgetrahmen eingehalten werden.

    Man merkt sich einfach diese Stellen und macht es beim nächsten Redesign (oder beim nächsten Projekt) besser.
    Ein gutes Projekt hat deswegen immer ein paar sehr erfahrene Leute dabei, die bei groben Schnitzern rechtzeitig warnen.
    Aber auch die lernen jeden Tag neu dazu.

    Wenn die Windows-Entwicklung immer dann neu gestartet worden wäre, wenn Unzulänglichkeiten im Design gefunden wurden, wären wir heute noch bei DOS. ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Tja - genau gegen diese Einstellung wendet sich das Sprichwort :D
    Halte dich nicht mit Krams auf, der nicht funktioniert.

    Dabei ist der Zeitpunkt, wann du merkst, dasser nicht funktioniert, irrelevant.

    So auch hier: Soll der TE sich jetzt mit seim Gewurstel weiter aufhalten? Damit behindert er sich nur selber. Statt voranzukommen verhindert er sich zu lernen, wies richtig geht.

    ErfinderDesRades schrieb:

    Halte dich nicht mit Krams auf, der nicht funktioniert.
    Wenn er überhaupt nicht funktioniert, ist das die eine Seite.
    Dann wird (zumindest bei diesem Part) ein Redesign erforderlich sein, den man architektonisch auf brauchbare Beine stellen kann.

    Wenn er aber im Wesentlichen funktioniert, wird man nicht das komplette Design über den Haufen werfen. nur um eine geile Architektur zu haben.
    Zumindest nicht in Umgebungen, wo Zeit und Geld eine entscheidende Rolle spielen.
    Da werden neue Erkenntnisse als Erfahrung verbucht, um sie im nächsten Projekt entsprechend umzusetzen.

    Für einen Hobby-Programmierer, der hauptsächlich programmiert, um Spaß und Lernerfolg zu haben, gelten diesbezüglich natürlich andere Maßstäbe.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    ErfinderDesRades schrieb:

    Architektur ist das A und O einer Software.
    Akademisch betrachtet gebe ich dir vollkommen recht.

    In ökonomischer Hinsicht ist das häufig Wunschdenken.
    Da wird in der Regel ein Kompromiss aus "wünschenswert" und "tragbar" getroffen.

    Ich würde gerne einen Aston Martin fahren.
    Nur weil mein Budget das nicht hergibt, verzichte ich dennoch nicht komplett auf ein Auto.
    Und arbeite ich mich langsam in diese Richtung, bis ich vielleicht doch mal dort angelangt bin.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo zusammen,

    erst einmal an alle ein Dankeschön !
    Prinzipiell gebe ich euch recht, ich werde mir natürlich alle Tipps annehmen!
    Da ich beruflich Industrieroboter programmiere, kenne ich das sehr gut mit dem löschen.

    Der Syntax mit der SQL Abfrage hat mir geholfen, genau das habe ich gesucht!