В клиенте применяю таблицу VSFlexGrid, заполняю его из БД на SQL сервере. Пользователь может редактировать данные, прямо в таблице. После нажатия на ввод, срабатывает вложенная процедура, в которую передается информация (название поля, новое содержимое, идентификатор, индефикатор пользователя). На сервере формируется из перечисленных составляещих оператор "Update", затем выполняется. Работает все ОК. В таблице есть поле, с датами сдачи конструкторской документации. Здесь и вылезли проблемы. В зависимости от настроек клиента и сервера, дата не воспринимается. К примеру 29 - воспринимается месяцем и выдается ошибка. Поэтому, в процедуре, в зависимости от поля, сделал проверку и преобразование даты.
- Код: Выделить всё
If @Pole = 'DateOut'
BEGIN
SET @Znach = CAST (CONVERT([smalldatetime], @Znach, 104) AS [varchar](250))
END
Все заработало, и я стал эксперементировать с разными настройками даты в ОС сервера и клиента. Вылезли еще косяки.
А теперь, Вопрос. Как во вложенной (хранимой) процедуре, узнать стиль форматирования даты на самом SQL сервере (цифра "104", в приведенном примере), чтобы хранимая процедура преобразовывала дату, в зависимости от настроек сервера?
На всякий случай, ниже - весь код процедуры:
- Код: Выделить всё
CREATE PROCEDURE [sp_EditZnachKOI]
(@KOI_ID [varchar](10), --идентификатор КОИ
@Izmen [varchar](10), --идентификатор пользователя, изменившего запись
@Pole [varchar](15), --наименование поля в таблице "KOI_Rekv"
@Znach [varchar](250)) --значение
AS
DECLARE @zapros [varchar](8000) --переменная, в которой хранится выполняемый запрос
If @Pole = 'DateOut'
BEGIN
SET @Znach = CAST (CONVERT([smalldatetime], @Znach, 104) AS [varchar](250))
END
IF @Znach IS NULL --сравниваем значение с NULL
BEGIN --значение = NULL ==> вставляем слово NULL
SET @zapros = "UPDATE [Constructor].[dbo].[KOI_Rekv] "
SET @zapros = @zapros + "SET [" + @Pole + "] = " + "NULL" + ", "
SET @zapros = @zapros + "[Izmen] = '" + @Izmen + "' "
SET @zapros = @zapros + "WHERE [KOI_ID] = '" + @KOI_ID + "'"
END
ELSE
BEGIN --значение не равно NULL ==> вставляем результат
SET @zapros = "UPDATE [Constructor].[dbo].[KOI_Rekv] "
SET @zapros = @zapros + "SET [" + @Pole + "] = '" + @Znach + "', "
SET @zapros = @zapros + "[Izmen] = '" + @Izmen + "' "
SET @zapros = @zapros + "WHERE [KOI_ID] = '" + @KOI_ID + "'"
END
EXECUTE (@zapros)
--EXECUTE [sp_EditZnachKOI] @KOI_ID = 99, @Izmen = 1, @Pole = DateOut, @Znach = '25.04.2005' --запуск
Буду очень признателен любой информации.