Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MSSQL Stored Procedure -> datetime vergleichsprobleme??? (https://www.delphipraxis.net/113414-mssql-stored-procedure-datetime-vergleichsprobleme.html)

NormanNG 8. Mai 2008 07:20

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Zitat:

2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
2008-07-05 14:16:32.000 ¦ 2008-07-05 16:16:32.000 ¦ 2008-05-07 15:16:32.000
In deinem @date_time sind Monat und Tag vertauscht!


SQL-Code:
declare @Date_Time datetime
set @Date_Time = '2008-05-07 15:16:32'

select *
from [t_bb_folder_info]
where [t_bb_folder_info].[date_time] between DateAdd(second, -1, @Date_Time) and DateAdd(second, 1, @DateTime)
getippt und nicht getestet

cherry 8. Mai 2008 07:28

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Also jetzt seh ichs auch aber Hallo, da stimmt doch definitiv etwas nicht?! *hirnschleiff*

SQL-Code:
declare
  @date_time datetime
SET @date_time = CAST('2008-07-05 15:16:32.000' AS datetime);
SELECT * FROM [t_bb_folder_info]
where [t_bb_folder_info].[date_time] Between DateAdd(second,-1,@date_time) and DateAdd(second,1,@date_time)
erzeugt folgende ausgabe

SQL-Code:
172743 ¦ C:\Dokumente und Einstellungen\th21498\            ¦ 8789271 ¦ 2008-05-07 15:16:32.000 ¦ 12
172744 ¦ C:\Dokumente und Einstellungen\th21498\borland    ¦ 5117    ¦ 2008-05-07 15:16:32.000 ¦ 12
172745 ¦ C:\Dokumente und Einstellungen\th21498\.revj0079   ¦ 4542    ¦ 2008-05-07 15:16:32.000 ¦ 12
172746 ¦ C:\Dokumente und Einstellungen\th21498\.SunDown... ¦ 97451   ¦ 2008-05-07 15:16:32.000 ¦ 12
.
.
.
also oben beim Select gebe ich dieses datetime mit: '2008-07-05 15:16:32.000' dann findet es dieses datetime '2008-05-07 15:16:32.000'

spinn ich jetzt??????????????????????? :wall:

NormanNG 8. Mai 2008 07:33

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Hi,

das liegt dann an deinem eingestellen Datumformat des SQl-Servers.
Nimm mal das

SQL-Code:
set dateformat ymd

declare @Date_Time datetime
set @Date_Time = '2008-05-07 15:16:32'

select *
from [t_bb_folder_info]
where [t_bb_folder_info].[date_time] between DateAdd(second, -1, @Date_Time) and DateAdd(second, 1, @DateTime)
[edit]
unabhängig vom eingstellten Datumformat ist folgendes

set @Date_Time = '20080507 15:16:32.000'
[/edit]

cherry 8. Mai 2008 07:39

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
hmmm...
SQL-Code:
set dateformat ymd
es ist ein produktiver MSSQL Server auf dem sehr wichtige "Programme" laufen ich schätze das kann ich mir nicht erlauben sonst werd ich noch gesteinigt :lol:

kann ich das Problem nicht anders lösen?

cherry 8. Mai 2008 07:48

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Zitat:

Zitat von NormanNG
unabhängig vom eingstellten Datumformat ist folgendes
set @Date_Time = '20080507 15:16:32.000'

so würde ich ja "set dateformat ymd" umgehen, aber der parameter @Date_Time soll ja dann am Ende von Delphi an die StoredProc übergeben werden, wie lös ich denn da das Problem... muss ich zuerst das Datum konvertieren? wenn ja wie?

und heisst das mein Programm würde dann nicht mehr so richtig funktionieren wenn der SQL -Server ein anderes Datumsformat hätte?

NormanNG 8. Mai 2008 07:53

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Hi,



Zitat:

so würde ich ja "set dateformat ymd" umgehen,
ja

Zitat:

aber der parameter @Date_Time soll ja dann am Ende von Delphi an die StoredProc übergeben werden, wie lös ich denn da das Problem... muss ich zuerst das Datum konvertieren?
Nein. Die Einstellung betrifft nur das Umwandeln von String in Datetime, also nur deinen Test im Query-Tool.
Vom Programm werden (hoffendlich) direkt Datetime-Werte geliefert.

Zitat:

und heisst das mein Programm würde dann nicht mehr so richtig funktionieren wenn der SQL -Server ein anderes Datumsformat hätte?
Wenn die Umwandlung String->Datetime benötigt und das o.g. unabhängige Format verwendet wird,
dann ist es eben unabhängig von den Server-Einstellungen.

cherry 8. Mai 2008 08:01

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
also bitte nochmals für all diejenigen, die einen IQ < 100 haben :lol:

Zitat:

Zitat von NormanNG
Nein. Die Einstellung betrifft nur das Umwandeln von String in Datetime, also nur deinen Test im Query-Tool.
Vom Programm werden (hoffendlich) direkt Datetime-Werte geliefert.

Welche Einstellung?
als Parameter wird aber bereits ein datetime Wert geliefert wie du das ja hoffst, also wo passiert dann das Umwandeln von String in Datetime... am schluss habe ich ja nirgens mehr ein String Wert.. eine solche Umwandlung wird es nie geben...

:wiejetzt:

NormanNG 8. Mai 2008 08:11

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
Zitat:

Nein. Die Einstellung betrifft nur das Umwandeln von String in Datetime, also nur deinen Test im Query-Tool.
Vom Programm werden (hoffendlich) direkt Datetime-Werte geliefert.
also genauer, hier

SQL-Code:
declare @Date_Time datetime
set @Date_Time = '20080507 15:16:32.000'
select ...
Wenn dein Select dann das gewünschte Ergebnis liefert, baust du das
in eine Procedure und prüft diese nochmal per Aufruf aus dem Query-Tool
(hierbei wieder das Datumformat beachten). Geht das auch, dann weiter in Delphi...

cherry 8. Mai 2008 08:13

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
ok... ich meld mich dann wieder wenn ich soweit bin...

cherry 8. Mai 2008 08:25

Re: MSSQL Stored Procedure -> datetime vergleichsprobleme
 
ok also SELECT funktionierte... meine StoredProc scheint es auch zu tun... so sieht sie nun aus:

SQL-Code:
ALTER PROCEDURE [dbo].[p_bb_ignore_folder]
@username varchar(30),
@ignore_dir varchar(255),
@date_time datetime

AS
DECLARE
  @size bigint,
  @id_user int

SET @size = -1;
SET @id_user = (SELECT [t_bb_user].[id_user] FROM [t_bb_user] WHERE [t_bb_user].[username] = @username);
SET @size = ( SELECT SUM([t_bb_folder_info].[folder_size]) FROM [t_bb_folder_info]
  WHERE ( 
           [t_bb_folder_info].[id_user] = @id_user
           AND [t_bb_folder_info].[folder] LIKE @ignore_dir
           AND dbo.DateOnly([t_bb_folder_info].[date_time]) = dbo.DateOnly(@Date_Time)
           AND [t_bb_folder_info].[date_time] BETWEEN DateAdd(millisecond, -1, @Date_Time) and DateAdd(millisecond, 1, @Date_Time)                      
  )
);

UPDATE t_bb_logon
SET
  [t_bb_logon].[ignore_dir_size] = @size
WHERE (
         [t_bb_logon].[id_user] = @id_user
         AND dbo.DateOnly([t_bb_logon].[date_time]) = dbo.DateOnly(@Date_Time)
         AND [t_bb_logon].[date_time] BETWEEN DateAdd(millisecond, -1, @Date_Time) and DateAdd(millisecond, 1, @Date_Time)        
);      

RETURN @size
mit dem aufruf direkt vom Server funktioniert das so:

SQL-Code:
declare
  @result bigint
 
EXEC @result = p_bb_ignore_folder 'th21498', 'C:\Dokumente und Einstellungen\th21498\Lokale Einstellungen\%', '20080507 15:16:32.000'
print CAST(@result AS CHAR(255));
alles palleti...

wie befürchtet funktioniert der Aufruf aus meiner Delphi-Applikation leider nicht. Meine Vermutung -> eben das angesprochene ydm <-> ymd Problem...

meint Aufruf in Delphi:

Delphi-Quellcode:
procedure TSisterWatch.IgnoreDir(Date_Time: TDateTime);
var
  tmp_igp: String;
begin
  tmp_igp := GetIgnoreDir;
  if tmp_igp <> '' then
  begin
    with ADOStoredProc8 do
    begin
      Parameters.ParamValues['@username'] := Username;
      Parameters.ParamValues['@ignore_dir'] := tmp_igp;
      Parameters.ParamValues['@date_time'] := Date_Time;
      ExecProc;
    end;
  end;
end;
wie stelle ich das nun an...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 Uhr.
Seite 3 von 4     123 4      

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