Autor Beitrag
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mo 14.04.08 20:10 
jo ok aber ich dachte ich soll das aus der db lesen? den pfad für die bilder und speichern auch da drin?

hab nochmal ne frage zu dem, wie man die gesamte db in ner csv speichert hattest mir ja schon mal was dazu gepostet:
bloß jetzt hab ich ein problem wenn ich die csv datei öffnen will mit excel 2007 kommt immer der fehler kann datensatz nicht lesen und in der csv datei ist dann nichts drin?

beim datum hatte ich erst .asdatetime aber das geht ni kannste mir da helfen? und muss das bild nun egentlih string der blob in der db sein?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure TForm1.Button2Click(Sender: TObject);
var
  ProgPath, KopfZeile: string;
  DateiOut: Textfile;
  Kopf: Boolean;
begin
  Kopf := True;
  ProgPath := ExtractFilePath(ParamStr(0));
  KopfZeile := 'ID; Vorname; Nachname; Geburtsdatum; Strasse; Hausnummer; PLZ; Wohnort; E-Mail; Telefonnummer; Handy Nummer; Bild';
  AssignFile(DateiOut, ProgPath + 'Adressdaten.csv');
  try
    rewrite(DateiOut);

    if Kopf then WriteLn(DateiOut, KopfZeile);
    ADOQuery1.First;
    while not ADOQuery1.eof do
      begin
        Write(DateiOut,   ADOQuery1.FieldByName('ID').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Vorname').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Nachname').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Geburtsdatum') + ';'); 
        Write(DateiOut,   ADOQuery1.FieldByName('Straße').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Hausnummer').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('PLZ').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Wohnort').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('E-Mail').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Telefonnummer').AsString + ';');
        Write(DateiOut,   ADOQuery1.FieldByName('Handy Nummer').AsString + ';');
        WriteLn(DateiOut, ADOQuery1.FieldByName('Bild').AsString );
        ADOQuery1.Next;
      end;
  finally
    CloseFile(DateiOut);
  end;
end;
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mo 14.04.08 22:41 
Das was Du da geschrieben hast ist in Ordnung soweit ich das sehe.

Bis auf Geburtsdatum, da muss auch noch ein .AsString dran.

Hast Du Dir die csv datei mal mit dem editor angesehen, was drin steht ?

Das Feld Bild sollte ein String sein und darin ist der vollständige Dateinamen des Bildes mit Pfad.


Zuletzt bearbeitet von SmileySN am Mo 14.04.08 22:48, insgesamt 1-mal bearbeitet
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mo 14.04.08 22:47 
Um einen Fehler in Delphi zu finden gibt es eine Funktion die sich debuging nennt :)
Setze eine Haltemarke vor Query1.first und starte das Programm, dann mit der F7 Taste Schritt für Schritt weitergehen und schauen was das Programm so macht.
Die Variablen kann man sich auch ansehen, indem man die Mouse über eine Variable hält.
Warscheinlich wirst Du feststellen, dass die Do whilw schleife gar nicht oder nur ein mal durchlaufen wird.
Was will uns das sagen ???
Tip: Query1.SQL.Text
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 15.04.08 12:24 
auf was willst du hinaus @SmileySN? komm jetzt ni ganz mit^^

Zitat:
Was will uns das sagen ???
Tip: Query1.SQL.Text


werd das wenn ich zu hause bin mal richtig machen mit der csv datei etc., bloß um das bild in der csv datei auszugeben, muss ich den pfad ja erstmal reinbekommen^^ und da scheitert es zurzeit.
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Di 15.04.08 13:24 
In dem Programmteil der hier zu sehen ist, ist das Select-Statement des Query nicht zu sehen, somit weiß man nicht was gerade angezeigt wird.
Ob überhaupt Datensätze vorhanden sind.
Bevor Du Button2click aufrufst muss im SQL.Text mindestens mal "Select * from Tabellenname" drin stehen, damit überhaupt Datensätze zur Verfügung stehen.

Dein Problem mit dem Bild kann ich nicht nachvollziehen, daher nochmal gaaaanz langsam zum mitlesen:

Auf Deinem Formular liegt neben den anderen DBEdit Feldern ein DBEditFeld mit namen "Bild" vom Typ String;
In dieses Feld kannst Du den Pfad und Namen Deines Bildes eingeben. (z.B. D:\Bilder\Bild1.jpg)
Außerdem ist auf dem Formular auch eine Image-Komponente, in der das Bild angezeigt werden kann.
Im FormShow des Formulares steht dann schon mal, nach dem öffnen der Datenbank, Image1.Picture.LoadFromFile(DBEditBild.Text);
Dasselbe muss auch im button Next und zurück stehen.
Im Verzeichnis d:\Bilder\ sollte das Bild Bild1.jpg liegen.

Das einlesen des Dateinamens kann man dann komfortabel mit einer OpenDialog-Komponente machen.
Falls das Image die .jpg datei nicht anzeigen will, dann lade im Objektispektor vom image einmal das Bild per Hand und nim es dann wieder raus.
Damit hat er die Fileendung dann angelegt.
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 15.04.08 16:25 
erstmal zu der csv datei wenn ich die mit dem editor öffne wird jetzt was angezeigt, nun muss ich aber trotzdem noch was bei dem button ergänzen mit adoquery1.sql.text('Select * from Adressdaten')?
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Di 15.04.08 19:56 
Den Select-Befehl musst Du nicht in dem Buttonklick machen, Du musst nur sicherstellen, dass, wenn der Button geklickt wird, die richtigen Daten auch selektiert sind.
Wenn Du die Liste z.B. sortiert in die CSV-Datei schreiben willst, dann muss der Select Befehl dann "Select * from Adressdaten order by name" heißen.
Wenn Du Deine selektion nie änderst, kann das im Objektinspektor von der Query gemacht werden oder im FormShow.
Du kannst auch einige Buttons für die Sortierung machen.
Einen für name einen für Telefon einen für Ort usw.
Jeweils in den Buttonklick einfach das geänderte Select Statement reinschreiben, eben hinten dann mit "order by name" oder "order by telefon" oder "order by Ort".
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 15.04.08 20:13 
k das mit den srtieren habsch jetzt, bloß nun hab ich noch das problem das ich die csvdatei mit xcel nicht öffnen kann nut mit nem editor?

achja und nochmal zu den bildern, hab ich das jetzt richtig verstanden das ich noch nen button mit opendialog machen soll, der den pfad des bildes in dem editfeld eintragen soll? und wenn ja dann so?:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button3Click(Sender: TObject);
begin
 try
  if OpenPicture.Execute then
     Image1.Picture.LoadFromFile(OpenPicture.FileName);
     ADOQuery1.Edit;
     OpenPicture.FileName := DBEDitBild.Text;
     ADOQuery1.Post;
 except
    ShowMessage('Bild konnte nicht geöffnet werden!');
end;
end;
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 18.04.08 15:16 
hab nochmal ne frage hab das jetzt mit in die buttons vor und zurück gemacht das das bild reingeladen wird zu dem der pfad angegeben wird nun bloß jetzt hab ich ne frage und zwar was wenn ich einen pfad angebe zu einem bild was gar nicht eistiert?

dann kommt ja ne exception aber kann ich das auch it einer messagebox umgehen? hab da schon einiges ausprobiert mit ner if schleife, aber hat gar nichts geklappt
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 18.04.08 15:58 
bei einer Eingabe von Hand solltest du immer erst mit
ausblenden Delphi-Quelltext
1:
if FileExists('DereingegebeneName') then					

prüfen, ob's die Datei überhaupt gibt.
Das kannst du entweder dort machen, wo die Eingabe erfolgt
oder dort, wo du die Eingabe verwendest (...LoadFromFile).

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 18.04.08 17:01 
ah ok danke
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 20.04.08 16:37 
Zu dem FileOpen Dialog meinte ich, dass Du es dem User beim Neuanlegen eines Datensatzes etwas einfacher machen kannst beim auswählen des Bildnamens.
Du kannst natürlich auch einfach nur eine DBEditBox nehmen und den Pfad+Dateinamen des Bildes per Hand reinschreiben.
Beim anzeigen des Bildes hat der Dialog nichts zu suchen.
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mo 21.04.08 15:58 
Hab das jetzt so mit den Bildern in formshow, meinem next button und meinem prior button:
bloß nun hab ich ein problem wenn ich den pfad eines bildes in das edit feld reingeschrieben habe und dann auf meinem button aktualisieren klicke der adoquery1.refresh enthält wird das bild nicht gleich angezeigt muss erst auf den button next oder so klicken

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormShow(Sender: TObject);
begin
Adoquery1.Open;
if Dbeditbild.Text = '' then
Image1.Picture.LoadFromFile('KeinBild.bmp')
else
if FileExists(Dbeditbild.Text) then
Image1.Picture.LoadFromFile(DBEditBild.Text)
else
form1.Show
end;


Dann hätte ich noch eine Frage und zwar kann ich den Pfad des Bildes automatisch irgendwie in das Edit Feld eintragen lassen mit hilfe eines Opendialoges oder so?
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Di 22.04.08 14:39 
>Dann hätte ich noch eine Frage und zwar kann ich den Pfad des Bildes automatisch irgendwie in das Edit Feld eintragen lassen mit hilfe eines Opendialoges oder so?

Nein *grins*

Aber mit ein paar Programmzeilen.
ausblenden Delphi-Quelltext
1:
2:
OpenFileDialog.execute;
DBEdit1.Text:=OpenFileDialog.Filname;


Das macht man mit einenm Button hinter der DBEditBox.

Aber an Deinem Programmcode habe ich noch etwas zu bemängeln:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormShow(Sender: TObject);  
begin  

///////////// Hier eventuell noch das Standard Select Statement mit einbauen, der Übersichlichkeit halber und wenn man mal eine andere Selektion braucht, ist es hier im Quelltext am besten aufgehoben und damit auch gleich dokumentiert was man ausgewählt hat.
ADOQuery1.SQL.Text:='Select * From Adressen oder by Name';

Adoquery1.Open;  
if Dbeditbild.Text = '' then  
Image1.Picture.LoadFromFile('KeinBild.bmp')  
else  
if FileExists(Dbeditbild.Text) then  
Image1.Picture.LoadFromFile(DBEditBild.Text)  
else  

form1.Show  ///////////// Was soll das, versuchst Du hier eine Endlosschleife zu produzieren, du befindest dich bereits in Form1.Show, Wenn kein Dateiname da ist, dann eben Dein "KeinBild.bmp" anzeigen.

end;