![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема со smallDateTime [D6, MSSQL]
_sulent © (2004-03-11 09:57:00)Привет Мастерам!
Проблема возникает такого порадка, я пытаюсь обновить данные из своей программы. Работаю через ADO с MS SQL Server 2000. Так вот, когда присваиваю дату, например поле имеет типа smalldatetime, а параметр у меня как DateTime, то выдает ошибку:
The conversion from datetime data type to smalldatetime data type resulted in a smalldatetime overflow error.
Что может быть, и как выкрутиться из этой ситуации?
Nikolay M. (2004-03-11 13:15:00) [1]
> sniknik © (11.03.04 12:35) [13]
Только не пойму, почему все-таки ХП или datatime не угодили?
sniknik (2004-03-11 12:35:00) [2]Nikolay M. © (11.03.04 12:20) [11]0
если передается не строкой а числом(датой) то ошибки переконвертации исключаются (типа вместо неправильной строки 0 подставит а это 30.12.1899), остается только дата задается сознательно вне пределов типа.
а второй вариант, с отсечением пределов ему не подходит. пусть думает ворд в байт укладывает.
_sulent (2004-03-11 12:25:00) [3]хм... ну ладно, попробую что-нить родить! всем спасибо!
Nikolay M. (2004-03-11 12:20:00) [4]Понимаю, что танец с бубном, но все же: попробуй дату округлить с точностью до секунды (чтобы не было долей секунд) и поиграться с AsDateTime/AsFloat, ftDatetime/ftFloat? Хотя я лично таким никогда не заморачивался.
sniknik (2004-03-11 12:14:00) [5]> второй случай меня как-то не особенно устраивает
на уровне дельфи сделай алгоритм присвоения байту(0..255) ворда(0..65535), без потерь значений после 255 при обратном переносе, это и будет самое оно.
сделаеш, пользуйся. нет не морочь мозги себе и людям.
_sulent (2004-03-11 12:08:00) [6]гм... дело в том что он все равно не хочет понимать то что я пишу, хоть строку ему присваивай, хоть дату, он все равно выдает ошибку... второй случай меня как-то не особенно устраивает, так что нужно на уровне дельфи разруливать как-то... есть еще какие-нить советы?
sniknik (2004-03-11 11:19:00) [7]и тогда можно будет написать примерно такой запрос на вставку, на все случаи
DECLARE @DAT DateTime
SET @Dat = :date_opl
INSERT INTO ATab (Name,Dat) VALUES ('Test', CASE WHEN @Dat >= '19000101' AND @DAT <= '20790606' THEN @Dat ELSE Null END)
sniknik (2004-03-11 11:01:00) [8]основная проблема в этом date_opl. text; передавай туда дату раз уж тип параметра у тебя fr DateTime.
_sulent (2004-03-11 10:49:00) [9]дело в том, что нужно использовать именно smalldatetime, иначе будут писаться не верные значения...
то что он за рамки переходит это я понимаю, но только краткую я даже вручную не могу проставить в ObjectInspector'e, он сразу автоматом выдает ftDateTime.
и ничего не получается ему сказать...
ZrenBy (2004-03-11 10:38:00) [10]Дата какая ?
smalldatetime
Date and time data from January 1, 1900, through June 6, 2079,
with an accuracy of one minute.
SergSuper (2004-03-11 10:36:00) [11]Вы передаёте дату, которая лежит вне пределов допусимых значений для smalldatetime, о чем Вам сервер и говорит. Ну вот и думайте почему это так и где.
Лично я никогда smalldatetime не использую - писать на 5 букв больше.
_sulent (2004-03-11 10:27:00) [12]ну что, правда никто не знает как это все нужно сделать?
_sulent (2004-03-11 10:05:00) [13]Так я передаю параметр:
ADOQuery.parameters.paramByName('date_opl').value := date_opl.text;
А так он у меня записан в ObjectInspector'e:
DataType = frDateTime
Direction = pdInput
Name = date_opl
NumericScale=0
Precision=16
Size=16
Value.Type=Unassigned
stone (2004-03-11 10:01:00) [14]Параметр где?