Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Now" in Datenbank speichern (https://www.delphipraxis.net/100452-now-datenbank-speichern.html)

Tommy1988 28. Sep 2007 14:01

Datenbank: MySQL • Version: - • Zugriff über: -

"Now" in Datenbank speichern
 
Mein Problem ist folgendes:
Ich habe eine Datenbank namens test, darin befindet sich eine
Tabelle namens IP, diese hat 2 Zeilen, die eine heißt IP die andere Zeit.

(IP-Typ: VACHAR)
Die IP in diese IP-Zeile zu setzen ist kein Problem.
Das Problem ist eher, die Zeit (now) in diese Zeit-Spalte zu bekommen.

Delphi-Quellcode:
q_Time := 'INSERT INTO IP (zeit) VALUES ('
+ FormatDateTime('hh:mm:ss', now) + ')';
Das klappt leider nicht, "Zeit" bleibt immer leer komischerweise :pale:

DeddyH 28. Sep 2007 14:05

Re: "Now" in Datenbank speichern
 
Kannst Du bei den verwendeten DB-Kompos nicht parametrisieren?

s-off 28. Sep 2007 14:07

Re: "Now" in Datenbank speichern
 
Zitat:

Zitat von Tommy1988
Tabelle namens IP, diese hat 2 Zeilen, die eine heißt IP die andere Zeit.

Du meinst Spalten, hier auch Felder genannt.

Zitat:

Zitat von Tommy1988
Das Problem ist eher, die Zeit (now) in diese Zeit-Spalte zu bekommen.

Da wäre es gut, zu wissen, von welchem Typ das Feld 'Zeit' ist.

Tommy1988 28. Sep 2007 14:08

Re: "Now" in Datenbank speichern
 
Was genau meinst du damit?

Ich habe eben dann schon
Delphi-Quellcode:
q_Time := 'INSERT INTO IP (zeit) VALUES ('
+ TimeToStr(Now) + ')';
probiert geht aber auch nicht.

Das Feld zeit ist vom Typ TIME

DeddyH 28. Sep 2007 14:09

Re: "Now" in Datenbank speichern
 
Versuch es mal so:
Delphi-Quellcode:
q_Time := 'INSERT INTO IP (zeit) VALUES ('
+ QuotedStr(FormatDateTime('hh:mm:ss', now)) + ')';

Tommy1988 28. Sep 2007 14:17

Re: "Now" in Datenbank speichern
 
Oh, vielen dank Daddy :)
(Klappt nun)
Wo wir schonmal dabei sind: ein Quote ist ja das hier => "

Was machen denn diese Zwei Quotes so besonders?

Als ich mit PHP und MySQL gearbeitet habe, meine ich mich nicht erinnern
zu können jemals QUotes gesetzt zu haben.

xaromz 28. Sep 2007 14:18

Re: "Now" in Datenbank speichern
 
Hallo,

warum verwendest Du nicht die Function NOW(), die von MySQL unterstützt wird? Dadurch bist Du auch nicht von der Zeit des Clients abhängig:
Delphi-Quellcode:
q_Time := 'INSERT INTO IP (zeit) VALUES (NOW())';
//Edit:
Besser ist wohl noch CURTIME():
Delphi-Quellcode:
q_Time := 'INSERT INTO IP (zeit) VALUES (CURTIME())';
Gruß
xaromz

DeddyH 28. Sep 2007 14:21

Re: "Now" in Datenbank speichern
 
Ist natürlich davon abhängig, ob man die Serverzeit oder die Clientzeit eintragen möchte ;)

@Tommy: wie sähe das denn in PHP aus?
Code:
$sql = "INSERT INTO ip(zeit) VALUES('$zeit')";

Tommy1988 28. Sep 2007 14:25

Re: "Now" in Datenbank speichern
 
Noch ein Problem :wall:

Wenn eine gewisse Zeit abgelaufen ist, wird folgendes aufgerufen:
Delphi-Quellcode:
   begin
   // Erst alle anderen (vorherigen) Einträge löschen
    DeleteTableContent;
   // Minuszählen abfangen, Zeit zurücksetzen, aus Registry lesen
    Zeit := ReadDWORDCurrentUser(Key, Value);
   // Dann den neuen hizufügen
    AddIPToDatabase;
    // und dann noch die Zeit hinzufügen
    AddTimeToDataBase;
   end; // End vom elseZweig der Zeit-If-Abfrage
Table-Inhalt löschen funktioniert
Zeit wieder zurücksetzen funktioniert auch
IP in die DB schreiben funktioniert auch
aber
Die Zeit DANN nicht. Da steht dann immer 0 in der DB.

Setze ich AddIP.. hinter AddTime.. dann ist es umgekehrt.

DeddyH 28. Sep 2007 14:27

Re: "Now" in Datenbank speichern
 
Zeig doch mal den Code der beiden Methoden.

Tommy1988 28. Sep 2007 14:29

Re: "Now" in Datenbank speichern
 
// AddIPToDataBase
Delphi-Quellcode:
procedure TForm1.AddTimeToDataBase;
begin
// Schreiben
 if assigned(FResult) then begin
    if FMysql.Status<>MYSQL_STATUS_READY then
      // ShowMessage('Ein Ergebnis wurde unvollständig gelesen!');
      FreeAndNil(FResult);
  end;
q_Time := 'INSERT INTO IP (zeit) VALUES ('
+ QuotedStr(FormatDateTime('hh:mm:ss', now)) + ')';

caption := FormatDateTime('hh:mm:ss', now);

  FResult := FMysql.query(q_Time, true, ex);
  if assigned(FResult) then
  begin
    // ShowMessage('Query: OK - Ergebnis gespeichert')
  end else
    if ex then
    begin
      // ShowMessage('Query: OK - ausgeführt')
      end else
      begin
      // ShowMessage('Query fehlgeschlagen: '+FMysql.LastError);
      end;
//
end;
Delphi-Quellcode:
// AddTimeToDataBase
procedure TForm1.AddIPToDatabase;
begin
// Schreiben
 if assigned(FResult) then begin
    if FMysql.Status<>MYSQL_STATUS_READY then
      // ShowMessage('Ein Ergebnis wurde unvollständig gelesen!');
      FreeAndNil(FResult);
  end;
q_IP := 'INSERT INTO IP (ip) VALUES ('
+ QuotedStr(sEdit1.Text) + ')';

  FResult := FMysql.query(q_IP, true, ex);
  if assigned(FResult) then
  begin
    // ShowMessage('Query: OK - Ergebnis gespeichert')
  end else
    if ex then
    begin
      // ShowMessage('Query: OK - ausgeführt')
      end else
      begin
      // ShowMessage('Query fehlgeschlagen: '+FMysql.LastError);
      end;
//
end;

DeddyH 28. Sep 2007 14:33

Re: "Now" in Datenbank speichern
 
Wieso legst Du denn 2 Datensätze an? Kombinier doch beides.
SQL-Code:
INSERT INTO IP(ip,zeit) VALUES(ip-Variable,zeit-Variable)

Tommy1988 28. Sep 2007 14:41

Re: "Now" in Datenbank speichern
 
Darf ich mich blöd anstellen?

Delphi-Quellcode:
q_IP := 'INSERT INTO IP (ip, zeit) VALUES ('
+ QuotedStr(sEdit1.Text),
  QuotedStr(FormatDateTime('hh:mm:ss', now)) + ')';
Das funktioniert so leider nicht.

guidok 28. Sep 2007 14:45

Re: "Now" in Datenbank speichern
 
DeddyH hat recht, so wie du es machst fügst du ZWEI Datensätze in die Tabelle ein. Einmal einen in dem das Feld IP unbelegt ist und einmal einen in dem das Feld Zeit unbelegt ist.

In deinem Fall einfach EINEN KOMPLETTEN Datensatz in die Tabelle einfügen, siehe oben. Falls du wirklich einmal zwei Felder nicht in einem SQL Befehl packen kannst, dann musst du beim Einfügen eines neuen Datensatzes INSERT verwenden und beim Ändern UPDATE, wobei du dann noch eine eindeutige Datensatzidentifizierung brauchst (Key).

DeddyH 28. Sep 2007 14:45

Re: "Now" in Datenbank speichern
 
Delphi-Quellcode:
q_IP := Format('INSERT INTO IP (ip, zeit) VALUES (%s,%s)',
[QuotedStr(sEdit1.Text),QuotedStr(FormatDateTime('hh:mm:ss', now))]);

xaromz 28. Sep 2007 14:46

Re: "Now" in Datenbank speichern
 
Hallo,

Zitat:

Zitat von Tommy1988
Darf ich mic blöd anstellen?

klar darfst Du, aber warum solltest du :wink:
Delphi-Quellcode:
IP := QuotedStr(sEdit1.Text);
Zeit := QuotedStr(FormatDateTime('hh:mm:ss', now));
q_IP := Format('INSERT INTO IP (ip, zeit) VALUES (%s, %s)', [IP, Zeit]);
Gruß
xaromz

Jelly 28. Sep 2007 15:27

Re: "Now" in Datenbank speichern
 
Zitat:

Zitat von Tommy1988
Delphi-Quellcode:
q_IP := 'INSERT INTO IP (ip, zeit) VALUES ('
+ QuotedStr(sEdit1.Text),
  QuotedStr(FormatDateTime('hh:mm:ss', now)) + ')';
Das funktioniert so leider nicht.

Du hast schon eine Spalte ip und eine Spalte zeit in deiner Tabelle IP :roll:

DeddyH 28. Sep 2007 15:30

Re: "Now" in Datenbank speichern
 
Zitat:

Zitat von Jelly
Du hast schon eine Spalte ip und eine Spalte zeit in deiner Tabelle IP :roll:

:wiejetzt: Er will ja nicht die Tabellenstruktur ändern, sondern einen Datensatz einfügen.


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