Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schreiben in *.txt (https://www.delphipraxis.net/5808-schreiben-%2A-txt.html)

Albi 19. Jun 2003 17:56


Schreiben in *.txt
 
Hallo alle zusammen, ich hoffe Ihr könnt mir weiterhelfen.

Ich habe folgendes Problem, über folgenden Procedure speichere ich den Inhalt der der Query in der Textdatei.

Delphi-Quellcode:
AssignFile(f, 'SerienTxt.txt');
  rewrite(f);
  Form1.Query1.SQL.Clear;
  Form1.Query1.SQL.Add('Select * FROM "'+Pfad+'" WHERE Name ='''+DBFirma.Text+'''');
  Form1.Query1.Active:= True;
  Form1.Query1.First;
  for i:= 0 To Form1.Query1.FieldCount-1 Do
  Write(f, Form1.DBGrid1.Fields[i].Fieldname+'#');
  Writeln(f,'');
  While Not Form1.Query1.Eof DO
    begin
      For i:= 0 To Form1.Query1.FieldCount-1 Do
      Write(F, Form1.Query1.Fields[i].AsString+'#');
      if Form1.Query1.FieldCount-1 = Form1.Query1.FieldCount-1 Then
      Writeln(f,'');
      Form1.Query1.Next;
    end;
    CloseFile (f);
    Form1.Query1.SQL.Clear;
    Form1.Query1.SQL.Add('Select * FROM "'+Pfad+'"');
    Form1.Query1.Active:= True;
Nun habe ich das Problem, das ich die Procedure nur 1x aufrufen kann und die Daten in der Textdatei speichern kann. Wenn ich einen anderen Datensatz auswähle, wird der Inhalt nicht überschrieben. Dazu muß ich dann erst die Textdatei von Hand öffnen und wieder schließen.

Woran liegt das?

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/delphi]

Duffy 19. Jun 2003 18:07

Hallo Albi,
bekommst Du eine Fehlemeldung? Wird die Funktion, Procedure vielleicht nur einmal angesprungen?
bye

MrSpock 19. Jun 2003 18:15

Hallo Abli,

du musst noch ein Query1.Close hinzufügen, bevor du mit Clear und Add ein neues Statement einfügst.

Übrigens würde ich Query1.Open und nicht Query1.Active := True verwenden.

Albi 19. Jun 2003 18:34

Ne, das war auch nicht die Lösung. Habe jetzt alles geändert. Hab oben ja was falsches geschrieben, ich muß nicht die Textdatei öffnen und wieder schließen sondern die ganze Anwendung.

Ich benutze diese Procedure für einen Serienbrief. Ich wählen (ersteinmal zum Testen) einen Datensatz aus, der mir dann in das Word Doc eingefügt wird.

Zitat:

bekommst Du eine Fehlemeldung? Wird die Funktion, Procedure vielleicht nur einmal angesprungen?
Nein, wenn ich mit einem Button die Procedure aufrufe wird sie doch immer wieder angesprungen oder seh ich das falsch?

Ich habe jetzt mal das CloseFile weggenommen, da macht er es, nur wird dann nicht alles in die Textdatei geschrieben. Muß ich noch irgendwas freigeben? Speicher oder so?

Duffy 19. Jun 2003 18:57

Hallo Albi,
setze doch einfach einen Breakpoint auf das erste Statement der Procedure und trace sie, dann siehst Du doch was passiert.
bye

PS: Mach mal aus dem CloseFile ein System.CloseFile

Albi 19. Jun 2003 18:58

Sorry für die Frage aber wo soll ich das setzten in der Unit? :?:

Albi 19. Jun 2003 19:01

Diese Procedure heißt ExportInTxt, wenn diese in einer Procedure aufrufe müßte das doch so gehen. Ich habe es so gemacht:

Code:
begin
  ExportInTxt;
  WordApplication1.Disconnect;
  if OpenDialog1.Execute then
    FileName:=OpenDialog1.FileName

Duffy 19. Jun 2003 19:03

Hallo Albi,
nein in deinem Quellcode. Cursor in die Zeile
Zitat:

AssignFile(f, 'SerienTxt.txt');
dann F5 drücken, Zeile wird rot und mit F7 Zeile für Zeile tracen. Rest kannst Du im Menü "Start" und der Onlinehilfe nachlesen.
bye

PS: Das Programm starten nicht vergessen

Albi 19. Jun 2003 19:12

Hab ich getan, mir ist da aber nicht aufgefallen. Das heißt ich versteh auch noch nicht soviel von dem ganzen aber jeder fängt ja mal klein an.

Er ist einfach jeden Schritt für Schritt durch Prog gerant und nur bei der Word rumgemeckert, das ihm die Datenquelle fehlt aber daran kann es ja nicht liegen.

Hansa 19. Jun 2003 19:44

Hi MrSpock,

kurze Zwischenfrage :

Zitat:

Zitat von MrSpock
...Übrigens würde ich Query1.Open und nicht Query1.Active := True verwenden...

Meines Wissens macht doch Open nichts anderes, als
Code:
Active := true;
zu setzen ? Meinst Du vieleicht für OOP-Zwecke wäre das besser?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.
Seite 1 von 2  1 2      

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