![]() |
Probleme mit DB und Schleife
Delphi-Quellcode:
Hab ein Problem (merkwürdiges):
if SameTime(StrToTime(WL.Strings[1])-StrToTime(MyTime),StrToTime('00:10:00')) = true then
begin t.Open; t.Append; for i := 0 to WL.Count - 1 do begin t.Fields[i].Value := WL.Strings[i]; //Einträge in DB einfügen end; t.Post; t.Close; time := WL.Strings[1]; end; Ich will alle 10 Minuten etwas in eine Datenbank schreiben (über t : TTable). Das schreiben an sich funktioniert,aber das mit dem Intervall nicht so richtig. er schreibt 2mal was in die datenbank (z.B. um 12:23:34 und dann um 12:33:34), aber dann nicht mehr. Lasse ich ihn alle 5 Minuten schreiben, macht er es durchgängig. Komisch oder? |
Re: Probleme mit DB und Schleife
Warum wandelst du Zeitwerte nach String um sie zwischenzuspeichern?
|
Re: Probleme mit DB und Schleife
Wo mache ich TimeToStr?
|
Re: Probleme mit DB und Schleife
Irgendwo schreibst du das ja in die StringListe
|
Re: Probleme mit DB und Schleife
Was schreibe ich irgendwo in welche StringListe? Kannst du bitte in ganzen Sätzen antworten, sonst weiß ich nicht was du meinst :gruebel:
|
Re: Probleme mit DB und Schleife
WL.Strings[] ist ja wohl eine StringListe
|
Re: Probleme mit DB und Schleife
Ja, ist es.
Delphi-Quellcode:
Werte ist ein String, in dem die Daten stehen.
WL.Delimiter := #9;
WL.DelimitedText := Werte; |
Re: Probleme mit DB und Schleife
Ich würde nicht auf Gleichheit sondern auf > prüfen.
|
Re: Probleme mit DB und Schleife
Sollte dafür nicht ein TTimer besser geeignet sein?
|
Re: Probleme mit DB und Schleife
Zitat:
|
Re: Probleme mit DB und Schleife
Wenn die Abarbeitung länger dauert, könnte es passieren (und passiert scheinbar auch), dass es 11 Minuten sind. Dann greift der Vergleich auf Gleichheit nicht mehr. Auf Größer aber schon. Dann kannst du dir auch das SameTime() sparen
|
Re: Probleme mit DB und Schleife
Delphi-Quellcode:
Also so, ja?
if (StrToTime(WL.Strings[1])-StrToTime(Time)) > StrToTime('00:01:00') then
Da schreibt er jetzt gar nix mehr rein. |
Re: Probleme mit DB und Schleife
Delphi-Quellcode:
sollte reichen
if (StrToTime(WL.Strings[1])-StrToTime(Time)) >= 600 then
|
Re: Probleme mit DB und Schleife
nein.
600 wären 600 Tage. 10 / 24 / 60 wären dann 10 Minuten. |
Re: Probleme mit DB und Schleife
An sich schreibt er jetzt wenigstens etwa alle z.B. 2 Minuten einen Wert in die Datenbank,aber die sind ja nun nicht genau 2 Minuten auseinander. Bsp :
07:21:35 07:23:40 07:25:40 07:27:45 usw. Ist natürlich nicht so gut. Und nun? |
Re: Probleme mit DB und Schleife
Rechne die Zeit in Sekunden um und vergleiche dann:
Delphi-Quellcode:
Function TimeToSeconds (aTime : TDateTime) : Integer;
Begin Result := Trunc (0.5 + Fract(aTime)*86400); End; Function TimeToMinutes (aTime : TDateTime) : Integer; Begin Result := Trunc (0.5 + Fract(aTime)*1440); End; ... If TimeToSeconds(Now) - TimeToSeconds(LastTime) >= 120 Then Begin // 120 Sekunden = 2 Minuten LastTime := Now; DoSomething; End; // Oder If TimeToMnutes(Now) - TimeToMinutes(LastTime) >= 2 Then Begin LastTime := Now; DoSomething; End; |
Re: Probleme mit DB und Schleife
Ich kapiere das nicht...
Was spricht denn hier gegen den Einsatz von TTimer? Ein Intervall auf 2 Minuten und fertig... |
Re: Probleme mit DB und Schleife
Hallo,
hab das jetzt mit Timer probiert.
Delphi-Quellcode:
//Timer für Datenbank zur Laufzeit erstellen
MyTimer3 := TTimer.Create(nil); MyTimer3.Enabled := True; MyTimer3.Interval := 120000; // alle 2 Minuten die Datenbank aktualisieren MyTimer3.OnTimer := DatenbankFuellen;
Delphi-Quellcode:
Das Problem dabei, dass er dann erst nach 2 Minuten den ersten Wert reinschreibt. Er soll aber sofort anfangen.
procedure TFiles.DatenbankFuellen(Sender: TObject);
var Werte, Datei : string; i : integer; WerteList, WL : TStringList; begin Datei := extractfilepath(application.exename)+'Mom10min_'+Kennung+'.txt'; WerteList := TStringList.Create; WL := TStringList.Create; try WerteList.LoadFromFile(Datei); if WerteList.Count >=2 then begin Werte := WerteList.Strings[WerteList.count-1]; WL.Delimiter := #9; WL.DelimitedText := Werte; if count = WL.Count then begin with t do begin t.Open; t.Append; for i := 0 to WL.Count - 1 do begin t.Fields[i].Value := WL.Strings[i]; end; t.Post; t.Close; end; end; WerteList.SaveToFile(Datei); end; finally Free; WerteList.Free; WL.Free; end; end; |
Re: Probleme mit DB und Schleife
du kannst DatenbankFuellen auch z.B. auch noch über OnCreate der Form aufrufen, dann fängt er sofort an.
|
Re: Probleme mit DB und Schleife
Was muss denn bei dem TimerEreignis in Datenbankfuellen(?). Da steht ja Sender:TObject drin,aber beim Aufruf? t für die Datenbank?
|
Re: Probleme mit DB und Schleife
Der Sender ist für dich selbst um in einem Ereignis feststellen zu können, von welchem Objekt das Ereignis ausgelöst wurde. Denn du kannst ja z.B. mehreren Buttons die selbe Prozedur an das OnClick-Ereignis zuweisen.
Wenn du Sender nicht benutzt, kannst du einfach nil angeben oder eben die Komponente z.B., deren Ereignis das ist. |
Re: Probleme mit DB und Schleife
Funktioniert irgendwie nicht. Ich muss ja erst die DB erstellen:
Delphi-Quellcode:
Und dann kann ich diese erst füllen. Hab daher DatenbankFuellen an obige Stelle geschrieben. Aber geht auch nicht
procedure TFiles.DatenbankErstellen;
var sl : TStringList; i : integer; Label SprungDB; begin if check1 = false then begin sl := TStringList.Create; try sl.Delimiter := #9; sl.DelimitedText := TabHead; //Tabellenkopf t := TTable.Create(nil); count := sl.Count; with t do begin Close; if not Fileexists (ExtractFilePath(application.exename)+'Datenbank_'+Kennung+'.db') then begin TableName := ExtractFilePath(application.exename)+'Datenbank_'+Kennung+'.db'; TableType := ttParadox; with FieldDefs do begin Clear; Add(sl.Strings[0], ftDate, 0, False); Add(sl.Strings[1], ftTime, 0, False); for i := 2 to sl.Count-1 do begin Add(sl.Strings[i],ftFloat,0,False); end; CreateTable; end; end else begin TableName := ExtractFilePath(application.exename)+'Datenbank_'+Kennung+'.db'; TableType := ttParadox; goto SprungDB; end; SprungDB: //Timer für Datenbank zur Laufzeit erstellen DatenbankFuellen(nil) // <------------------------------------------------------ MyTimer3 := TTimer.Create(nil); MyTimer3.Enabled := True; MyTimer3.Interval := 300000; MyTimer3.OnTimer := DatenbankFuellen; check1 := true; end; finally Free; sl.Free; end; end; end; |
Re: Probleme mit DB und Schleife
Zitat:
|
Re: Probleme mit DB und Schleife
war mein fehler ( wie solls auch anders sein). hat sich geklärt.danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr. |
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