Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как перевести значение TDateTime в цифровой формат MS SQL? [D6, MSSQL]


Aleksandr ©   (2002-10-07 13:49:00) 

Замучился я, люди... На разных компьютерах, как ни форматируй строку с датой и временем, SQL-сервер все равно по-разному воспринимает. Сначала он в упор путал месяцы и дни, когда я добавил в ExecQuery SET DATEFORMAT mdy, он путать перестал... Зато начал нервно относиться к сепараторам. На одной машине ему не нравятся слэши, на другой - точки, на третьей - дефисы... Он прекрасно понимает на любой машине, когда ему подаешь дату в виде цифры (дельфийскому TDateTime отнимаю 2, на это моего английского в чтении хелпа хватило), но я так и не смог въехать, как ему отконвертировать в получаемое число время из Дельфийского формата... Помогите, как перевести TDateTime в DateTime!


Aleksandr   (2002-10-07 14:48:00) [1]

Всем спасибо!
Сорри, въехал с дробной частью... она оказывается, одинакова у обоих типов.
SQL Datatime = Delphi TDataTime-2, а остальное совпадает.

Best Before 2024: Спасибо за обстоятельный код, узнал много нового... Просто хотелось сделать минимально просто.

2 Hooch: написанная мною формула и есть конвертация, если Вы посмотрите на данные в Делфи и ЭсКуЭл, то увидите, что одна и та же цифра для даты/времени ими понимается по-разному.

LordOfSilence: ну, просто не хотелось, чтобы работа программы зависела от персональных настроек на компьютере. Это я помню, чего надо настраивать, а если будет другой программист после меня, он может долго ковыряться в поисках ошибки.


Hooch   (2002-10-07 14:20:00) [2]

так TDateTime и есть DateTime (вроди как double по сути), зачем конвертировать или я что то не понял ?


LordOfSilence   (2002-10-07 14:16:00) [3]

Aleksandr, извините, если немного невпопад:
запустите "Программа сетевого клиента SQL Server"
(client network utility, X:\WINNT\SYSTEM32).
Вкладка "Параметры библиотеки DB",
переключатель "Использовать национальные настройки".
Может это поможет?


3JIA9I CyKA   (2002-10-07 14:15:00) [4]

Ку?
"20021007 14:14:14.840"


Best Before 2024   (2002-10-07 14:13:00) [5]

Привести к универсальному формату:

function StrSQLDateTime(D : TDateTime; Format : TSQLDateTimeFormat = dtfDateTime) : String;
begin
Result := "";
case Format of
dtfDateTime :
begin
DateTimeToString(Result, "yyyy-mm-dd hh:mm:ss", D);
Result := "{ ts """ + Result + """}";
end;
dtfDate :
begin
DateTimeToString(Result, "yyyy-mm-dd", D);
Result := "{ d """ + Result + """}";
end;
dtfTime :
begin
DateTimeToString(Result, "hh:mm:ss", D);
Result := "{ t """ + Result + """}";
end;
end;
end;


3JIA9I CyKA   (2002-10-07 14:11:00) [6]

МыЛо у тебя какое?


Johnmen   (2002-10-07 14:05:00) [7]

Передавай через параметры...


Наверх

Титульная страница Поиск, карта сайта Написать письмо