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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2014, 12:36   #1
spotip
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 68
По умолчанию MS SQL Server 2008 r2 ввод текущей даты и времени в БД

Подскажите пожалуйста, база MS SQL Server 2008 r2 после добавления данных через DBgrid хочу добавить время добавления данных делаю так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
pnd5, regtime:String;
begin
pnd5:=quotedstr(Unit1.Form1.Edit19.Text);
regtime:=FormatDateTime('yyyy-mm-dd hh:mm:ss', Now);
через хранимую процедуру записываю данные в бд:

Код:
with Unit2.DataModule2.Query1 do
begin
close;
SQL.clear;
SQL.Add('exec new_turb '+pnd5+','+regtime);
ExecSQL;
Unit2.DataModule2.T_Query1.Active:=False;
Unit2.DataModule2.T_Query1.Active:=True;
end;
end;
в бд regtime тип данных datetime

при записи выдаёт ошибку не правильный синтаксис "-"
пробовал делать так
Код:
regtime:=DateTimeToStr(now);
тот же эффект, подскажите где ошибка ?
spotip вне форума Ответить с цитированием
Старый 14.04.2014, 12:51   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Дата передаётся в виде строкового литерала. Поэтому её значение, по идее, должно быть в апострофах.
Код:
regtime:=#39+FormatDateTime('yyyy-mm-dd hh:mm:ss', Now)+#39;
Streletz вне форума Ответить с цитированием
Старый 14.04.2014, 13:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, на сервере есть время (кстати, намного более надёжное==достоверное, чем время на локальном компьютере), поэтому ничего не надо передавать, надо брать время с сервера:
Код:
SQL.Add('exec new_turb '+pnd5+', getdate() ');
во-вторых, если уж (по какой-то частной причине) решено не брать время с сервера, а передавать его с локального клиента, тогда это крайне желательно делать через параметр (использовать параметрический запрос). как это сделать в Delphi - примеров на форуме чуть больше, чем много...

Последний раз редактировалось Serge_Bliznykov; 14.04.2014 в 13:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.04.2014, 13:57   #4
spotip
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Дата передаётся в виде строкового литерала. Поэтому её значение, по идее, должно быть в апострофах.
Код:
regtime:=#39+FormatDateTime('yyyy-mm-dd hh:mm:ss', Now)+#39;
если пробую так, то ругается на неправильный синтаксис около +#39
spotip вне форума Ответить с цитированием
Старый 14.04.2014, 14:04   #5
spotip
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, на сервере есть время (кстати, намного более надёжное==достоверное, чем время на локальном компьютере), поэтому ничего не надо передавать, надо брать время с сервера:
Код:
SQL.Add('exec new_turb '+pnd5+', getdate() ');
во-вторых, если уж (по какой-то частной причине) решено не брать время с сервера, а передавать его с локального клиента, тогда это крайне желательно делать через параметр (использовать параметрический запрос). как это сделать в Delphi - примеров на форуме чуть больше, чем много...
Вы правы надёжнее брать время с сервера, мне в принципе так и надо, пробую как вы написали, пишет Неправильный синтаксис около конструкции “)” при этом я убрал из хранимых процедур параметр regtime


Код:
procedure TForm1.Button1Click(Sender: TObject);
var
pnd5:String;
begin
pnd5:=quotedstr(Unit1.Form1.Edit19.Text);with Unit2.DataModule2.Query1 do
begin
close;
SQL.clear;
SQL.Add('exec new_turb '+pnd5+',getdate()');
ExecSQL;
Unit2.DataModule2.Turb_Query1.Active:=False;
Unit2.DataModule2.Turb_Query1.Active:=True;
end;
вот собственно процедура
Код:
USE [8]
GO
create procedure new_turb(@pnd5 float)
as
Begin
insert into turb values ((select ISNULL(MAX(id)+1,1) from turb),
@pnd5)
end

Последний раз редактировалось spotip; 14.04.2014 в 14:08.
spotip вне форума Ответить с цитированием
Старый 14.04.2014, 14:11   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Неправильный синтаксис около конструкции “)” при этом я убрал из хранимых процедур параметр regtime
А, куда Вы тогда передадите дату?
Цитата:
надёжнее брать время с сервера, мне в принципе так и надо
Тогда getdate() разумнее всего поместить в саму процедуру. Тогда не надо будет вообще передавать дату.
Кроме того, в таблицах MS SQL значения по умолчанию ещё никто не отменял.
Streletz вне форума Ответить с цитированием
Старый 14.04.2014, 14:15   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Тогда getdate() разумнее всего поместить в саму процедуру. Тогда не надо будет вообще передавать дату.
Кроме того, в таблицах MS SQL значения по умолчанию ещё никто не отменял.
Полностью согласен!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.04.2014, 15:29   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

ютиси дату надо юзать
eval вне форума Ответить с цитированием
Старый 14.04.2014, 15:34   #9
spotip
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 68
По умолчанию

добавил в базу столбик getdate c параметром datetime и значением по умолчанию (getdate())

USE [8]
Код:
GO
create procedure new_turb(@pnd5 float, @getdate datetime)
as
Begin
insert into turb values ((select ISNULL(MAX(id)+1,1) from turb),
@pnd5, @getdate)
end
если так то при вызове программы:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
pnd5:String;
begin
pnd5:=quotedstr(Unit1.Form1.Edit19.Text);with Unit2.DataModule2.Query1 do
begin
close;
SQL.clear;
SQL.Add('exec new_turb '+pnd5+',getdate()');
ExecSQL;
Unit2.DataModule2.Turb_Query1.Active:=False;
Unit2.DataModule2.Turb_Query1.Active:=True;
end;
пишет неверный синтаксис возле ")"







подскажите как в эту процедуру добавить время
spotip вне форума Ответить с цитированием
Старый 14.04.2014, 15:44   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

это не возможно, самое трудное во всей галактики...

вам уже все сказали показали, в каком слове затруднения?
eval вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение файла с указанием текущей даты и текущего времени Alexsandrr Помощь студентам 4 09.10.2013 16:14
Занесение даты в SQL-Server 2008 $T@LKER БД в Delphi 17 15.03.2011 16:07
Макрос вставки текущей даты и времени в примечание. Severny Microsoft Office Excel 3 20.12.2010 14:09
Запись текущей даты времени в текстовый файл kanich Помощь студентам 3 07.09.2010 13:05
MS SQL Server 2008 и Visual Studio 2008 C# (Как работать с БД?) cherw9!40k Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 14.01.2010 20:51