Hilfe zum fertigstellen des Programms

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Typhoon.

    Hilfe zum fertigstellen des Programms

    Hallo Community

    Ich bin mir nicht sicher ob das Thema hier her gehört aber versuche es trotzdem. ;)

    Ich hatte die Idee, mit hilfe von Visual Studio ein kleines Programm zu machen mit dem ich meine Ausgaben für mein Auto eintragen kann und am ende vom Jahr eine Summe entsteht. Daraus wurde das Programm TANKMANAGER.
    Die eingegebenen Daten werden auf meinem SQL-Server lokal gespeichert.
    Das funktioniert ohne Probleme.



    Jetzt würde ich gerne 2 Dinge hinzufügen.

    1. Die Auswahl um ein weiteres Auto hinzufügen zu können. ( das der Freundin )
    2. Ein Bild dessen Auto hinzuzufügen, das gerade ausgewählt ist.

    Wer kann mich hierbei unterstützen oder Tipps geben das umzusetzen.

    Vielen Dank im vorraus

    Gruß Gebhard

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Zu zweitens: Öffne über einen "OpenFileDialog" die Bilddatei. Den Pfad liest du dann aus und speicherst diesen ab. Möchtest du nun das Bild anzeigen, rufst du den gespeicherten Pfad einfach ab und stellst diesen Pfad bei der Picturebox ein. Das Bild wird dann in der Picturebox angezeigt.
    Interessant wäre hierbei zu wissen, wie dein Datenmodell aussieht.
    Anscheinend fehlt dir nämlich eine Tabelle "Auto" in der du mehrere Einträge machen kannst, und somit beliebig viele Autos führen könntest. Natürlich bräuchten die anderen Tabellen (nicht unbedingt alle, je nach Datenmodell) den Fremdschlüssel AutoId damit man weiß, wo die Einträge hingehören.

    Gui-Technisch könntest du das ganze bspw. auf nen TabContainer packen, und dann für jedes Auto einen neuen Tab anlegen. Oder aber du fügst bspw. nen Dropdown hinzu in dem das Auto ausgewählt, und dann die Daten für das Auto nachgeladen werden.
    @EaranMaleasi

    war nicht meine Absicht. Sorry

    Mein Datenmodell sieht im Moment so aus:



    Das ist ein Auto.

    Ich habe jetzt eine Neue Form erstellt



    mit der ich dann Autos anlegen kann die sich durch das KFZ-Kennzeichen trennen lassen.

    Wenn ich auf den Button Erstellen klicke, dann sollte eine Database mit
    dem Namen des Kennzeichens erstellt werden und auch die dazugehörigen
    Tabellen.

    Problem ist die umsetzung. Es gibt viele Tutorials im Netz zu Thema
    'create table and insert data' aber keines über 'create database and
    table and insert Data'

    und das noch verbunden mit der Form aus Visual Studio.

    Gruss und Danke

    Gebhard
    Achja, das Forum hat eine eigene Upload Funktion für allemöglichen Dateien. Nutze diese Bitte anstatt externer Hoster. Passe bitte deinen Beitrag entsprechend an.
    Diese Funktion findest du unter "Erweiterte Bearbeitung".

    Nun zum eigentlichen Problem:
    Für jedes Auto eine neue Datenbank mitsamt Tabellen anzulegen ist totaler Unfug.
    Was du brauchst ist eine Tabelle Auto mit einer Spalte AutoId, die ebenso auch in den anderen Tabellen vorkommt.

    Dadurch kannst du so viele Autos anlegen wie du willst, und hast es nach wie vor einfach. zu Managen.
    Durch die Spalte AutoId in jeder Tabelle kannst du die Daten sauber einem Auto zuweisen und auch entsprechend Anzeigen, bearbeiten, Hinzufügen, löschen.

    Abgesehen davon müllst du dir auch nicht das Dateisystem mit etlichen Daten zu, aber das ist ne andere Geschichte.

    Typhoon schrieb:

    @EaranMaleasi

    Problem ist die umsetzung. Es gibt viele Tutorials im Netz zu Thema
    'create table and insert data' aber keines über 'create database and
    table and insert Data'

    und das noch verbunden mit der Form aus Visual Studio.

    Gruss und Danke

    Gebhard


    für das anlegen einer Access DB ....

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Add the COM Reference, "Microsoft ADO Ext. 6.0 for DLL and Security"
    3. ' create the empty DB file
    4. Dim cat As New ADOX.Catalog()
    5. cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MeineNeueDB.accdb")
    6. cat = Nothing
    7. End Sub


    dann via SQL die Tabellen anlegen

    gruss
    chris
    @Kasi
    Ich verwende phpmyadmin als DB. Ich bin mir nicht sicher, ob dein Quellcode von Access dafür Funktioniert.
    Ich probier es aus und gib dann bescheid. Danke für deine Antwort.

    @EaranMaleasi
    Ich hoffe jetzt habe ich es richtig gemacht.

    Kann ich meine alte DB (tankmanager) anpassen, oder sollte ich ein NEUE DB anlegen?

    siehe Anhang bestehende und funktionierende db-struktur für 1 Auto

    Ich habe nicht ganz verstanden, wie dann die db-struktur aussehen soll.

    gruss Gebhard
    Bilder
    • dbstruktur.jpg

      332,68 kB, 534×2.160, 132 mal angesehen

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

    Typhoon schrieb:

    Ich habe nicht ganz verstanden, wie dann die db-struktur aussehen soll.
    Da gibts viel zu zu sagen und zu lernen, ehe was brauchbares draus werden kann, weil das ist der Ausgangspunkt.
    Es ist ganz ausgeschlossen, dass du erfolgreich eine Datenverarbeitung programmierst, ohne die Prinzipien relationaler Datenmodellierung zu erlernen.
    Fängt schon mitte Begriffe an: "db-struktur für 1 Auto" gibt es nicht - das ergibt nichtmal Sinn.
    In einem relationalen Datenmodell würde man für die Entität "Auto" eine Tabelle anlegen.
    Und die Tabelle wäre nicht für 1 Auto, sondern für alle Autos, die in die Datenbank sollen.
    Eine weitere Tabelle hiesse sicherlich "Beleg".
    Höchstwahrscheinlich benötigst du auch eine Tabelle "Einzahler" - nämlich für den Fall, dass du unterscheiden willst, wer für welche Zahlung und für welches Auto einen Beleg einbringt.
    Und diese Tabellen stehen miteinander in Beziehung - ein weiterer Fachbegriff der Datenbänkerei.

    Nun kommt für dich das schlimmste: Du brauchst überhaupt keine Datenbank.
    Es ist viel einfacher, ein Datenmodell ohne Datenbank zu erstellen, und die Daten auch ohne Datenbank einfach als Datei auf Platte zu speichern.
    Hierfür steht etwas bereit, was "typisiertes Dataset" heisst, und was du sowieso brauchst.
    In .Net ist das Konzept der Datenvararbeitung, dass aller Code sich mit dem Dataset beschäftigt, und fast oder sogar gar kein Code mit der Datenbank.
    Alles dreht sich ums Dataset, und dieses kann man entweder aus einer Datei von Platte befüllen (der einfache Weg) oder aus einer Datenbank (der sehr viel schwierigere Weg).
    Ich empfehle dringend den einfachen Weg, weil wenn sich später herausstellt, dass eine DB tatsächlich von nöten ist, kann man sie immer noch nachträglich hinterlegen - das Dataset aber braucht man wie gesagt auf alle Fälle.
    Und dem Dataset ists egal, ob es sich aus einer Datei befüllt oder aus einer DB.

    Ja, gäb noch viel zu erzählen, aber meist springen die Leuts ab, wenn sie hören, dass sie ihre Datenbank erstmal weglassen sollen.
    Aber zu Datenmodellierung hab ich 2 Tuts: Einem Kurz-Abriss auf deutsch, und ein vollständigeres auf englisch.
    Grundlagen: Relationale Datenmodellierung
    codeproject.com/Articles/10309…l-Datamodel-for-Beginners

    Dazu gibts hier noch einen Einblick in die Möglichkeiten des Databindings - weil .Net unterstützt in enormen Umfang grafische Programmiertechniken, bei denen man selbst nur sehr wenig Code schreiben muss.
    vier Views-Videos

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

    Fred schrieb:

    Zu zweitens: Öffne über einen "OpenFileDialog" die Bilddatei. Den Pfad liest du dann aus und speicherst diesen ab. Möchtest du nun das Bild anzeigen, rufst du den gespeicherten Pfad einfach ab und stellst diesen Pfad bei der Picturebox ein. Das Bild wird dann in der Picturebox angezeigt.


    Danke für den Tipp. Funktioniert super.

    gruss Gebhard
    Bilder
    • bilddb.jpg

      211,29 kB, 930×636, 119 mal angesehen

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

    @ErfinderDesRades

    Danke für den Einblick in die richtige db-Strukturierung.

    Ich mache das nicht Beruflich sondern als "Hobby" und bin daher mit den richtigen Ausdrücken nicht vertraut. Danke für eure Geduld!! :)

    Im Anhang habe ich ein kurzes Video als .zip gemacht das zeigen soll wie das jetzige Programm funktioniert.

    Das hinzufügen eines 2. 'Auto' ist das was ich machen möchte.

    Wie kann ich 2 Autos in nur einer Datenbank die schon besteht unterscheiden? Ich habs einfach noch nicht verstanden.
    Dateien
    • Neuer Eintrag.zip

      (17,04 MB, 87 mal heruntergeladen, zuletzt: )

    Typhoon schrieb:

    Wie kann ich 2 Autos in nur einer Datenbank die schon besteht unterscheiden? Ich habs einfach noch nicht verstanden.
    Die Frage versteh ich glaub nicht, weil die Antwort ist zu banal:
    Es muss in der Datenbank eine Tabelle "Auto" geben, und darin legste 2 Datensätze an - für jedes Auto einen.
    Hallo zusammen

    Ich gehe jetzt einmal davon aus, das ich mit der bestehenden DB nicht zu einem Ergebnis komme.

    Ich werde wie von 'ErfinderDesRades' vorgeschlagen in der DB eine tbl-Autos anlegen und darin werden dann die Datensätze für die beiden Autos gespeichert.

    Sollte es funktionieren gebe gerne bescheid.
    Sollte es nicht funktionieren gebe ich ebenfalls gerne bescheid. ;)

    Danke für eure Tipps

    gruss Gebhard
    Hallo
    ich habe das Programm fast fertig. Jetzt hänge ich bei folgender Aufgabe der SELECT heisst.
    Ich möchte bei der 'SELECT' auswahl ein 'AND' hinzufügen. Ich bekomme aber an der stelle immer eine Fehler Meldung:

    Hier der Code:

    VB.NET-Quellcode

    1. Module dbSelectVerbrauch
    2. 'Abfrage: durschnittlicher Verbrauch auf 100 Kilometer pro Jahr
    3. Public Function MySqlSelectVerbrauch(selectedJahr)
    4. 'variable definieren und predefined statement einfügen
    5. Dim select_statement As String = "SELECT
    6. ROUND((SUM(`tankmanager`.`tbl_tanken`.`liter`) / COUNT(`tankmanager`.`tbl_tanken`.`liter`) * 100) /
    7. (SUM(`tankmanager`.`tbl_tanken`.`gefahren`) / COUNT(`tankmanager`.`tbl_tanken`.`gefahren`)),2) AS DGV
    8. FROM `tankmanager`.`tbl_tanken`
    9. WHERE DATE_FORMAT(`tankmanager`.`tbl_tanken`.`datum`, '%Y') = '" & selectedJahr & "' AND `tankmanager`.`tbl_kfz`.`kennzeichen`; '" & FormMain.LabelKFZKennzeichen.Text & "';"
    10. 'Statement zurückgeben
    11. Return select_statement
    12. End Function
    13. End Module



    Und die Fehler Meldung:

    Es ist ein Fehler aufgetreten
    Unknown column 'tankmanager.tbl_kfz.kennzeichen' in 'where clause'
    Fehlercode: 1054

    Wie kann ich bei 'SELECT' richtig ein 'AND' hinzufügen?

    gruss Gebhard

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

    mit so einem sql-Code können wir nix anfangen - weil wir wissen ja nicht, was in selectedJahr und FormMain.LabelKFZKennzeichen.Text drinne steht.
    Mach eine Debug-Ausgabe von select_statement, und poste die.
    Wenn du Hilfe zu 'Debug-Ausgabe' brauchst, google oder frag.

    Naja - eiglich sieht man den Fehler auch so.
    Aber mach besser eine Debug-Ausgabe, und guck dir das Sql selber an - müssteste dann eiglich auch sehen können.
    Andernfalls posten.
    Das wird bei einem select_statement ROT angezeigt

    "SELECT" & vbCrLf & vbCrLf & "ROUND((SUM(`tankmanager`.`tbl_tanken`.`liter`) / COUNT(`tankmanager`.`tbl_tanken`.`liter`) * 100) / " & vbCrLf & "(SUM(`tankmanager`.`tbl_tanken`.`gefahren`) / COUNT(`tankmanager`.`tbl_tanken`.`gefahren`)),2) AS DGV" & vbCrLf & "FROM `tankmanager`.`tbl_tanken`" & vbCrLf & "WHERE DATE_FORMAT(`tankmanager`.`tbl_tanken`.`datum`, '%Y') = '2020'' AND `tankmanager`.`tbl_kfz`.`kennzeichen`; 'DO-944EE';"
    ähm - das ist doch keine Debug-Ausgabe - wie haste das eiglich hingekriegt?

    Mit Debug-Ausgabe meine ich sowas:

    VB.NET-Quellcode

    1. Module dbSelectVerbrauch
    2. 'Abfrage: durschnittlicher Verbrauch auf 100 Kilometer pro Jahr
    3. Public Function MySqlSelectVerbrauch(selectedJahr)
    4. 'variable definieren und predefined statement einfügen
    5. Dim select_statement As String = "SELECT
    6. ROUND((SUM(`tankmanager`.`tbl_tanken`.`liter`) / COUNT(`tankmanager`.`tbl_tanken`.`liter`) * 100) /
    7. (SUM(`tankmanager`.`tbl_tanken`.`gefahren`) / COUNT(`tankmanager`.`tbl_tanken`.`gefahren`)),2) AS DGV
    8. FROM `tankmanager`.`tbl_tanken`
    9. WHERE DATE_FORMAT(`tankmanager`.`tbl_tanken`.`datum`, '%Y') = '" & selectedJahr & "' AND `tankmanager`.`tbl_kfz`.`kennzeichen`; '" & FormMain.LabelKFZKennzeichen.Text & "';"
    10. 'Statement zurückgeben
    11. System.Diagnostics.Debug.Print(select_statement)
    12. Return select_statement
    13. End Function
    14. End Module
    Das - zeile #15 - müsste das select_statement in einigermassen leserlicher Form ins Output-Fenster drucken.
    von wo du es auskopieren und hier posten kannst.
    Ich habe in diesem Modul dbSelectVerbraucham Anfang des Codes mit F9 einen Haltepunkt gesetzt und das Programm laufen gelassen um dann mit F11 das Programm in Einzelschritten weiter auszuführen bis hin zu der Fehlermeldung.

    Tut mir leid. Falsch verstanden. Ich mach das so wie vorgeschlagen und Poste es heute Abend.

    gruss Gebhard

    So, hier das, was im Ausgabe Fenster angezeigt wird:

    SQL-Abfrage

    1. SELECT
    2. ROUND((SUM(`tankmanager`.`tbl_tanken`.`liter`) / COUNT(`tankmanager`.`tbl_tanken`.`liter`) * 100) /
    3. (SUM(`tankmanager`.`tbl_tanken`.`gefahren`) / COUNT(`tankmanager`.`tbl_tanken`.`gefahren`)),2) AS DGV
    4. FROM `tankmanager`.`tbl_tanken`
    5. WHERE DATE_FORMAT(`tankmanager`.`tbl_tanken`.`datum`, '%Y') = '2020' AND `tankmanager`.`tbl_kfz`.`kennzeichen`; 'DO-944EE';
    6. Ausnahme ausgelöst: "MySql.Data.MySqlClient.MySqlException" in MySql.Data.dll
    7. Das Programm "[16764] TankManager.exe" wurde mit Code 0 (0x0) beendet.

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