AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datum in DB setzen

Ein Thema von barnti · begonnen am 21. Apr 2004 · letzter Beitrag vom 21. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Datum in DB setzen

  Alt 21. Apr 2004, 10:42
Hallo,

ich habe ein kleines Problem mit der Verwendung des Datentyps 'TDateTime'.

Delphi-Quellcode:
procedure ExecInvalidate(Datasource: TDatasource; Field, Value: String; InvalidationTime: String);
var Query: TmySQLQuery;
begin
  Query:= CreateQuery;

  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add('UPDATE '+DataSource.Name);

  // Hier versuche ich den String 'invalidationTime' in die DB zu schreiben
  // Erzeugt wird dieser beim Aufruf von ExecInvalidate(Datasource,Field,Value,DateTimeToStr(now))

  Query.SQL.Add('SET valid= '+QuotedStr(invalidationTime));
  Query.SQL.Add('WHERE '+Field+'='+QuotedStr(Value));
  showmessage(Query.SQL.Text);
  Query.ExecSQL;
  Query.free;
end;
Leider kommt in der DB immer nur '0000-00-00 00:00:00' an. Muss ich den String anders formatieren? Ich krieg das nicht auf die Reihe...

Danke.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Cuchulainn

Registriert seit: 26. Aug 2003
182 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Datum in DB setzen

  Alt 21. Apr 2004, 10:53
Welchen Datentyp hast du in diesem Feld denn in der Tabelle?
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Datum in DB setzen

  Alt 21. Apr 2004, 10:54
Hi,
'hups'...vergessen zu erwähnen: 'Datetime'.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Datum in DB setzen

  Alt 21. Apr 2004, 11:10
Warum zum Geier ist invalidationTime ein String und was soll das bringen?

Wenn du den Datensatz auf invalid incl. Zeitpunkt setzen willst, geht doch ganz easy so:

Delphi-Quellcode:
  With Query Do
  Begin
    SQL.Text :=
      'UPDATE ' + Owner + '.' + Table_Name + #10 +
      'SET Valid = SysDate' + #10 +
      'WHERE ' + Field + ' = :i_FieldName';
    Prepared := True;
    Parameters.ParamByName('i_FieldName').Value := Value;
    ExecSQL;
  End;
Vorausgesetzt du verwendest immer noch Oracle, ansonsten musst du nach der Bezeichnung des aktuellen Zeitpunktes in deiner DB suchen.

OffTopic:
Wobei mir die Tabelle so nicht gefällt.
Sinnvoll wären die Felder:
SQL-Code:
OWNER Varchar2(30)
TABLE_NAME Varchar2(30)
isVALID Integer
ModDate Date
ModUser Varchar2(30)
... plus einem Audit log, in dem alle vergangenen Änderungen gelistet werden.
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Datum in DB setzen

  Alt 21. Apr 2004, 11:24
Tja,

ich arbeite immer noch mit mysql

Ich muss das Datum durch ein Menge von rekursiven Aufrufen durchschleifen, daher kann ich nicht die Funktion 'now'
direkt benutzen. Das heißt, ich muss bei ersten Aufruf der Prozedur zum Invalidieren ein Datum festlegen und als Parameter übergeben. Ob String oder TDateTime erscheint mir gleich. Beim Zusammensetzen meines SQL-Strings brauche ich sowieso einen String => also ist der Parameter auch ein String, den ich mit

Query.SQL.Add('SET valid= '+QuotedStr(invalidationTime)); in das SQL-Satement schreibe. Dabei mache ich wohl einen Denkfehler, der mit der Behandlung von TDatetime/ DB/DateTime zu tun hat...?

Hast Du noch etwas zum topic?

Danke.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Hansa

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

Re: Datum in DB setzen

  Alt 21. Apr 2004, 11:51
MySql? Dann o.G. 8) aber warum wandelst Du nicht das TDateTime einfach um ? Ohne die QuotedStr ?
z.B. so:
FieldByName ('KUNDESEIT').value := date;
Gruß
Hansa
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Datum in DB setzen

  Alt 21. Apr 2004, 12:05
Hallo Hansa,

ich arbeite mit einem Query.ExecSQL. Da gibt es keine Felder, auf die ich zugreifen kann.

Deshalb muss ich die Zeit direkt in mein Statement schreiben und dann absenden.

Noch weitere Ideen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Hansa

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

Re: Datum in DB setzen

  Alt 21. Apr 2004, 12:18
Benutze ein DataSet.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#9

Re: Datum in DB setzen

  Alt 21. Apr 2004, 12:23
hallo,

was steht denn in now drin?

musste gestern auchMyDate.= SysUtils.now; machen

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Datum in DB setzen

  Alt 21. Apr 2004, 12:44
Das Datum des Clients zu verwenden, halte ich für komplett ungeeignet. Du kannst nie wissen ob die Systemzeit richtig gestellt ist. Außerdem könnte man damit absichtlich die History verfälschen, indem man mehrere Änderungen bei veränderter Systemzeit auf dem Client vornimmt

Die Variable als String finde ich auch sinnlos. mySQL wird wohl auch DateTime unterstützen

Zitat:
...Ich muss das Datum durch ein Menge von rekursiven Aufrufen durchschleifen, daher kann ich nicht die Funktion 'now' direkt benutzen. ...
Tja...
Da hast du 2 Möglichkeiten:
  • Du suchst dir eine DB in der man "programmieren" kann (es muss ja nicht gleich PL/SQL sein ).
    zu erwähnen wäre da als kostenose Alternative zu Oracle vielleicht PostGreSQL.
  • Du musst dich für einen Zeitpunkt, beim Setzen des (in-)valid-Flags festlegen. An dem Schritt nimmst du das Systemdatum der DB und sagst "jetzt ist der Record invalid oder valid".

Alles andere würde niemals eine Software validierung überstehen, da es an allen Ecken und Kanten Lücken zur Manipulation oder Benutzerfehlern lassen würde.
Stichworte: Bei Google suchenISO 9001 und Bei Google suchenDIN 46001
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:14 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