Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem: Procedure zum speichern eines grids auf FTP server (https://www.delphipraxis.net/113839-problem-procedure-zum-speichern-eines-grids-auf-ftp-server.html)

5etH 16. Mai 2008 09:46

Re: Problem mit eigener Procedure
 
Also Datenmodul ist in den Uses und es fehlt kein Semikolon

shmia 16. Mai 2008 10:43

Re: Problem: Procedure zum speichern eines grids auf FTP ser
 
Hier mal der vereinfachte Code.
Damit vereinfacht sich auch der Aufruf.
Änderungen:
* "gescheiteter" Prozedurname
* Parameterliste abgespeckt und dafür lokale Variablen verwendet
* Sicherheitsüberprüfungen mit Assert
* try...finally zum Schutz der Resourcen

Delphi-Quellcode:
Procedure SaveStringGrid(Grid : TStringGrid; const FileName : String);
Var
  I : Integer;
  GridMem : TMemoryStream; // lokale Variable, kein Parameter !
  CSV : TStringList; // dito
Begin
  Assert(Assigned(Grid)); // Safety first
  Assert(Assigned(Datenmodul1));

  // Vorbereitung zum speichern der Datenbanken
  GridMem := TMemoryStream.Create;
  CSV := TStringList.Create;
  try
    //Speichern der Grids in Streams
    For I:=0 To Grid.RowCount -1 Do
      Begin
        Grid.Rows[i].Delimiter:=';';
        CSV.Add(StringReplace(Grid.Rows[i].DelimitedText,'',';',[rfReplaceAll]));
      End;
  // Speichern der Streams als Datei auf einem FTP Server
  CSV.SaveToStream(GridMem);
  // ganz wichtig: Stream muss zurück auf Anfang
  GridMem.Position := 0;

  Datenmodul1.IdFTP1.Put(GridMem,FileName);
  finally
    CSV.Free;
    GridMem.Free;
  end;
End;

Luckie 16. Mai 2008 11:10

Re: Problem: Procedure zum speichern eines grids auf FTP ser
 
Also mit Assert würde ich hier nicht arbeiten. Assert dient eigentlich nur zum Debuggen und Assertions sollten in der Releaseversion deaktiviert werden. aus der Dephihilfe:
Zitat:

In der Regel werden Assertions nicht in Programmversionen verwendet, die zur Auslieferung vorgesehen sind. Deshalb wurden Compiler-Direktiven implementiert, mit denen die Generierung des zugehörigen Codes deaktiviert werden kann:

$ASSERTIONS ON/OFF

Codewalker 16. Mai 2008 11:14

Re: Problem: Procedure zum speichern eines grids auf FTP ser
 
Allerdings haben Assertions den Vorteil, dass sie Datei und Quellcodezeile mit ausgeben. Von daher sind sie bei mir auch z.T. in Release-Versionen enthalten. Spricht etwas dagegegen bzw. kann man die Zusatzinfos (Datei+Zeile) auch anderweitig ermitteln?

shmia 16. Mai 2008 13:06

Re: Problem: Procedure zum speichern eines grids auf FTP ser
 
Zitat:

Zitat von Luckie
Also mit Assert würde ich hier nicht arbeiten. Assert dient eigentlich nur zum Debuggen und Assertions sollten in der Releaseversion deaktiviert werden.

Genau für den Anwendungszweck, der hier vorliegt, wurden aber Assertions erfunden.
"Eigentlich" darf ja der Parameter Grid niemals = nil sein und er ist es in 99,5 % aller Fälle auch.
Für den Fall, dass der Programmierer gepennt hat, ist die Assertion als Rettungsanker im Code.
Assertion verbleiben im Code und werden nicht auskommentiert.
Alfa- und Betaversion werden mit $ASSERTIONS ON kompiliert und zum Testen ausgeliefert;
Releaseversionen werden mit $ASSERTIONS OFF kompiliert. (damit wird das Programm dann wieder kleiner und schneller)

shmia 16. Mai 2008 13:12

Re: Problem: Procedure zum speichern eines grids auf FTP ser
 
[Doppelposting wegen Netzwerkfehler gelöscht]


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

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