Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2009, 03:34   #1
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию Время сервера

Есть клиент который работает с БД, к которму имеют доступ люди из разных часовых поясов, не говоря о не синхронизированном времени большенства пользователей даже в пределах одного пояса. Соответственно при добавлении записей в одну БД если использовать локальное время произойти могут страшные вещи, по этому нужно как то сделать так что бы в новую строку добавлялась время сервера, а не каждого клиента свое.

База MS SQL.
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 26.06.2009, 08:15   #2
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

у оракла есть такая функция sysdate, она возвращает дату и время, может есть аналоги, но можно как вариант, создать таблицу с одним полем типа дэйттайм и периодически вносить туда дату и время, а с клиентов считывать
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.06.2009, 09:46   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а в MS SQL есть системная функция Current_Timestamp (или, что тоже самое - Getdate() )
достаточно использовать это в SELECT / INSERT чтобы получить текущие дату и время с сервера...

добавлено.
а может ещё сделать значение нужного столбца текущим датой/времене как Default, ещё при создании таблицы.
вот, цитирую из MSDN:
Цитата:
Б. Применение GETDATE в инструкции CREATE TABLE
В следующем примере производится создание таблицы employees, а функция GETDATE указывается в качестве значения по умолчанию для столбца emp_hire_date.

Код:
USE AdventureWorks;
GO
CREATE TABLE employees
(
 emp_id char(11) NOT NULL,
 emp_lname varchar(40) NOT NULL,
 emp_fname varchar(20) NOT NULL,
 emp_hire_date datetime DEFAULT GETDATE(),
 emp_mgr varchar(30)
);
GO

Последний раз редактировалось Serge_Bliznykov; 26.06.2009 в 10:00. Причина: добавлен синоним для функции. Ещё добавлен пример для Create Table
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.06.2009, 01:07   #4
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Так работает, но при вставке из самого Microsoft SSMS, можно ли как нибудь добавлять теперь это дефаултное значение программно, примерно так:
Код:
ADOTable1.FieldByName('Время').AsDateTime := ?Default
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 30.06.2009, 12:36   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Veiron Посмотреть сообщение
Так работает, но при вставке из самого Microsoft SSMS, можно ли как нибудь добавлять теперь это дефаултное значение программно
просто ничего туда не указывай и оно автоматом проставится на серваке
soleil@mmc вне форума Ответить с цитированием
Старый 30.06.2009, 16:49   #6
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Там есть еще два поля, при чем поле "Время" ключевое, если делаю так:
Код:
    ADOTable1.Append;
    //ADOTable1.FieldByName('Время').AsDateTime := ;
    ADOTable1.FieldByName('Автор').AsString := user;
    ADOTable1.FieldByName('Текст').AsString := e_chat_text.Text;
    ADOTable1.Post;
То при отправке пишет ошибку "Произошли ошибки во время выполнения многошаговой многошаговой операции. Проверьте значение всех состояний."
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 30.06.2009, 17:33   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

если делать через запрос типа
Код:
insert into your_table (...) values()
то можно опустить те самые поля, которые сервак автоматом выставит

чтобы сделать то же самое через компонент, нужно чтобы компонент умел возвращать с сервака значения ключевых полей/сиквенсов

а "Время" ключевое - это праймари?
soleil@mmc вне форума Ответить с цитированием
Старый 30.06.2009, 19:15   #8
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Надо полагать, что компонент TADOTable не умеет возвращать с сервака значения ключевых полей/сиквенсов?

Все, спасибо решил проблему использовав ADOQuery и ExecSQL.

Правда появилась новая но это уже в другой теме.
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru

Последний раз редактировалось Veiron; 01.07.2009 в 17:29.
Veiron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текущее время (системное время ) Sirk0 Общие вопросы Delphi 27 07.03.2015 17:52
Ответ от сервера. mustang007 Работа с сетью в Delphi 3 23.05.2009 10:33
Время нажатия на кнопку мыши(Время реакции) Кирилл13 Помощь студентам 1 11.04.2009 19:41
Счетчик на стороне сервера CD-R JavaScript, Ajax 4 31.03.2009 15:04
Атаки на сервера Pblog Обсуждение статей 0 27.05.2007 02:13