Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi pfadangabe wie bei html (https://www.delphipraxis.net/2166-pfadangabe-wie-bei-html.html)

vamp79 10. Jan 2003 08:47


pfadangabe wie bei html
 
hallo hallo,

ich habe ein kleines datenbankprogramm geschrieben.
in dem programm werden auch bilder gespeichert (JPEG´s). es wird in
der tabelle allerdings nur de Pfad diese jpeg´s gespeichert.

z.B. c:\bilder\bild.jpg

diese pfad wird dann in einem TImage angezeigt.

jetzt mein problem:

wenn ich am ende des jahres alle daten brenne und später auf der cd
aus angucken möchte findet das programm - selbst wenn die bilder
mitgebrannt werden - den pfad ja nicht mehr.

kamm man das irgendwie so programmieren wie z.B. bei html

der quelltext sähe dann etwa so aus ..\bilder\bild.jpg

also, egal wo (festplatte oder cd rom) der ordner
liegt, das programm findet die bilder.

die ordner müssen natürlich gleich bleiben, mir geht es nur um die laufwerksangabe.

ich hoffe ich hab mich verständlich ausgedrückt und jemand kann mir helfen :D

vielen dank
vamp79

Sebastian Nintemann 10. Jan 2003 10:36

Hi, ich weiß jetzt nicht wie das bei dieser Datenbank ist, aber normalerweise sollten relative Pfadangaben funktionieren, wenn du in Delphi zb ein Bild lädst kannst du ja auch 'bild.bmp' oder '../images/xxx.bmp' angeben.

Gruß, Sebastian

vamp79 10. Jan 2003 12:09

das werde ich dann mal ausprobieren, danke.

hab jetzt allerdings ein anderes problem:

mein prog läuft so:
durch einen OpenPictureDialog wähle ich ein bild aus... der pfad des bildes wird dann in der datenbank abgelegt.

der pfad könnte:

c:\bilder\bild1.jpg oder d:\fotos\fotos\foto1.jpg
heißen, das ist dem Programm egal

jetzt wäre es nur besser wenn der OpenPictureDialog erst das bild in einen ordner (g:\bilder\) kopiert und dann diesen neuen pfad in der datenbank speichert.

also:
g:\bilder\bild1.jpg oder g:\bilder\foto1.jpg

sonst funktioniert das mit der relativen pfadangabe ja nicht

kennst du den quelltext womit ich über den OpenPictureDialog bilder in einen ordner kopiere??

vielen dank
vamp79

harrybo 10. Jan 2003 12:10

Hi vamp79,

Du kannst den Benutzer ein Laufwerk, oder Root-Verzeichnis wählen lassen (mit API Funktion SHBrowseForFolder oder mit fertiger Komponente, z.B. http://www.informatik.hu-berlin.de/~vitt/delphi/) In der Datenbank speicherst Du dann den Rest, z.B. 'images\bild_01.jpg'. Den absolute Pfad zum Bild erzeugst Du durchverknüpfen der beiden Strings.

gruß, harrybo

vamp79 10. Jan 2003 13:00

danke muß ich mal probieren, hört sich aber noch en bisschen kompliziert an (bin anfänger in delphi).

Kann man den OpenPictureDialog, oder besser dem button der den
OpenPictureDialog öffnet nicht einfach sagen, das er erst das
ausgewählte bild automatisch in einen fest dafür vorgesehenen
Ordner kopiert (z.B. d:\bilder) und danach den neuen pfad in der
datenbank speichert (z.B. d:\bilder\bild1.jpg)?

vielen dank
vamp79

Christian Seehase 10. Jan 2003 13:28

Moin Vamp,

dazu mal kurz ein Kommentar zu den Dialogen TOpenDialog TSaveDialog und deren Picture Varianten.

Mit diesen Dialogen wird weder eine Datei geöffnet (Open), noch gespeichert (Save), sondern nur ein bequemer Weg geliefert den Pfad zu einer, oder mehreren (Option ofAllowMultiSelect = true) Dateien zu erhalten.

Was Du dann mit dem Ergebnis anfängst ist Dein Problem.

Beispiel:
Mittels TOpenPictureDialog wird der Pfad zu einem JPG ausgewählt.
Da Du die Bilder ein einem bestimmten Verzeichnis brauchst, kopierst Du es jetzt in dieses Verzeichnis (unter gleichem oder anderem Namen, Namen extrahieren mit ExtractFileName), und speicherst diesen Pfad in der Datenbank.
Damit die Datenstruktur erhalten bleibt, bzw. noch nachzuvollziehen ist woher das Bild ursprünglich stammt, wäre es vielleicht sogar sinnvoll nur den : der Laufwerksangabe zu entfernen und dann den gesamten Pfad als relativen Pfad zu Deinem eigenen Speicherpfad zu betrachten, so dass ein Bild das aus c:\bilder stammt und den Namen foto1.jpg hat in
SaveImages\c\bilder\foto1.jpg gespeichert wird.

Achtung: Wenn Du auch Netzwerkfreigaben zur Auswahl zulässt, müsste natürlich nicht nur der : entfernt werden, sondern ggf. die \\ am Anfang des Rechernnamens.

Um die Verzeichnisse problemlos anlegen zu können sei noch das Stichwort ForceDirectories genannt.

Sharky 10. Jan 2003 13:31

Hai,

hier mal ein einfachs Beispiel:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
 dateiname,
 quelle,
 ziel  : String;

begin
 ziel := 'c:\bilder\';
 Forcedirectories (ziel); // UNIT FileCtrl
 If (OpenPictureDialog1.Execute) then //Ein Bild wurde ausgewählt
  begin
   quelle := OpenPictureDialog1.FileName;
   dateiname := ExtractFileName (quelle); //Unit Sysutils
   CopyFile(PChar(quelle), PChar(ziel + dateiname), false); //Vorhandende Dateien werden nicht überschrieben.
  end;
end;
Chris war mal wieder schneller :oops:

vamp79 10. Jan 2003 14:53

@Sharky:
ich habs ausprobiert, funtioniert aber irgendwie nicht.

@Christian Seehase:
Hab ich nicht wirklich verstanden was du jetzt meinst, sorry

vielleicht könnt ihr mir das anhand meines quelltextes beschreiben:

ich hab die ganzen DBEdit´s, Label´s usw, mal weggelassen



Delphi-Quellcode:
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
If OpenPictureDialog1.Execute then Begin

Table1.Edit;        
Table1.FieldbyName('Bild1').AsString:=OpenPictureDialog1.Filename;
Table1.Post;
End;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
 image1.picture := nil;
  if not table1.FieldByName('Bild1').IsNull then
      if FileExists(table1.FieldByName('Bild1').AsString) then
          image1.Picture.LoadFromFile(table1.FieldByName('Bild1').AsString);

 image2.picture := nil;
  if not table1.FieldByName('Bild2').IsNull then
      if FileExists(table1.FieldByName('Bild2').AsString) then
          image2.Picture.LoadFromFile(table1.FieldByName('Bild2').AsString);

  image3.picture := nil;
  if not table1.FieldByName('Bild3').IsNull then
      if FileExists(table1.FieldByName('Bild3').AsString) then
          image3.Picture.LoadFromFile(table1.FieldByName('Bild3').AsString);

  image4.picture := nil;
  if not table1.FieldByName('Bild4').IsNull then
      if FileExists(table1.FieldByName('Bild4').AsString) then
          image4.Picture.LoadFromFile(table1.FieldByName('Bild4').AsString);

  image5.picture := nil;
  if not table1.FieldByName('Bild1').IsNull then
      if FileExists(table1.FieldByName('Bild1').AsString) then
          image5.Picture.LoadFromFile(table1.FieldByName('Bild1').AsString);

  image6.picture := nil;
  if not table1.FieldByName('Bild2').IsNull then
      if FileExists(table1.FieldByName('Bild2').AsString) then
          image6.Picture.LoadFromFile(table1.FieldByName('Bild2').AsString);

  image7.picture := nil;
  if not table1.FieldByName('Bild3').IsNull then
      if FileExists(table1.FieldByName('Bild3').AsString) then
          image7.Picture.LoadFromFile(table1.FieldByName('Bild3').AsString);

  image8.picture := nil;
  if not table1.FieldByName('Bild4').IsNull then
      if FileExists(table1.FieldByName('Bild4').AsString) then
          image8.Picture.LoadFromFile(table1.FieldByName('Bild4').AsString);

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
If OpenPictureDialog2.Execute then Begin

Table1.Edit;
Table1.FieldbyName('Bild2').AsString:=OpenPictureDialog2.Filename;
Table1.Post;
End;
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
Image2.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
Image3.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
If OpenPictureDialog3.Execute then Begin

Table1.Edit;
Table1.FieldbyName('Bild3').AsString:=OpenPictureDialog3.Filename;
Table1.Post;
End;
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
Image4.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
If OpenPictureDialog4.Execute then Begin

Table1.Edit;
Table1.FieldbyName('Bild4').AsString:=OpenPictureDialog4.Filename;
Table1.Post;
End;
end;

procedure TForm1.Image5Click(Sender: TObject);
begin
Image5.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Image6Click(Sender: TObject);
begin
Image6.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Image7Click(Sender: TObject);
begin
Image7.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.Image8Click(Sender: TObject);
begin
Image8.Picture.LoadFromFile('G:\Bilder\bla.jpg');
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Table1.Insert
end;

end.


nachher sollte das dann so etwa aussehen

procedure TForm1.Button2Click(Sender: TObject);
begin
If OpenPictureDialog1.Execute then Begin

speicher das bild in G:\bilder                    (hierfür brauch ich den quelltext)
 und trage G:\bilder\ausgewähtes_foto.jpg in tabele ein                  (hierfür brauch ich den quelltext)

Table1.Edit;        
Table1.FieldbyName('Bild1').AsString:=OpenPictureDialog1.Filename;
Table1.Post;
End;
end;



danke
vamp79


[edit=Daniel B]Delphi-Tags; MfG Daniel B.[/edit]

Daniel B 10. Jan 2003 14:57

Hallo,

es wäre Nett wenn Du so lange Code-Ausschnitte einfach als .pas oder .txt anhängen könntest.
Ausserdem wäre es sehr sinnvoll, die Delphi-Tags zu benutzen.

[*delphi]Code[/delphi] //Ohne das sternchen...
Danke!

Grüsse, Daniel :hi:

Sharky 10. Jan 2003 15:00

Zitat:

Zitat von vamp79
@Sharky:
ich habs ausprobiert, funtioniert aber irgendwie nicht.

Und was geht nicht?

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  dateiname,
    quelle,
    ziel           : string;

begin
  ziel := 'g:\bilder\';                // "ziel" sollte natürlich Global deklariert sein. Als Konstante oder Variable
  forcedirectories(ziel);              // UNIT FileCtrl
  if (OpenPictureDialog1.Execute) then //Ein Bild wurde ausgewählt
    begin
      quelle := OpenPictureDialog1.FileName;
      dateiname := ExtractFileName(quelle); //Unit Sysutils
      CopyFile(PChar(quelle), PChar(ziel + dateiname), false); //Vorhandende Dateien werden nicht überschrieben.
      Table1.Edit;
      Table1.FieldbyName('Bild1').AsString := ziel + dateiname; //Abspeichern des neun Ortes des Bildes (g:\bilder\bildname.jpg
      Table1.Post;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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