AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi pfadangabe wie bei html
Thema durchsuchen
Ansicht
Themen-Optionen

pfadangabe wie bei html

Ein Thema von vamp79 · begonnen am 10. Jan 2003 · letzter Beitrag vom 10. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
vamp79

Registriert seit: 1. Jan 2003
9 Beiträge
 
#1

pfadangabe wie bei html

  Alt 10. Jan 2003, 09:47
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

vielen dank
vamp79
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#2
  Alt 10. Jan 2003, 11: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
  Mit Zitat antworten Zitat
vamp79

Registriert seit: 1. Jan 2003
9 Beiträge
 
#3
  Alt 10. Jan 2003, 13: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
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#4
  Alt 10. Jan 2003, 13: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
Harry Boldt
  Mit Zitat antworten Zitat
vamp79

Registriert seit: 1. Jan 2003
9 Beiträge
 
#5
  Alt 10. Jan 2003, 14: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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 10. Jan 2003, 14: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7
  Alt 10. Jan 2003, 14: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
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
vamp79

Registriert seit: 1. Jan 2003
9 Beiträge
 
#8
  Alt 10. Jan 2003, 15: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]
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9
  Alt 10. Jan 2003, 15: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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 10. Jan 2003, 16:00
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
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