Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Невозможно сконвертировать char в date в ASA 8 / 5 сообщений из 5, страница 1 из 1
11.01.2004, 12:40
    #32372484
lesa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно сконвертировать char в date в ASA 8
В чем проблема?

Есть таблица,где есть поле типа char(10). Надо сконвертировать его в тип date. В таблице уже есть данные. В конвертируемом поле хранятся даты ("27.06.2002"). Из Sybase Central пытаюсь конвертировать char(10) в date. Выдается ошибка: Cannot convert 27.06.2002 to a timestamp. Похоже на то, что ASA 8 принимает день за год, а год за день. В Options к таблице:
Setting Default
Date_format DD-MM-YYYY YYYY-MM-DD
Date_order DMY YMD
Timestamp_format DD-MM-YYYY... YYYY-MM-DD....
короче, везде установлено в вид DD-MM-YYYY. Настройка Windows98 в формат DD-MM-YYYY. Пробовал менять разделители, не помогает.
Из Delphi пытаюсь вставить в поле дата, та же самая ошибка. Проблема в ASA 8, она почему-то упрямо понимает все как YMD.Что делать?
...
Рейтинг: 0 / 0
11.01.2004, 16:33
    #32372525
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно сконвертировать char в date в ASA 8
Чтобы не зависеть от настроек БД и ОС, можно преобразовывать даты с помощью функции CONVERT, например:
Код: plaintext
1.
select Convert(date, '31.12.2003',  104 );
select Convert(date, '31-12-2003',  105 );

Последний параметр функции Convert позволяет точно указать формат конвертации.

Так же проверьте опции - возможно на юзера существуют опции, которые перекрывают опции PUBLIC. Это можно сделать так:
Код: plaintext
1.
2.
select *
from SYSOPTIONS
where  "Option"  in ('DATE_FORMAT', 'DATE_ORDER', 'TIMESTAMP_FORMAT')

Если на юзера действительно есть установленные опции, то их можно сбросить, написав:
Код: plaintext
1.
2.
set OPTION DBA.DATE_FORMAT=;
set OPTION DBA.DATE_ORDER=;
set OPTION DBA.TIMESTAMP_FORMAT=;


Sybase Central и ISQL при коннекте для своей сессии меняют значения некоторых опций. Если Вы хотите, чтобы в них корректно отображались и вводились даты, то лучше всего написать свою хранимую процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE PROCEDURE sp_sys_DBInit ()
 /*
  Регистрация подключения и инициализации БД для работы с клиентом
*/ 
begin
   -- Инициализация системных функций БД
 
  call sp_login_environment ();

  set TEMPORARY OPTION DATE_FORMAT = 'DD.MM.YYYY';
  set TEMPORARY OPTION TIMESTAMP_FORMAT = 'DD.MM.YYYY HH:NN:SS.SSS';
  set TEMPORARY OPTION DATE_ORDER = 'DMY';

   -- Далее можно что то свое, 
 
   -- например инициализацию 
 
   -- глобальных переменных
 
   -- ...
 
end

Теперь достаточно установить опцию LOGIN_PROCEDURE на эту процедуру в окне Database Options Sybase Central или написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 -- Разрешаем выполнение процедуры всем членам группы PUBLIC
 
GRANT EXECUTE ON DBA.sp_sys_DBInit TO PUBLIC
GO

 -- Устанавливаем значение опции
 
set OPTION PUBLIC.Login_procedure='DBA.sp_sys_DBInit'
GO


Почему даты не воспринимаются в Delphi необходимо смотреть отдельно, в зависимости от способа доступа к данным (BDE, ODBC, ADO, DBEXPRESS) - настройки будут разными.
...
Рейтинг: 0 / 0
11.01.2004, 18:21
    #32372547
lesa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно сконвертировать char в date в ASA 8
ASCRUS

Информация для уточнения: я меняю char на date в структуре таблицы, т.е. вызываю свойства поля меняю в нем char на date. И если у меня там значение лежит в виде 27-06-2002, то выдается упомянутая ошибка, а если лежит в виде 2002-06-27, то все нормально - тип поля меняется на date. Т.е. получается, что независимо от настроек ASA 8 упрямо требует зачение в виде YYYY-MM-DD. Что-то здесь не так, только не знаю пока где искать (опыт небольшой).

А с Дельфи следующее: есть поле ввода типа TMaskEdit куда вводится дата, формат ввода даты в поле - !99/99/9999;1;_. Запись добавляется посредством TADOQuery - свойство SQL имеет значение:
insert into klient ( ..., doc_date, ... ) values ( ..., :doc_date, ... ).значение параметра формируется строкой
q.Parameters.ParamValues['doc_date'] := StrToDate(v_docdate.Text);
после выполнения ExecSQL, Дельфи выдает ошибку:
Project Project2.exe raised exception class EOleException with message
'[Sybase][ODBC Driver][Adaptive Server Anywhere]Restricted data type attribute violation/Cannot convert 01-01-2004 to a timestamp'.

Который день бьюсь, не могу понять в чем дело, как обойти проблему.

Сделал запрос на параметры, получил следующее:

user_name,option,setting
'DBA','Date_format','dd.mm.yyyy'
'DBA','Timestamp_format','dd/mm/yyyy'
'PUBLIC','Date_format','DD-MM-YYYY'
'PUBLIC','Date_order','DMY'
'PUBLIC','Timestamp_format','DD-MM-YYYY HH:NN:SS.SSS'
...
Рейтинг: 0 / 0
12.01.2004, 09:34
    #32372701
Я
Я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно сконвертировать char в date в ASA 8
Чего то я не пойму lesa, ты пытался сделать, как советовал ACRUS автор
set TEMPORARY OPTION DATE_FORMAT = 'DD.MM.YYYY';
set TEMPORARY OPTION TIMESTAMP_FORMAT = 'DD.MM.YYYY HH:NN:SS.SSS';
set TEMPORARY OPTION DATE_ORDER = 'DMY';
? Хотя бы просто из интеректива, ну или наводишь мышкой в централе на базу, жмешь правую кнопку, выбираешь Set Option и сам ручками выставляешь эти свойства...
...
Рейтинг: 0 / 0
12.01.2004, 17:01
    #32373466
lesa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно сконвертировать char в date в ASA 8
Я

Так там уже выставлено (см.выше, я там указал выставленные значения).
Так что настройки на базу и настройки на юзеров в базе выставлены в последовательность день-месяц-год, а все равно конвертит char в date только если значение имеет последовательность год-месяц-день.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Невозможно сконвертировать char в date в ASA 8 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]