AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl
Thema durchsuchen
Ansicht
Themen-Optionen

[MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

Ein Thema von Christian Seehase · begonnen am 9. Nov 2006 · letzter Beitrag vom 10. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#1

[MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 12:28
Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO
Moin Zusammen,

in einer Spalte vom Typ smalldatetime möchte ich nur die Zeit speichern, da mich an der Stelle das Datum nicht weiter interessiert.
Die Zeit stammt aus TDateTimePicker.Time.
Um jetzt einen definierten Zustand für die Tabelle zu schaffen wollte ich, mit Hilfe von Frac nur den Zeitanteil wegschreiben, so dass also, z.B., 0,25 für 6:00 Morgens gespeichert wird.
Durch die 0 im Datumsanteil müsste dort also 01.01.1900 06:00:00 gespeichert werden.

Leider ist der SQL-Server da anderer Meinung, und wirft einen Fehler:

Zitat von Fehlermeldung:
[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion from datetime data type to smalldatetime data type resulted in a smalldatetime overflow error
Das ein datetime mit dem Wert 0,25 dem 01.01.1753 als Datum nicht in einen entsprechenden smalldatetime konvertiert werden kann, und somit zu diesem Fehler führt kann ich ja noch nachvollziehen, aber warum wird überhaupt der Umweg über datetime genommen, wenn das Ziel vom Typ smalldatetime ist?

Zugewiesen wird der Wert über TADODataSet.FieldValues[...], gespeichert dann per TADODataSet.Post.

Als Workaround addiere ich jetzt einfach das zur Zeit gehörige Datum mit auf, aber woher das Problem stammt wüsste ich doch ganz gerne.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 13:46
Zitat von Christian Seehase:
Zugewiesen wird der Wert über TADODataSet.FieldValues[...], gespeichert dann per TADODataSet.Post.
Bitte etwas mehr Code. vor allem welche AsXXX-Methode verwendet wird.
Generell ist es eigentlich immer mit weniger Probleme behaftet wenn man INSERT-Statement mit Parametern schreibt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 14:26
Code:
[b]smalldatetime[/b]
Datums- und Zeitangaben zwischen dem 1. Januar 1900 und dem 6. Juni 2079 mit einer Genauigkeit von einer Minute.
Wenn du nun beim Delphityp TDateTime das Datum wegschneidest (also zwischen 0.0 und 0.999999), dann bist du ganz knapp ausserhalb des für smalldatetime gültigen Bereichs.
Die Genauigkeit von einer Minute ist für viele Anwendungen zu wenig; ob das für dich ausreichend ist?
Andreas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 16:36
Moin Berhard,

ich verwende keine As-Methode, sondern direkt den Variant FieldValues.

Die Umstellung von Edit/Post auf UPDATE habe ich auch schon auf dem Zettel

Zitat von shmia:
Wenn du nun beim Delphityp TDateTime das Datum wegschneidest (also zwischen 0.0 und 0.999999), dann bist du ganz knapp ausserhalb des für smalldatetime gültigen Bereichs.
Ja, aber auch nur, wenn der Wert in konvertierter Form übergeben wird. Wird der Wert erst serverseitig umgewandelt dürfte das nicht zu einem Fehler führen. Dort würde 0 nur anders interpretiert werden, so dass eben 01.01.1900 herauskommt, und nicht, wie in Delphi 30.12.1899.
Für mich sieht es, gemäss Fehlermeldung, so aus, als würde der Wert zweimal konvertiert werden, einmal in datetime (nicht TDateTime, sondern serverseitig), und dann in smalldatetime, und dann kracht es

Mir stellt sich halt nur die Frage, wodurch diese doppelte Konvertierung hervorgerufen wird.

Zitat von shmia:
Die Genauigkeit von einer Minute ist für viele Anwendungen zu wenig; ob das für dich ausreichend ist?
da es sich hier um Reisedaten (Abfahrt,Ankunft) handelt, genügt die Genauigkeit.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 22:03
Zitat von Christian Seehase:
Mir stellt sich halt nur die Frage, wodurch diese doppelte Konvertierung hervorgerufen wird.
Schon mal den MS SQL Tracer angeschmissen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 22:42
Moin Bernhard,

meinst Du den Profiler?
Durch den muss ich mich dann erst mal durchbeissen
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 22:55
Hallo Christian,

Also ein direktes 'INSERT' funktioniert ohne Probleme.

Ich weiss aber, wo der Hund begraben liegt:
Delphi (oder ADO) wird deine Zeit in '31.12.1899 05:30' übersetzen. Klar, was anderes als TDateTime kennt Delphi ja auch nicht und 0,5 ist nun mal der '31.12.1899 12:00'. Dann wird das zum Server geschickt und der meckert dann.

Der Profiler ist übrigens ganz einfach.
1. Starten
2. Einloggen
3. Die Standardeinstellungen für ein Trace übernehmen
4. Erstmal den output anschauen
5. Oben sind ein paar Knöppe, Start,Stop, Pause (und noch ein paar mehr, egal jetzt)
6. Drück auf Stop, und spiel mit den Optionen rum. Interessant ist, WAS du anzeigen willst, WAS du protkollieren willst. Weiterhin kannst Du noch filtern, WER angezeigt werden soll.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 23:26
Moin alzaimar,

danke.
Jetzt habe ich es hinbekommen.
Nun muss ich nur noch rauskriegen, was ich überwachen muss
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 23:47
Zitat von alzaimar:
Delphi (oder ADO) wird deine Zeit in '31.12.1899 05:30' übersetzen. Klar, was anderes als TDateTime kennt Delphi ja auch nicht und 0,5 ist nun mal der '31.12.1899 12:00'. Dann wird das zum Server geschickt und der meckert dann
Und wieso diese Unterschiede? Delphi hat AFAIK mit TDatetime das Ole-Datumsformat übernommen.
Ist wohl MS nicht fähig sich auf den gleichen Startwert zu einigen. Hier sehe ich aber den 31.12.1899 00:00 eh etwas sehr ungewöhnlich an (auch wenns der von Delphi ist)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: [MSSQL2000] Smalldatetime-Konv. ohne Datum schlägt fehl

  Alt 9. Nov 2006, 23:50
Moin Zusammen,

bei Delphi ist der Startwert der 30.12.1899 00:00 (warum auch immer )

Morgen werde ich mich noch mal durch den ADO-Aufruf mit Debug-DCUs durcharbeiten, um mal zu sehen, an welcher Stelle denn nun die Konvertierung stattfindet.
Mit dem Tracen finde ich das nicht
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 17:45 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