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

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

Глюк с конвертацией [D5, IB5.x, IB6.x]


VaZ ©   (2003-01-16 10:36:00) 

День добрый мастера...
направьте пожалста меня...что то торможу
есть вот такой ввод даты
Dat:=InputBox("Введите дату проведения ревизии","Дата ревизии:","1.05.2001");
Затем это преобразуется и загоняется в StoredProc
RevisionDate:=StrToDate( Dat );
dm.spRevB.ParamByName("REVISION_DATE").AsDate := RevisionDate;

В процедуре идет обновление постоянной
UPDATE CONSTS
SET VALUE_B = CAST(:REVISION_DATE AS VARCHAR(255))
WHERE LABEL="SV_LAST_REV_DATE";

Проблема вот в чем... передается дата как 1.01.03
а в базе отображается как 01-JAN-03.. В связи с чем все глючит..
Вот код считывания даты из базы
LR_DATE:=#39+FormatDateTime("dd.mm.yyyy",StrToDate(dm.qWork.FieldByName("VALUE_B").AsString))+#39
Дату в виде 01-JAN-03 он не может привести ук нормальному выходу...Я смотрел настройки БДЕ, ничего странного там не обнаружил ..мож есть какой выход?


Big_Rom   (2003-01-20 06:24:00) [1]

в Квикдеска
там тоже формат даты утанавливается мож там утебя проблема ?


VaZ   (2003-01-20 05:48:00) [2]

спасибо Максу....теперь осталось понять а там ли глюк был...хи хи


Max Zyuzin   (2003-01-17 12:51:00) [3]

>VaZ © (17.01.03 12:07)
Ууу.. А что у тебя возвращается в результате dm.qWork.FieldByName("VALUE_B").AsString??


VaZ   (2003-01-17 12:07:00) [4]

тип varchar(75)


Max Zyuzin   (2003-01-17 11:53:00) [5]

>VaZ © (17.01.03 11:41)
VALUE_B - какой тип у этого поля?


VaZ   (2003-01-17 11:41:00) [6]

2 Max Zyuzin
вываливает приведенную ошибку не код а попытка изменить вручную поле в базе с помощью Квикдеска.
UPDATE CONSTS
SET VALUE_B = CAST(:REVISION_DATE AS VARCHAR(255))
WHERE LABEL="SV_LAST_REV_DATE";

это код до которого все идет Ок...то есть даты заносят ся в таблицу и эта в том числе...Попытка в обход записать ее строковым значением не удалась...вручную тож
LR_DATE:=#39+FormatDateTime("dd.mm.yyyy",StrToDate(dm.qWork.FieldByName("VALUE_B").AsString))+#39
А это код запроса значения из базы...ругающийся на формат даты текстовый


Max Zyuzin   (2003-01-17 10:58:00) [7]

Дата в таблице хранится в виде ЧИСЛА. (просто дата - целого, дата+время - с плавающей точкой). А то, что ты написал, это она так отображается...
Приведи код который у тебя вываливает ошибку...


VaZ   (2003-01-17 10:45:00) [8]

Так вот работаю с датой как с датой...на промежуточных этапах все идет нормально...будь это единственная дата, ее можно было б заменить...а так смысла нет поскольку идут операции с датами...
Все остальное заносится... и появляется в таблице а вот при апдейте константы проходит глюк какой то...поскольку я знаю что сервера хранят дату в таком формате...но я то настройки изменил чтоб он хранил как 01.01.03 а не 01-JAN-03...и несмотря на это (изменения системных стандартов и БДЕ) все идет по прежнему...мож в чем еще загвоздка?
Просто VarChar приходится держать для констант...так как там разные данные встречаются...и дату в запрос проще передать как дату...чтоб прошли операции с ней


Max Zyuzin   (2003-01-16 11:33:00) [9]

Выход есть... с датой работать как с датой, а не со строкой... запросы делать через параметры, а дату получать из DateTimePicker-а


Johnmen   (2003-01-16 11:10:00) [10]

Ну так и вставляй строковое значение "01.01.99", а не датное !
Где здесь проблема ?!


VaZ   (2003-01-16 11:06:00) [11]

Просто остальные то даты как то в этом поле умудрились встать как 01.01.99 ...то есть в таком виде


VaZ   (2003-01-16 11:04:00) [12]

Всяко извращение но не я прогу писал...я тока модифицирую...
а вручную исправить не удается пишет-
arithmetic overflow or division by zero has occured
arithmetic exception, numeric overflow or string truncation
Cannot transliterate character between character sets.

А как вытянуть то..намекните команду то?


Johnmen   (2003-01-16 10:54:00) [13]

...И вообще, хранить дату в символьном поле - извращение еще то...


Alexandr   (2003-01-16 10:52:00) [14]

сервер всегда дату выводит как 01-JAN-03
хочешь по-другому - используй или UDF или вытягивай дату себе в программу как AsDateTime, и уже сам форматируй как тебе надо.


Наверх

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