Bilderpfad in Access DB .. Bilder selbst im Ordner

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Bilderpfad in Access DB .. Bilder selbst im Ordner

    Hallo Ihr,

    ich verzweifel gerade, habe auch schon gesucht.. aber nichts für mich verwertbares gefunden, da immer alle ihre Bilder direkt in die DB speichern wollen..
    Ich würde gerne die Bilder in einem Ordner speichern wollen und nur den Pfad in die Access Datenbank.. (später will ich auch noch das, dass Bild beim kopierern mit der UserNr. versehen wird)

    Jedenfalls habe ich mal angefangen und wollte einfach mit einem OpenFileDialog und ner Picturebox erstmal das hinbekommen, dass mir das Bild in der Box angezeigt wird.. aber irgendwie mag er mich nicht

    Mein Code

    VB.NET-Quellcode

    1. Private Sub PictureDetailsBox_Click(sender As System.Object, e As System.EventArgs) Handles PictureDetailsBox.Click
    2. Dim BildDaten As String
    3. OpenFileDialog1.ShowDialog()
    4. BildDaten = OpenFileDialog1.FileName
    5. PictureBox1.Image = System.Drawing.Image.FromFile(BildDaten)
    6. End Sub



    evtl. kann mir mal jemand helfen
    Bringt er dir denn den richtigen Namen zurück ?

    VB.NET-Quellcode

    1. MessageBox.Show(BildDaten)


    Bernd

    Edit:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim OFD as New OpenFileDialog 'OpenFileDialog deklarieren
    3. If OFD.ShowDialog = DialogResult.OK Then 'Wenn OK gedrückt wurde...
    4. BildDaten = OFD.FileName
    5. End If
    6. End Sub
    @Bernd .. er zeigt den korrekten Pfad.. aber wieso zeigt er mir das nicht in der PictureBox dann an? verdammich..
    @ErfinderDesRades .. nein leider nicht .. das ist ja an manchen Stellen das schlimme


    EDIT:

    VB.NET-Quellcode

    1. Private Sub PictureDetailsBox_Click(sender As System.Object, e As System.EventArgs) Handles PictureDetailsBox.Click
    2. Dim OFD As New OpenFileDialog 'OpenFileDialog deklarieren
    3. Dim BildDaten As String
    4. With OFD
    5. .CheckFileExists = True
    6. .Filter = "Bild Dateien (*.png;*.jpg)|*.png;*.jpg"
    7. .FilterIndex = 2
    8. If OFD.ShowDialog = DialogResult.OK Then 'Wenn OK gedrückt wurde...
    9. BildDaten = OFD.FileName
    10. MessageBox.Show(BildDaten)
    11. PictureBox1.Image = Image.FromFile(BildDaten)
    12. End If
    13. End With
    14. End Sub

    habe es auf diese Art gemacht jetzt mal zum probieren.. die Messagebox gibt den Pad und den Bildnamen ganz normal aus .. aber

    VB.NET-Quellcode

    1. PictureBox1.Image = Image.FromFile(BildDaten)
    dieser Schnipsel hat wohl nen Prob damit .. aber er zeigt keine Fehler an

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

    Mach das Bild mal so in eine RichTextBox
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim OFD as New OpenFileDialog 'OpenFileDialog deklarieren
    3. If OFD.ShowDialog = DialogResult.OK Then 'Wenn OK gedrückt wurde...
    4. Dim Bmap As New Bitmap(OFD.FileName) '...das Bild als Bitmap deklarieren,...
    5. Clipboard.SetImage(Bmap) '...das Bitmap in den Zwischenspeicher aufnehmen...
    6. RichTextBox1.Paste() '...und in der RichTextBox einfügen
    7. End If
    8. End Sub

    Mal sehen ob das Bild dort ankommt.
    Oder lass das Bild mal in einem Panel anzeigen.

    Bernd
    Das Bild ansich ist also OK.

    gut dann schau dir jetzt die PictureBox Eigenschaften an.
    Dort gibt es den SizeMode(). Dort Stellst du mal Zoom oder Strech ein.
    Nun sollte auch dein Bild angezeigt werden.

    Zu groß wird das Bild nciht sein. Die PictureBox ist für so etwas ja gemacht.

    Bernd
    also mit

    VB.NET-Quellcode

    1. PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
    das habe ich schon versucht da tut sich auch nix
    vllt. muss ich die Bildgröße erst anpassen.. das der das bei jedem bild auf die gleiche größe runterrechnet..
    Schau dir die erste Zeile an

    VB.NET-Quellcode

    1. PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
    2. Dim OFD As New OpenFileDialog 'OpenFileDialog deklarieren
    3. Dim BildDaten As String
    4. With OFD
    5. .CheckFileExists = True
    6. .Filter = "Bild Dateien (*.png;*.jpg)|*.png;*.jpg"
    7. .FilterIndex = 2
    8. If OFD.ShowDialog = DialogResult.OK Then 'Wenn OK gedrückt wurde...
    9. BildDaten = OFD.FileName
    10. PictureBox1.Image = Image.FromFile(BildDaten)
    11. End If
    12. End With
    Also eiglich dürfte es mit der Picturebox.ImageLocation-Property kein Problem sein. Der kann man direkt den FilePath angeben (ich glaub sogar urls aussm INet).
    Und funzt natürlich auch mit Databinding - also das typDataset könnte man wie üblich (u.U. mittm Einzeiler) auch aus einer DB laden und speichern.
    Dateien
    • LoadPics01.zip

      (210,81 kB, 183 mal heruntergeladen, zuletzt: )

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

    @bernd.. super es klappt jetzt vielen Dank!! :)
    @ErfinderDesRades .. hm .. wasn das für ne .zip? ich glaub das ist der nächste schritt den ich machen will ..

    1. Bildname umbenennen in "NamevonTextBox" bzw. Kundennummer
    2. Bildname + Neuer Pfad in Datenbank schreiben (Pfad: .\bilder)
    3. Bild abrufen/ändern anhand der "NamevonTextBox" bzw. Kundennummer


    aber da werde ich erstmal selbst versuchen zu frickeln :)

    Danke Euch

    tuvok schrieb:

    wasn das für ne .zip?
    Das ist 'ne komplette Umsetzung deiner ursprünglichen Anforderung und nochn bischen mehr. Und weitere Anforderungen dranzufrickeln ist kein Problem, wenn man den Ansatz verstanden hat.
    Es kann Bild-Datensätze (mit Pfad und Beschreibung) aus einer Xml laden und im Datagridview darstellen. An den BildPfad ist die Picbox gebunden, sodaß sie immer richtig anzeigt. Klick auf Picbox öffnet den OpenfileDialog zur Änderung des BildPfades, Klick auf Menü-Add fügt einen neuen Datensatz hinzu. Löschen kann man vom DGV aus, und dort kann man die Datensätze auch ändern - das kann aber zu Fehlern führen, wenn man händisch einen Pfad eingibt, der nicht existiert.
    typisiertes Dataset ist eigentlich auf Kommunikation mit Datenbanken ausgelegt. Nur es bietet den zusätzlichen Luxus, dass mans auch direkt als Xml auf Platte speichern kann, was ich immer sehr gerne nutze, weil in dieser Form ist eine Anwendung fabelhaft flexibel in der Entwicklung, und unschlagbar portabel.
    Und so empfehle ich auch, jede Datenverarbeitung zunächst mal zu entwickeln, weil eine DB kann man später jederzeit noch hinterlegen.

    Ich würde dir sehr empfehlen, Datenbänkerei nach diesem Muster zu betreiben - alle anderen mir bekannten Ansätze sind wesentlich komplizierter, fehleranfälliger und weniger leistungsfähig.
    Das schließt vermutlich die Empfehlung ein, deinen DB-Zugriff komplett umzustellen auf ADO.Net, weil das zuvor gesagte gilt auch hier: alle anderen mir bekannten Ansätze sind wesentlich komplizierter, fehleranfälliger und weniger leistungsfähig.
    Solche Ansätze, die mit mehr und umständlicherem Code weniger leistungsfähige Ergebnisse bringen, und sich mit fortschreitenden Anforderungen zT. bis ins irrsinnige verkomplizieren, bezeichne ich schlicht als "Holzweg": Man kommt immer schwieriger voran, und irgendwann muß man doch umkehren.
    Der Microsoft-Way of ADO.Net ist in "Datenbank in 10 Minuten" auf Movie-Tuts gezeigt. Aber auch den kannste wesentlich vereinfachen und verallgemeinern, wennde DBExtensions nutzst - aber als Grundlagenwissen ist ersteres Tut glaub sehr vorteilhaft.

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

    ähm OK danke..
    ich habe meine Datenbanken alle komplett anders und händisch aufgebaut

    VB.NET-Quellcode

    1. con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=.\test.accdb"
    2. cmd.Connection = con



    VB.NET-Quellcode

    1. Try
    2. con.Open() 'Verbindung zur db öffnen
    3. reader = cmd.ExecuteReader()
    4. Do While reader.Read()
    5. DataGridView1.Rows.Add(reader("Kdn"), reader("Vorname"), reader("Nachname"), reader("Anschrift"), reader("Telefon"), reader("Mobil"), reader("Plz"), reader("Ort"))
    6. Loop
    7. reader.Close()
    8. con.Close()
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    11. End Try


    usw. das aber doch nicht der falsche Weg es zu lernen? *denks*
    aber das gehört denke ich auch nicht hier her.. :)

    tuvok schrieb:

    usw. das aber doch nicht der falsche Weg es zu lernen?

    Doch, das ist der falsche Weg. Vermutlich bei Das VB-Openbook von Galileo ist Mist gelernt :evil:
    Er versperrt dir jede Möglichkeit, DataAdapter für dich arbeiten zu lassen, sowie jedes Databinding. Und die Databinding-Möglichkeiten sind gewaltig - gugge vier Views

    Und TryCatch ist ein heißes Eisen
    hmja.. Du magst ja Recht haben.. aber da muss ich wieder bei Null anfangen.. :(


    Was anderes..
    ich habe mir mit

    VB.NET-Quellcode

    1. BildName = IO.Path.GetFileName(BildDaten)
    den Bildname vom Pfad abgeschnitten..
    jetzt wollte ich das Bild in dem String gern umbenennen .. habe dazu aber noch nix gefunden.. ich würde jetzt den Textnamen in ein Label oder so schreiben wollen
    und dann sagen .. Nummer.text + Label.text & .jpg = Nummer.jpg und das dann in den neuen pfad eingeben und das bild dann dort speichern ..