Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bildpfad eines TImages abspeichern (https://www.delphipraxis.net/194004-bildpfad-eines-timages-abspeichern.html)

Luca Haas 5. Okt 2017 07:54

Datenbank: MSSQL • Version: ? • Zugriff über: TADO Query

Bildpfad eines TImages abspeichern
 
Hi Leute,
ich versuche aktuell den Pfad eines Bildes in einer Datenbank abzuspeichern.

Allerdings habe ich das Problem, dass ich alles nur als "TPicture" und nicht als richtigen Pfad speichere

Delphi-Quellcode:
// Bild einfügen
procedure TForm1.Image1DblClick(Sender: TObject);
begin
  Image1.Stretch := true;
  if OpenPictureDialog1.Execute then
  begin
    Image1.Picture.LoadFromFile(OpenPictureDialog1.filename);
    KST_LagerbewertungQuery.Edit;
    Image1.Picture.SaveToFile(KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString);
    KST_LagerbewertungQuery.Post;
  end;
end;
Das ist die entsprechende Stelle im Code, hoffe jemand kann mir weiterhelfen
MfG Luca

TiGü 5. Okt 2017 08:08

AW: Bildpfad eines TImages abspeichern
 
Die Lösung ist total simpel, aber es würde für dich als Auszubildenden keinen Lerneffekt geben, wenn wir dir die fertige Lösung hinknallen.

Bitte kommentiere deinen Quelltext mal Zeile für Zeile: WAS und WARUM machst du in der jeweiligen Zeile.
Anhand dessen können wir dir Schritt für Schritt helfen. :idea:

Luca Haas 5. Okt 2017 08:14

AW: Bildpfad eines TImages abspeichern
 
Delphi-Quellcode:
procedure TForm1.Image1DblClick(Sender: TObject);
begin
  Image1.Stretch := true; // Bildgröße anpassen
  if OpenPictureDialog1.Execute then //Abfrage ob OpenPictureDialog ausgeführt wurde
  begin
    Image1.Picture.LoadFromFile(OpenPictureDialog1.filename); //laden des Bildes aus dem OpenPictureDialog
    KST_LagerbewertungQuery.Edit; //Query Bearbeitung Beginnen
    Image1.Picture.SaveToFile(KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString); //Bildpfad abspeichenr ?! :?:
    KST_LagerbewertungQuery.Post; //Query Bearbeitung beenden
  end;
end;

TiGü 5. Okt 2017 08:16

AW: Bildpfad eines TImages abspeichern
 
Ok, jetzt bitte die folgende Zeile mithilfe einer Zwischenvariablen auflösen:

Delphi-Quellcode:
Image1.Picture.SaveToFile(KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString);

Luca Haas 5. Okt 2017 08:24

AW: Bildpfad eines TImages abspeichern
 
Meinst du sowas wie
Delphi-Quellcode:
 
a := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
Image1.Picture.SavetoFile(a);
Bin mir nicht sicher ob ich weiß was Zwischenvariablen sind

Glados 5. Okt 2017 08:27

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Ok, jetzt bitte die folgende Zeile mithilfe einer Zwischenvariablen auflösen:
Ok, und jetzt gebe deinen Variablen bitte anständige und verständliche Namen ;)

Luca Haas 5. Okt 2017 08:30

AW: Bildpfad eines TImages abspeichern
 
Delphi-Quellcode:
Bild := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
Image1.Picture.SavetoFile(Bild);
Versteh ich grade was falsch, es ist doch egal wie die Variablen heißen, oder nicht ?

Glados 5. Okt 2017 08:35

AW: Bildpfad eines TImages abspeichern
 
Zitat:

es ist doch egal wie die Variablen heißen, oder nicht ?
Nein eben nicht. Es gehört zum guten Ton bzw. zu gutem Code auch verständliche Variablennamen zu verwenden.

Zitat:

Allerdings habe ich das Problem, dass ich alles nur als "TPicture" und nicht als richtigen Pfad speichere
Dazu habe ich eine Frage. Wieso bist du der Meinung du speicherst ein "TPicture" ab? Was ist deiner Meinung nach denn ein TPicture und was kommt tatsächlich auf deiner Festplatte an?

DeddyH 5. Okt 2017 08:38

AW: Bildpfad eines TImages abspeichern
 
Mal eine kleine Korrektur, vielleicht fällt es dann auf:
Zitat:

Delphi-Quellcode:
//laden des Bildes aus dem OpenPictureDialog

-->
Delphi-Quellcode:
//laden des Bildes aus der im OpenPictureDialog ausgewählten Datei (ganzer Pfad)

TiGü 5. Okt 2017 08:38

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382622)
Delphi-Quellcode:
Bild := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
Image1.Picture.SavetoFile(Bild);
Versteh ich grade was falsch, es ist doch egal wie die Variablen heißen, oder nicht ?

Für den Compiler und dem Computer ist es egal.
Aber nicht für dich, dein zukünftiges ich in zwei Monaten wenn du den Quelltext wieder anschaust und erst recht nicht für deinen Kollegen, der sich deinen Quelltext anschauen muss.

Ok, jetzt erkläre mit deinen eigenen Worten, was genau der Aufruf
Delphi-Quellcode:
Image1.Picture.SavetoFile
bewirkt?
Was genau wird in SaveToFile übergeben?

p80286 5. Okt 2017 08:39

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382622)
Delphi-Quellcode:
Bild := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
Image1.Picture.SavetoFile(Bild);
Versteh ich grade was falsch, es ist doch egal wie die Variablen heißen, oder nicht ?

Ja, im Prinzip ist es egal wie die Variable heißt, nur , wenn eine Variable "Bild" heißt, und die andere "Bildpfad" oder "BildDateiName" welchen Inhalt erwartet man dann?

Gruß
K-H

Luca Haas 5. Okt 2017 08:44

AW: Bildpfad eines TImages abspeichern
 
@Glados

Okay daran habe ich nicht gedacht, ändere das natürlich dann noch in meinem Programm

Ich überprüfe mit einer SQL-Abfrage was ich in meiner Datenbank erhalte was immer ein TPicture ist, schaue ich mir andere Programme an (von Kollegen geschrieben) sieht man dort immer den Pfad

Luca Haas 5. Okt 2017 08:47

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von TiGü (Beitrag 1382626)
Ok, jetzt erkläre mit deinen eigenen Worten, was genau der Aufruf
Delphi-Quellcode:
Image1.Picture.SavetoFile
bewirkt?
Was genau wird in SaveToFile übergeben?

Ich glaube das soll bewirken, dass der String der Datei, also von meinem Bild gespeichert wird

Glados 5. Okt 2017 08:47

AW: Bildpfad eines TImages abspeichern
 
Was p80286 dir sagen wollte...

Guck dir folgende Zeile an
Zitat:

Bild := KST_LagerbewertungQuery.FieldByName('Bildpfad').As String;
Und jetzt guck dir p80286's Nachricht noch einmal an.



Zitat:

Ich überprüfe mit einer SQL-Abfrage...
Zitat:

Ich glaube das soll bewirken, dass der String der Datei, also von meinem Bild
Nichts für ungut aber deinen letzten Satz kann man nur schwer lesen. Und jedenfalls ich muss da viel hinein interpretieren und überlegen um ihn zu verstehen.

TiGü 5. Okt 2017 08:54

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382629)
Zitat:

Zitat von TiGü (Beitrag 1382626)
Ok, jetzt erkläre mit deinen eigenen Worten, was genau der Aufruf
Delphi-Quellcode:
Image1.Picture.SavetoFile
bewirkt?
Was genau wird in SaveToFile übergeben?

Ich glaube das soll bewirken, dass der String der Datei, also von meinem Bild gespeichert wird

Ok, jetzt mache aus unsicheren Glauben vollwertiges Wissen und suche die offizielle Dokumentation zu SaveToFile.
Die gibt es im Internet (Google ist dein Freund) oder wenn die Hilfe installiert ist ganz klassisch per F1.

Kehre danach wieder hierher und erläutere nochmal was SaveToFile macht.

Luca Haas 5. Okt 2017 08:57

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Glados (Beitrag 1382630)
Bild := KST_LagerbewertungQuery.FieldByName('Bildpfad').As String;

Wäre dann so etwas wie Bildname passender ?



Zitat:

Zitat von Glados (Beitrag 1382630)
Ich überprüfe mit einer SQL-Abfrage...

Damit meine ich, dass ich in einem SQL Editor
Code:
SELECT Bildpfad FROM Tabelle1
eingegeben habe und er mir in der Spalte Bildpfad überall TPicture ausgibt.


Zitat:

Zitat von Glados (Beitrag 1382630)
Nichts für ungut aber deinen letzten Satz kann man nur schwer lesen. Und jedenfalls ich muss da viel hinein interpretieren und überlegen um ihn zu verstehen.

Also ein SaveToFile speichert den String, des Namens, der angebenenen Datei.

DeddyH 5. Okt 2017 08:59

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382633)
Also ein SaveToFile speichert den String, des Namens, der angebenenen Datei.

Nein! TPicture.SaveToFile speichert die Bilddaten, nicht den Pfad.

Luca Haas 5. Okt 2017 09:04

AW: Bildpfad eines TImages abspeichern
 
Okay, dann liegt es wohl daran, dass er mir nur TPicture ausgibt, aber wie speichere ich dann den Pfad ?

DeddyH 5. Okt 2017 09:11

AW: Bildpfad eines TImages abspeichern
 
Schau Dir doch meinen Beitrag #9 noch einmal an, Du hast ja den Pfad.

Glados 5. Okt 2017 09:22

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Wäre dann so etwas wie Bildname passender ?
Ne. Denn du bekommst ja so gesehen keinen Namen zurück sondern etwas anderes. Überleg mal ;)

Zitat:

Damit meine ich, dass ich in einem SQL Editor
eingegeben habe und er mir in der Spalte Bildpfad überall TPicture ausgibt.
Wieso denkst du, du bekommst ein TPicture zurück?
Du bist in Spalte Bildpfad und bekommst ein TPicture zurück... glaube ich nicht.

Luca Haas 5. Okt 2017 09:25

AW: Bildpfad eines TImages abspeichern
 
Also erhalte ich den Pfad über
Delphi-Quellcode:
Image1.Picture.LoadFromFile(OpenPictureDialog1.filename);
und speichere ihn über
Delphi-Quellcode:
Bildname := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsInteger;
Image1.Picture.SavetoFile('Bildname');
oder habe ich das falsch verstanden ?

mensch72 5. Okt 2017 09:28

AW: Bildpfad eines TImages abspeichern
 
Auf wenn dir "typen" völlig egal sind, dein Delphi will sie;)


Delphi-Quellcode:
Bildname := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
Image1.Picture.SavetoFile(Bildname);

TiGü 5. Okt 2017 09:32

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382640)
Also erhalte ich den Pfad über
Delphi-Quellcode:
Image1.Picture.LoadFromFile(OpenPictureDialog1.filename);
und speichere ihn über
Delphi-Quellcode:
Bildname := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsInteger;
Image1.Picture.SavetoFile('Bildname');
oder habe ich das falsch verstanden ?

Du hast es falsch verstanden.
Was genau möchtest du erreichen?
Ich nehme an, du möchtest den Bildpfad oder von mir aus den Filename in die Datenbank speichern, ist das so korrekt?

Drösel doch mal diese Zeile:
Delphi-Quellcode:
Image1.Picture.LoadFromFile(OpenPictureDialog1.filename);
so auf
Delphi-Quellcode:
var
  ImageFileName: string;
begin
  ImageFileName := OpenPictureDialog1.filename;
  Image1.Picture.LoadFromFile(ImageFileName);
...
Macht es jetzt Klick?

Luca Haas 5. Okt 2017 09:33

AW: Bildpfad eines TImages abspeichern
 
@mensch72
Also vorher hatte ich auch .AsString allerdings erhalte ich dann eine Fehlermeldung, bezüglich inkompatibler Typen 'Integer' und 'string', deswegen hatte ich es auf .AsInteger geändert.

Ähnliches bei den '' um mein Bildname, dort habe ich die selbe Fehlermeldung nur umgekehrt erhalten.

Edit: Mein Fehler hatte die Variable falsch deklariert

Luca Haas 5. Okt 2017 09:41

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von TiGü (Beitrag 1382642)
Macht es jetzt Klick?

Ja jetzt hat es endlich Klick gemacht, es läuft jetzt alles
Danke euch, auch wenn ich ein schwieriger Fall war(,bzw bin).:-D

Glados 5. Okt 2017 09:42

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Also vorher hatte ich auch .AsString allerdings erhalte ich dann eine Fehlermeldung, bezüglich inkompatibler Typen 'Integer' und 'string', deswegen hatte ich es auf .AsInteger geändert.
Welchen Datentyp hat Bildname? Man darf nicht immer blind dem Compiler vertrauen. Wenn man doch explizit einen String möchte, dann ändere ich nichts zu Integer ab :wall:

Zitat:

es läuft jetzt alles
Zeigst du die Lösung?

mensch72 5. Okt 2017 09:43

AW: Bildpfad eines TImages abspeichern
 
..."Zeigst du die Lösung?"...

=> ja stell dich doch nicht knausrig mit Infos an, was in deiner Tabelle eigentlich drin steht

1. bitte Screenshot vom SQL Explorer: "select * from KST_Lagerbewertung"
2. dann bitte ScreenShot vom Windows DateiExplorer, wo man sie wo und wie die Bilder auf der Platte liegen

=> Mag ja sein das in Integerfeld in der DB eine BildNummer speichert... dann wäre "iBildNummer" auch die passende DelphiVariable dazu:)
=> Mag auch sein, das wer die Bilder auf der Platte direkt per Nummer speichert, aber zu 99,9% NEIN... da fehlt ganz sicher das BilderRoot davor und die Dateiendung danach!?


Es ist mir schleierhaft, wie du ohne so GrundsatzInfos oder IstAnalyse einfach drauf losprogrammierst :(

Luca Haas 5. Okt 2017 09:46

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Glados (Beitrag 1382646)
Zeigst du die Lösung?

Delphi-Quellcode:
procedure TForm1.Image1DblClick(Sender: TObject);
var
  ImageFileName: string;
begin
  Image1.Stretch := true;
  if OpenPictureDialog1.Execute then
  begin
    ImageFileName := OpenPictureDialog1.filename;
    Image1.Picture.LoadFromFile(ImageFileName);

    KST_LagerbewertungQuery.Edit;
    ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
    Image1.Picture.SavetoFile(ImageFileName);
    KST_LagerbewertungQuery.Post;
  end;
end;

DeddyH 5. Okt 2017 09:52

AW: Bildpfad eines TImages abspeichern
 
Ob das so richtig ist? Ich möchte wetten, dass Dein Compiler Dir dezente Hinweise gibt.

Jumpy 5. Okt 2017 09:52

AW: Bildpfad eines TImages abspeichern
 
Das ist der Nachteil von Fragend-Entwickelndem-Unterricht in der Forum-Quorum-Variante.
Der Schüler gibt sich mit einer halbwegs fertigen Lösung zufrieden, damit er endlich Ruhe hat. :-D


Die Frage ist doch: Was möchtest du wirklich machen? Ich vermute mal:
1. Bild im Dateisystem suchen.
2. Öffnen und Anzeigen.
3. Dann den Pfad zu dem Bild in der Datenbank speichern.

Da ist bei dir Punkt 3 noch falsch!
Code:
ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
müsste umgedreht werden!

Was du vielleicht unabhängig davon (an anderer Stelle) auch noch möchtest ist:
- Gibt es zum Datensatz schon einen Bildpfad in der Datenbank, dann:
1. Prüfen ob es das Bild im Dateisystem gibt
2. Öffnen und anzeigen des Bildes.

Luca Haas 5. Okt 2017 09:53

AW: Bildpfad eines TImages abspeichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mensch72 (Beitrag 1382647)
1. bitte Screenshot vom SQL Explorer: "select * from KST_Lagerbewertung"
2. dann bitte ScreenShot vom Windows DateiExplorer, wo man sie wo und wie die Bilder auf der Platte liegen

Screenshot im Anhang

Luca Haas 5. Okt 2017 09:55

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von DeddyH (Beitrag 1382650)
Ob das so richtig ist? Ich möchte wetten, dass Dein Compiler Dir dezente Hinweise gibt.

Delphi meckert noch, dass die geladenen Bilder keine PNG-Bilder sind, dachte aber das liegt an den Bildern selbst und nicht am Programm.

TiGü 5. Okt 2017 09:59

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382648)
Zitat:

Zitat von Glados (Beitrag 1382646)
Zeigst du die Lösung?

Delphi-Quellcode:
procedure TForm1.Image1DblClick(Sender: TObject);
var
  ImageFileName: string;
begin
  Image1.Stretch := true;
  if OpenPictureDialog1.Execute then
  begin
    ImageFileName := OpenPictureDialog1.filename;
    Image1.Picture.LoadFromFile(ImageFileName);

    KST_LagerbewertungQuery.Edit;
    ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
    Image1.Picture.SavetoFile(ImageFileName);
    KST_LagerbewertungQuery.Post;
  end;
end;

Ich wette dein ganzes Bruttoausbildungsgehalt, dass das so nicht das gewünschte Ergebnis ist.
Du möchtest doch den Pfad zur Bilddatei IN die Datenbank SCHREIBEN.
Aktuell LIEST du irgendwas AUS der Datenbank.

Hast du denn gar keine Aufgabenstellung von deinem Ausbilder bekommen?

Luca Haas 5. Okt 2017 10:06

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von TiGü (Beitrag 1382654)
Hast du denn gar keine Aufgabenstellung von deinem Ausbilder bekommen?

Die Aufgabe war, über den OpenPictureDialg ein Bild auszuwählen, dass in der Datenbank abzuspeichern und in einem TImage anzeigen zu lassen, sodass immer wieder drauf zugegriffen werden kann.
Außerdem soll ich über ein OnScroll-Ereignis zwischen den Bildern hin und herscrollen(wenn man in der Datenbank scrollt) und wenn man Rechtsklick auf das Bild in TImage macht soll sich das Bild in einem neuen Fenster größer öffnen (dafür soll ich ShellExecute benutzen).

Jumpy 5. Okt 2017 10:21

AW: Bildpfad eines TImages abspeichern
 
Dann lag ich ja in #30 nicht schlecht.

Dreh die erste Zeile um und lass die zweite weg und du hast Teil 1 der Aufgabe erfüllt:

Delphi-Quellcode:
ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
//Image1.Picture.SavetoFile(ImageFileName);

Luca Haas 5. Okt 2017 10:27

AW: Bildpfad eines TImages abspeichern
 
Okay danke Jumpy, hab deine Nachricht eben glaube ich teilweise überlesen.
Auf jedenfall speichere ich jetzt die Bildpfade korrekt und kann mich endlich den anderen Aufgaben widmen

TiGü 5. Okt 2017 10:42

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Jumpy (Beitrag 1382657)
Dann lag ich ja in #30 nicht schlecht.

Dreh die erste Zeile um und lass die zweite weg und du hast Teil 1 der Aufgabe erfüllt:

Delphi-Quellcode:
ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
//Image1.Picture.SavetoFile(ImageFileName);

Nur damit das klar ist, Jumpy meint explizit:
Delphi-Quellcode:
KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString := ImageFileName;
//Image1.Picture.SavetoFile(ImageFileName);

Luca Haas 5. Okt 2017 10:44

AW: Bildpfad eines TImages abspeichern
 
Ja das habe ich auch so, auch wenn ich mich im laufe dieses Threads warscheinlich ziemlich duselig angestellt habe, ich weiß noch wie man etwas umdreht :-)

Glados 5. Okt 2017 12:14

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Luca Haas (Beitrag 1382648)
Zitat:

Zitat von Glados (Beitrag 1382646)
Zeigst du die Lösung?

Delphi-Quellcode:
procedure TForm1.Image1DblClick(Sender: TObject);
var
  ImageFileName: string;
begin
  Image1.Stretch := true;
  if OpenPictureDialog1.Execute then
  begin
    ImageFileName := OpenPictureDialog1.filename;
    Image1.Picture.LoadFromFile(ImageFileName);

    KST_LagerbewertungQuery.Edit;
    ImageFileName := KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString;
    Image1.Picture.SavetoFile(ImageFileName);
    KST_LagerbewertungQuery.Post;
  end;
end;

Kommt mir spanisch vor. Denn dein ursprünglicher Code aus Beitrag #1 ist mit diesem hier, bis auf die Zwischenvariablen, quasi identisch.

Luca Haas 6. Okt 2017 08:28

AW: Bildpfad eines TImages abspeichern
 
Zitat:

Zitat von Glados (Beitrag 1382680)
Kommt mir spanisch vor. Denn dein ursprünglicher Code aus Beitrag #1 ist mit diesem hier, bis auf die Zwischenvariablen, quasi identisch.

Delphi-Quellcode:
procedure TForm1.Image1DblClick(Sender: TObject);
var
  ImageFileName: string;
begin
  if OpenPictureDialog1.Execute then
  begin
    ImageFileName := OpenPictureDialog1.filename;
    Image1.Picture.LoadFromFile(ImageFileName);
    KST_LagerbewertungQuery.Edit;
    KST_LagerbewertungQuery.FieldByName('Bildpfad').AsString := ImageFileName;
    KST_LagerbewertungQuery.Post;
  end;
end;
tschuldige, hab ja noch eine Zeile "rumgedreht", sieht jetzt so aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz