AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DateTime in DB Speichern, wird nur jeder 2 gespeichert WISO?
Thema durchsuchen
Ansicht
Themen-Optionen

DateTime in DB Speichern, wird nur jeder 2 gespeichert WISO?

Ein Thema von Albi · begonnen am 1. Jul 2003 · letzter Beitrag vom 2. Jul 2003
Antwort Antwort
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#1

DateTime in DB Speichern, wird nur jeder 2 gespeichert WISO?

  Alt 1. Jul 2003, 14:14
Hallo alle zusammen, ich habe folgendes Problem:

Ich speichere mehrer Werte in einer *.txt und erstelle daraus einen Serienbrief, nun möchte ich, das wenn er den Serienbrief erstellt, mir Datum/Uhrzeit in der DB hinterlegt. Das klappt auch. Aber nehmen wir mal an, es sind 5 DS da, dann schreibt er jeweils den 1ten, 3ten u. 5ten Datum/Zeit in die DB und in die *.Txt aber in den 2ten u. 4ten jedoch in keines der beiden. Nehme ich das SetPrintTime raus, schreibt er mir wieder alle in die *.txt.

Kann es sein, das das Query dazu zu langsam ist und daher immer einer übersprungen wird?

Ich verwende folgenden Code

Code:
 Form1.Query1.First;
      For i:= 0 To Form1.Query1.FieldCount-1 DO
      Write(f, Form3.DBGrid1.Fields[i].FieldName+';');
      Writeln(f,'');
        while not Form1.Query1.EOF do
         begin
            for i:=0 to Form1.Query1.FieldCount-1 do
             begin
              Write(F, Form1.Query1.Fields[i].asstring+';');
              SetPrintTime;
               if Form1.Query1.FieldCount-1 = Form1.Query1.FieldCount-1 Then
              end;
              Writeln(F, '');
          Form1.Query1.Next;
         end;
    CloseFile(f);
SetPrintTime lautet: Form1.Query1.Edit;
Form1.Query.FieldByName('Gedruckt').AsDateTime:= now;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 1. Jul 2003, 17:54
Hi,

hast Du da Schreibfehler geschickt, oder verwendest Du tatsächlich i als Variable für zwei verschachtelte Schleifen
Gruß
Hansa
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 1. Jul 2003, 19:11
Ne, ich verwende das so. Sollte man dies nicht machen? Ich habe jetzt auch ne Lösung für mein Problem gefunden. Für jeden denes interessiert oder Verbesserungsvorschläge hat. (ist der Code für SetTimePrint)

Code:
Form1.Query1.Prior;
  Form1.Query1.Edit;
  If Form1.Query1.RecNo = Form1.Query1.FieldCount-1 Then
    begin
      Form1.Query1.Last;
      Form1.Query1.FieldByName('Gedruckt').AsDateTime:= Now;
    end
  else
    Form1.Query1.FieldByName('Gedruckt').AsDateTime:= Now;
end;
Jetzt besteht nur noch das Problem, das der erste DS immer 2 x in die Txt geschrieben wird.

Der Fehler trat daher auf, das durch das Query1.Next schon immer einen DS weitergesprungen wurde und somit logischer Weise immer 1 DS ausgelassen wurde.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 1. Jul 2003, 19:54
Delphi-Quellcode:
Form1.Query1.Prior;
  Form1.Query1.Edit;
  If Form1.Query1.RecNo = Form1.Query1.FieldCount-1 Then
    begin
      Form1.Query1.Last;
      Form1.Query1.FieldByName('Gedruckt').AsDateTime:= Now;
    end
  else
    Form1.Query1.FieldByName('Gedruckt').AsDateTime:= Now;
end;
Ich sehe da kein i mehr. Du mußt Dir das mit dem Datenbank-Cursor mal durchlesen. Du springst doch mit Prior und Last und Edit kreuz und quer durch die Daten.
Gruß
Hansa
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 2. Jul 2003, 05:19
Das geht doch im Moment nicht anders, ich weiß zumindest keine andere Lösung.

Aber das muß ich daher machen, das er mir die Daten in der DB richtig speichert. Wenn ich das nicht so mache, dann wird nur in jeder 2ten Zeile das Datum/Uhrzeit in die DB eingetragen. Also muß ich immer wieder einen DS zurück Datum/Uhrzeit schreiben und anschließend wieder 1 DS vor um auf dem richtigen DS zu landen, so das dann der richtige DS wieder in *.Txt geschrieben wird.

Ich hoffe, das ist verständlich gewesen.

Hier mal der komplette Code mit der in die Daten in die Txt schreibe:

Code:
var i, j: Integer;
begin
    assignFile (f,'SerienTxt.txt');
    rewrite (f);
      Form1.Query1.First;
      For j:= 0 To Form1.Query1.FieldCount-1 DO
      Write(f, Form3.DBGrid1.Fields[j].FieldName+';'); //Feldnamen in Txt schrieben
      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+';'); // Felder in txt schreiben
              if Form1.Query1.FieldCount-1 = Form1.Query1.FieldCount-1 // wenn Zeile zu Ende, dann Zeilenumbruch Then
              Writeln(F, '');
              Form1.Query1.Next;
              SetPrintTime; //Procedure siehe vorheriger Beitrag
          end;
    CloseFile(f);
end;
Nun gib es halt nur noch das Problem, das er 1te DS doppelt verarbeitet wird, da ich beim ersten 1ten DS einen zurück gehe und wieder vor, somit lande ich wieder auf gleichen.
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#6
  Alt 2. Jul 2003, 06:34
Hab die Lösung gefunden.

für alle die es interessiert.

Code:
Procedure TForm3.ExportInTxt(Sender: TObject);
var i, j: Integer;
begin
    assignFile (f,'SerienTxt.txt');
    rewrite (f);
      Form1.Query1.First;
      For j:= 0 To Form1.Query1.FieldCount-1 DO
      Write(f, Form3.DBGrid1.Fields[j].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;
              LastID:= Form1.Query1.FieldByName('ID').AsInteger; //Merken der letzten ID (Primärindex)
              SetPrintTime;
           end;
    CloseFile(f);
end;

Procedure TForm3.SetPrintTime;
var i: Integer;
begin
    Form1.Query1.Locate('ID', LastID, []); //Letzte ID suchen
    Form1.Query1.Edit;
    Form1.Query1.FieldByName('Gedruckt').AsDateTime:= Now;
end;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 2. Jul 2003, 09:20
na siehste,

Delphi-Quellcode:
for i:= ... do begin
  for i:= ...
end;
war wohl dich nicht das Gelbe vom Ei. Ein j kann Wunder bewirken.
Gruß
Hansa
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#8
  Alt 2. Jul 2003, 09:54
Muß dich leider enttäuchen, die Lösung war das nicht und verschatelt war das ja auch nicht, da ja erst die obere FOR - Schleife abgearbeitet wurde und danach ja erst die zweite For Schleife, somit sind sie sich ja nicht zusammen ausgefüht worden ist aber gut zu wissen das man darauf achten muß.

Die Lösung brachte das auslesen der LastID somit hat er jeden DS betrachtet.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: DateTime in DB Speichern, wird nur jeder 2 gespeichert W

  Alt 2. Jul 2003, 10:17
Zitat von Albi:
Delphi-Quellcode:
 Form1.Query1.First;
      For i:= 0 To Form1.Query1.FieldCount-1 DO
...
            for i:=0 to Form1.Query1.FieldCount-1 do
...
         end;
Sag mir mal, wie Du das compiliert hast. Der Compiler bemerkt sogar, daß das ein kapitaler Fehler ist und verweigert die Arbeit. Wußte gar nicht, daß er das sogar merkt, weil ich sowas eben nicht mache. 8) Eine Loop-Variable innerhalb einer Schleife zu VERÄNDERN, was Du mit dem 2. FOR eben machst, das geht irgendwann schief. Delphi unterbindet anscheinend vorsichtshalber, daß solche Programme auf die Menschheit losgelassen werden.
Gruß
Hansa
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#10
  Alt 2. Jul 2003, 10:55
Nen Fehler hat er mir nicht gegeben, zumindest keinen der das Prog vom laufen abhielt, lief ja auch aber das jetzt ja auch egal. Ich habe mir dabei nichts gedacht (obwohl es ja logisch ist).

Wenn ich mich recht insinne, schrieb er mir nur, daß es passieren kann das die Variable i keinen Wert erhält oder so ähnlich.

Aber es ist auch egal, nur aus solchen Fehlern kann man lernen es beim nächsten Mal besser zu machen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:56 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