Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [FTP] Daten austausch Programm mit macken. (https://www.delphipraxis.net/86791-%5Bftp%5D-daten-austausch-programm-mit-macken.html)

J.P. 19. Feb 2007 20:12


[FTP] Daten austausch Programm mit macken.
 
Hallo Leute! hier ist jetzt mein zweiter anlauf. Theoretisch sollte alles klappen, aber irgentwie lädt er die datei nicht herunter. WAS MACHE ICH FALSCH? Ich bin im moment wirklich Ratlos.
Delphi-Quellcode:
var
  Form1: TForm1;
  SpeicherOrt,uploadfilename,localfile,Initialien,s:string;
  x:integer;
  implementation

{$R *.dfm}

procedure check;
begin
 form1.idftp1.disconnect;
 form1.idftp1.connect(true);
 form1.idftp1.List(form1.listbox2.Items,'',false);
 x:=0;
 repeat
  x:=x+1;
  s:=form1.listbox2.items[x];
  if s[1]+s[2] = initialien[1]+initialien[2] then form1.listbox1.Items.Add(s);
 until x=form1.listbox2.ItemIndex;
 x:=1;
 form1.idftp1.Get(form1.ListBox1.Items[1],Speicherort+form1.ListBox1.Items[1],true); // <<<< da, das Funktioniert aus irgenteinem Grund nicht
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 LMDDirdlg1.Execute;
 edit5.Text:=LMDDirdlg1.Path;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   idftp1.Disconnect;
   case MessageBox(0, 'Haben sie wirklich alles ausgefüllt? Schauen sie lieber nochmal nach bevor sie "Ja" klicken', 'Sicherheitsfrage    :-)', MB_ICONQUESTION or MB_YESNO) of
     idYes: begin
    MessageDlg('Gut :-)'+#13#10+'Nun wird die Verbindung zum Internet aufgebaut', mtInformation, [mbOK], 0);
               idftp1.Host:=edit4.Text;
               idftp1.Password:=edit3.Text;
               idftp1.User:=edit2.Text;
               SpeicherOrt:=edit5.text;
               Initialien:=edit1.text;
               check;
               timer1.Enabled:=true;
            end;


   end;
end;
 
procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if x<listbox1.ItemIndex then begin
 x:=x+1;
form1.idftp1.Get(form1.ListBox1.Items[x],Speicherort+form1.ListBox1.Items[x],true);
end else label6.Caption:= 'Es sind '+inttostr(x)+ ' neue Dateien da!';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
check;
end;

end.
Ich hab ein bischen was ausgelassen, aber das gehörte eh nicht zum Problem. Wär echt toll wenn einer von euch wüsste was ich hier falsch mache...
mfG J.P.

IngoD7 19. Feb 2007 21:24

Re: noch ein Problem mit idFTP
 
Zitat:

Zitat von J.P.
Delphi-Quellcode:
x:=0;
repeat
  x:=x+1;
  s:=form1.listbox2.items[x];
  if s[1]+s[2] = initialien[1]+initialien[2] then form1.listbox1.Items.Add(s);
until x=form1.listbox2.ItemIndex;

Du weißt, dass diese Schleife hier den ersten Eintrag deiner Listbox2 nicht beachtet und dass sie nur bis zum markierten Eintrag läuft (also nicht den ganzen Inhalt der Listbox abklappert)?

//NACHTRAG:

Und natürlich nicht ganz unwichtig:
Was heißt "funktioniert nicht"? Fängt es dann an zu regnen oder wird eine Exception geworfen oder wird eine falsche Datei heruntergeladen oder ...?

J.P. 20. Feb 2007 08:29

Re: noch ein Problem mit idFTP
 
Also, erstmal Danke für deine Antwort. Das funktioniert nicht in dem sinne, dass da überhaupt nichts passiert.
Mir fällt grad selber ein was ich falsch gemacht haben könnte...
THX! Ich gebe dann bescheid obs das war oder nicht.

J.P. 20. Feb 2007 08:47

Re: noch ein Problem mit idFTP
 
Klar, dass ich mit item[0] anfangen müsste hätte ich wissen müssen.
Hab ich jetzt auch geändert. Trotzdem funktioniert das nicht, da der Warnhinweis (Listenindex überschreitet das Maximum) erscheint und die Procedure vor der letzten funktion abbricht. So, da das aber nicht mit ItemIndex funktioniert, und scheinbar auch nicht mit listboxX.capacity, würde ich gerne wissen:
Mit welcher Funktion kriegt man denn die Anzahl der items heraus?

IngoD7 20. Feb 2007 09:11

Re: noch ein Problem mit idFTP
 
Zitat:

Zitat von J.P.
Mit welcher Funktion kriegt man denn die Anzahl der items heraus?

Das siehst du doch in der Hilfe. Einfach mal die Eigenschaften durchgucken, dann landest du bei TListBox.Count. ;-)

Und denke daran: Wenn Count = 4 ist, dann geht der Index von 0 bis 3.

J.P. 20. Feb 2007 09:17

Re: noch ein Problem mit idFTP
 
Danke :-) mvfG J.P.

SirThornberry 20. Feb 2007 09:25

Re: noch ein Problem mit idFTP
 
könntest du bitte dem Thema einen Aussagekräftigen Titel geben? :-D

J.P. 20. Feb 2007 15:29

Re: [FTP] Daten austausch Programm mit macken.
 
Hab ich gemacht... Ich bin jetzt auch endlich mit dem Programm fertig, funktioniert auch... :)
Nochmal Danke...

J.P. 1. Mär 2007 17:41

Re: [FTP] Daten austausch Programm mit macken.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leutz! Eigentlich hatte ich das Programm als fertig eingestuft, doch dem war wohl nicht so. Ich hab echt keine Ahnung mehr, was der Fehler seinkönnte.
Also hier die funktionen: Man kann daten hochladen und runterladen :) Vor de hochgeladene Datei werden jeweils die initialien des andern gesetzt, damit das Programm dessen merkt, welche Datei es herunterladen soll. So können dann versch. User daten austauschen...
Ich hab jetzt alles im Anhang.

HILFE!

mfG J.P.

J.P. 1. Mär 2007 18:27

Re: [FTP] Daten austausch Programm mit macken.
 
-=| Push |=-

IngoD7 1. Mär 2007 19:06

Re: [FTP] Daten austausch Programm mit macken.
 
Neue Frage, neuer Thread.

Und verkneife dir bitte, nach nicht mal einer Stunde ein Thema zu pushen.

//Achja ... rar-Dateien kann ich nicht öffnen.

J.P. 1. Mär 2007 19:12

Re: [FTP] Daten austausch Programm mit macken.
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK, sry...
Ich habs hier nochmal als zip.
Ich hab das ausserdem extra wieder hier rein geschrieben, da das u.U. das gleiche Problem ist...

IngoD7 1. Mär 2007 19:25

Re: [FTP] Daten austausch Programm mit macken.
 
Zitat:

Zitat von J.P.
Ich hab das ausserdem extra wieder hier rein geschrieben, da das u.U. das gleiche Problem ist...

Da du dich sehr schwer tust, überhaupt mal vernünftig zu beschreiben, was genau dein Problem ist, kann ich deine Vermutung nur verneinen.

Es mag jetzt hart klingen, aber ich habe keine Lust, dir wieder alles aus der Nase zu ziehen.

Beschreibe bitte klar und deutlich, was du an welcher Stelle im Programm erwartest und was genau stattdessen als Fehlverhalten auftritt.

J.P. 1. Mär 2007 19:40

Re: [FTP] Daten austausch Programm mit macken.
 
kein Problem. Ich hab grad oben selbst alles nochmal nachgelesen und gemerkt was für ein Hunbug das ist. Entschuldingung.

Das Programm soll eine Datei Hochladen, und diese mit den Initialien des Empfängers kennzeichnen (initialien + Dateiname). Das Heraufladen funktioniert auch wunderbar. Später, soll der andere Rechner automatisch diese Datei runterladen. Die mit seinen Initialien. Dafür liste ich mir alle Dateien des Servers auf und lasse mit hilfe einer Schleife die Dateien mit der Kennung in einer neuen Liste auflisten. Diese sollen dann nacheinander von idftp1 heruntergeladen werden. Und das funktioniert nicht. Um den Download einer neuen Datei nach dem ersten download zu starten, hab ich das in die Onworkend procedure von idftp1 geschrieben. Nur irgendwie wird nichts heruntergeladen.
Und manchmal kommt noch die Fehlermeldung 200, die ja eigentlich sagt, dass alles in ordnung ist. Die showmessage mit dem 'check' hab ich mir nur reingeschrieben, um zu gucken ob das bis dahin überhaupt läuft.
Dummerweise kann ich auf meinem Inet rechner nicht Delphi installieren, und hab an dem mit Delphi kein Internet. Also kann ich die ganzen fehler nicht richtig verfolgen.

Ich hoffe das war jetzt halbwegs verständlich. Nochmal entschuldigung.

J.P. 2. Mär 2007 14:50

Re: [FTP] Daten austausch Programm mit macken.
 
-=| Push |=-
Tut mir leid, dass ich nochmal Pusche, aber ich finde den fehler nicht und verzweifle Langsam.

IngoD7 2. Mär 2007 21:55

Re: [FTP] Daten austausch Programm mit macken.
 
Zitat:

Zitat von J.P.
-=| Push |=-
Tut mir leid, dass ich nochmal Pusche, aber ich finde den fehler nicht und verzweifle Langsam.

Ich gucke am Wochenende nochmal, wenn ich Zeit habe.

IngoD7 4. Mär 2007 10:32

Re: [FTP] Daten austausch Programm mit macken.
 
Okay, ich habe mal geschaut. Aber so werde ich dir nicht helfen können. Ich sage dir mal warum und was du grundsätzlich meiner Meinung nach bedenken solltest.

1.) Folgende Units kenne ich nicht und musste sie aus Uses herausnehmen:
LMDDirDlg, StartMark, LMDCustomComponent, LMDContainerComponent, LMDBaseDialog

2.) Folgende Objekte kann ich somit nicht erzeugen und musste sie aus TForm1 herausnehmen:
LMDDirDlg1: TLMDDirDlg;
StartMark1: TStartMark;

==> Was danach übrig bleibt, läuft ganz einfach überhaupt nicht. Und somit sind erstmal die Karten hier gelegt.

3.) Die Behandlungsroutine für dein Upload besitzt überhaupt keine Serverdaten (Host, Username).
Entweder die werden irgendwo in den bei mir nicht vorhandenen Units definiert (siehe 1. + 2.), oder sie müssen im Objektinspektor eingetragen werden. Ich kann das nicht wissen.

4.) Welche Indys benutzt du?
In der Routine deines LOS-Buttons zum Downloaden erscheint idftp1.User:=edit2.Text.
TIdFTP.User kennt meine TidFTP-Komponente nicht. Die kennt TidFTP.Username.

5.) Vor jedem Connect machst du erstmal pauschal ein idftp1.Disconnect;
Was soll das?
Programmiere deine Anwendung so, dass sie (und du als Programmierer) jederzeit weiß, wann eine Verbindung besteht und wann nicht.
Implementiere die Ereignisse TidFTP.OnConnected und TidFTP.OnDisconnected, um jederzeit die Übersicht zu behalten, wann die Verbindung auf- und abgebaut wurde, anstatt überall "sicherheitshalber" ein Disconnect-Befehl einzubringen.

6.) Gebe deinen Buttons im Programm nicht nur aussagekräftige Beschriftungen, sondern auch Namen (ebenso den Edits). Man findet sich dann viel besser im Quelltext zurecht.

Grundsätzlich:
Vielleicht konntest du nicht ahnen, dass dir dein FTP soviel Schwierigkeiten bereiten würde und du fremde Hilfe benötigst, aber nun weißt du es. Ich würde dir daher vorschlagen, du baust dir ein Programm erstmal nur mit den FTP-Funktionalitäten.
Also: Gezielter Auf- und Abbau der Verbindung. Dazwischen Upload und/oder Download.
Das sind quasi 4 Buttons, eine idFTP-Komponente und wenn du willst ein Memo zur Anzeige von selbsterstellten Statusmeldungen. Natürlich kann auch der Dialog zur Dateiauswahl schon rein oder noch ein Button, um mit der Methode TidFTP.List den gerade aktuellen Inhalt vom Server zu holen, oder, oder ... Aber eben so schlank wie möglich - nur um die FTP-Funktionalitäten zu ergründen.
Ein Beispiel, was ich mit dem Memo meine. So sagt die Kiste dir beispielsweise, wenn die Verbindung wirklich steht:
Delphi-Quellcode:
procedure TForm1.IdFTP1Connected(Sender: TObject);
begin
   Memo1.Lines.Add('Verbindung steht.');
   ...
end;
So mache ich es immer. Damit erhält man ein Verständins für die idFTP-Komponente und ihre Auswirkungen.
Solltest du damit trotzdem nicht klarkommen, kannst du mit den kleinen, eindeutig zweckgebundenen Code-Schnipseln deines Programms Andere um Hilfe bitten (mich z.B. :stupid: ).

Wenn dann irgendwann dein "FTP-4-Button-Programm" läuft, kannst du die Funktionen in dein eigentliches Projekt einbauen.

himitsu 4. Mär 2007 11:01

Re: [FTP] Daten austausch Programm mit macken.
 
Zitat:

Zitat von IngoD7
1.) Folgende Units kenne ich nicht und musste sie aus Uses herausnehmen:
LMDDirDlg, StartMark, LMDCustomComponent, LMDContainerComponent, LMDBaseDialog

2.) Folgende Objekte kann ich somit nicht erzeugen und musste sie aus TForm1 herausnehmen:
LMDDirDlg1: TLMDDirDlg;
StartMark1: TStartMark;

OK, StartMark kenn ich jetzt auch nicht ... aber zum LMD findest du da was:
http://www.delphipraxis.net/dpX_mark...?shop=lmdtools


@J.P.: wenn du schon Zusatzkomponenten in einem hier hochgeladenem Code verwendest, dann wäre es besser dieses mit anzugeben ... eventuell auch mit Quelle (falls es eher unbekannt ist ... so wie z.. dieses TStartMark), denn so kann ja keiner etwas Testen ;)

[add]
OK, bei Bei Google suchenTSartMark wird nur eine einzige Seite geliefert (is also wohl doch recht unbekannt)
Вопросы по...

IngoD7 4. Mär 2007 12:10

Re: [FTP] Daten austausch Programm mit macken.
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von IngoD7
1.) Folgende Units kenne ich nicht und musste sie aus Uses herausnehmen:[...]

OK, StartMark kenn ich jetzt auch nicht ... aber zum LMD findest du da was:
http://www.delphipraxis.net/dpX_mark...?shop=lmdtools


@J.P.: wenn du schon Zusatzkomponenten in einem hier hochgeladenem Code verwendest, dann wäre es besser dieses mit anzugeben ... eventuell auch mit Quelle (falls es eher unbekannt ist ... so wie z.. dieses TStartMark), denn so kann ja keiner etwas Testen ;)

Ähm ... nur noch mal eben zur Verdeutlichung:
Ich persönlich suche die LMD-Sachen nicht. Ich werde sie auch nicht zu Entstör- bzw. Testzwecken installieren.

Daher in meinem Vorposting der Vorschlag mit dem "nackten" FTP-Programm. Bis das läuft, bin ich gerne dabei. :)
Sollten danach - also beim endgültigen Programm - irgendwelche Funktionen mir unbekannter Komponenten ins Spiel kommen oder auch nur der Verdacht dessen bestehen (so wie im Moment), bin ich raus.

J.P. 5. Mär 2007 16:19

Re: [FTP] Daten austausch Programm mit macken.
 
OK, ich werds mal versuchen. Obwohl das für dieses Projekt jetzt rel. schade ist... Na gut. Kann aber was länger dauern, da ich immer zwischen den Rechnern (und 2 Stockwerken!) hin und her muss, wenn da was nicht läuft :(
EGAL, da muss ich jetzt wohl durch.
Danke für die Tipps. J.P.

PS: StartMark gibts bei Torry.net und stellt einfach nur einen kurzen Startbildschirm dar. (ich hab keine Lust für jedes Programm das neu zu schreiben) Hier ist der Link: http://www.torry.net/pages.php?id=99

PPS: In der exe (auch in der Zip-file) siehst du wie das aussehen sollte.

Edit: Link hinzugefügt

J.P. 5. Mär 2007 19:09

Re: [FTP] Daten austausch Programm mit macken.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier bin ich wieder. Ich hab nu so ein kleines Prog geschrieben... Funktioniert nicht, da der sich sofort nach dem einloggen wieder ausloggt. :-( Hilfe!
Ich hab hier jetzt mal alles im Anhang.

IngoD7 5. Mär 2007 21:54

Re: [FTP] Daten austausch Programm mit macken.
 
Bevor ich weitermache, bitte beantworten:

Zitat:

Zitat von IngoD7
4.) Welche Indys benutzt du?
In der Routine deines LOS-Buttons zum Downloaden erscheint idftp1.User:=edit2.Text.
TIdFTP.User kennt meine TidFTP-Komponente nicht. Die kennt TidFTP.Username.


hsbc 6. Mär 2007 07:58

Re: [FTP] Daten austausch Programm mit macken.
 
Hallo J.P.

ich habe dein Miniprogramm probiert, funktioniert bei mir (mit Indy 10) einwandfrei, nachdem ich folgendes geändert habe:

User ---> Username
Connect(true) ---> Connect

Upload funktionierte
Download nicht, da hier noch Parameter fehlen.

mfg
Herbert

J.P. 6. Mär 2007 14:18

Re: [FTP] Daten austausch Programm mit macken.
 
@Ingo: Ich weiß nich genau welche Indys das sind, Ich hab Delphi 6 Professional und mir keine neuen Installiert.

Bei mir gibts nur User und kein Username. Bei http1 gibts das. bei ftp (bei mir) nicht.

@hsbc: Danke für den Test :)

J.P. 6. Mär 2007 16:44

Re: [FTP] Daten austausch Programm mit macken.
 
WAHNSINN. Das hat nur an diesem Dämlichem True gelegen (obwohl das im normalfall sowieso true ist?????) Egal, das einfache Prog funktioniert jetzt tadellos. Ich muss es nur noch auf den FTPExchanger übertragen.... :)

IngoD7 6. Mär 2007 17:19

Re: [FTP] Daten austausch Programm mit macken.
 
Zitat:

Zitat von J.P.
@Ingo: Ich weiß nich genau welche Indys das sind, Ich hab Delphi 6 Professional und mir keine neuen Installiert.

Dann solltest du das nachholen.

Ich kann's jetzt gerade nicht testen, aber bei den Indys 9.0.14 (oder 18?) läuft meines Wissens das Connect korrekt. Wieso das nun lt. dem Test von hsbc bei den 10-er Indys schon wieder anders ist, wissen die Götter.

Letztlich würde ich nicht davon ausgehen, dass die Indys in D6 wasserdicht sind. Ich habe die ursprünglichen, die bei mir bei D7 dabei waren, auch schon laaaaange upgedatet, weil sie Ärger verursachten (bin aber noch bei einer 9-er Version geblieben, weil die seither bei mir keine Macken wieder gezeigt hat). Du hast sogar noch ältere.

Du siehst: Mit meinen funktionierenden 9-er Indys hätte ich mir einen Wolf testen können, ich hätte es nie erfahren, was bei dir nicht geht.

@hsbc
Kannst du mir mal deine procedure TIdFTP.Connect(...) aus der Unit IdFTP.pas schicken? Danke.

J.P. 6. Mär 2007 18:16

Re: [FTP] Daten austausch Programm mit macken.
 
Jetzt läuft alles, bis es zum eigentlichen Download kommt. Dann wird nur die erste Datei vollständig heruntergeladen, und aus der nächsten wird eine 0 -byte datei.

Ich hab den Fehler, weiß aber leider nicht wie ich ihn beheben kann. Es kommt nach erfolgreichem 1. Download zu einer Fehlermessage, die sagt dass die erste Datei heruntergeladen wurde. Daraufhin bricht die OnWorkEnd procedure ab. Wie kann man jetzt erzwingen, dass diese Trotzdem abgearbeitet wird?

Ich bin jetzt fast fertig :-) Danke an alle.

@ingo: klar, ich kopier sie dir. muss wie schon gesagt wieder 2 Stockwerke in angriff nehmen....

J.P. 6. Mär 2007 18:21

Re: [FTP] Daten austausch Programm mit macken.
 
Liste der Anhänge anzeigen (Anzahl: 1)
*schwitz*
hier ist sie.

J.P. 7. Mär 2007 16:41

Re: [FTP] Daten austausch Programm mit macken.
 
Bei try...except werden die Prozeduren und Funktionen doch auch abgebrochen, oder nicht?


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