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

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

Что не так ? [D5, D6, IB5.x, IB6.x]


gds ©   (2003-10-16 17:12:00) 

Ув.люди помогите решить возникшую ситуацию :

...
Form1.IBTable3Data.AsDateTime:=Date;
Form1.IBTable3Vremia.AsDateTime:=Time;
...
Form1.IBTable3.Post;
Form1.IBTransaction1.Commit;
...

Этот фрагмент программы прекрасно выполнялся в среде Делфи5 и не вызывал нареканий.. После установки Делфи6.. Form1.IBTable3Vremia.AsDateTime:=Time; начала вызывать ошибку: ["0.57895715" is not a valid TimeStamp.] .. хотя вышестоящая команда присваивания текущей даты выполняеться как и раньше, не пойму: что ж не так ему с временем? У кого есть какие идеи - буду благодарен. Дополнительная информация: ( Var IBTable3Vremia: TTimeField; Тип поля в БД - Time, БД Interbase.. Сервер БД - FireBird.. К базе обращаюсь посредством компонент IBX.) Пробовал выводить значение Label1.Caption:=TimeToStr(Time); Увидел то, что и ожидал - текущее время.. Что же не так не понимаю?


gds   (2003-10-17 12:20:00) [1]

есть конечно вариант - изменить поле базы с тайм допустим на стринг.. но ведь это ж противоестественно ((( Хочеться докопаться до сути.


gds   (2003-10-17 12:18:00) [2]

ДА под делф5 я работал с тем же сервером БД. Просто здесь дело принципа.. Не хочеться ставить делф5, чтобы дописать новую функцию.( .. говоря откровенне он по началу ругалс я и на денежные поля (при том что в 5ом все было Ок) .. но я нашел, что ему мешало.. А вот с этой проблемой никак.. и дико то, что даже стандртный грид, для работы и правки таблиц ИнтерБейса вызывает ошибку.. Это просто маразм.


kaif   (2003-10-17 12:09:00) [3]

А из под Delphi5 ты с Firebird работал? И все работало в IBX?
Если да, то ошибка (логически) в IBX где-то. Поставь апдейт IBX. Или пошагово попытайся найти, где это происходит в IBX-ах и почему.


gds   (2003-10-17 11:26:00) [4]

gds © (17.10.03 11:22) [14] ИСПРАВЛЕНО: .. Даже таким образом: IBTable1.FieldByName("VREMIA").AsDateTime:=StrToTime("16:00:00"); ...


gds   (2003-10-17 11:22:00) [5]

.. Это просто наваждение не дает мне покоя!! Значит так создаю таблицу в IBConsole:
CREATE TABLE "PROBA"
(
"NOPER" INTEGER NOT NULL,
"DATA" DATE,
"VREMIA" TIME,
PRIMARY KEY ("NOPER")
);

После чего обращаюсь к ней через IBTable и не могу присвоить полю VREEMIA значение времени - ничего не выходит ошибка таже ["число" is not a valid TimeStamp].. хотя в гриде связанным датасет с ИБТейбл верно отображаеться введенное мною значение.. но грид показывает что запись находиться в режиме вставки [*] и поститься ну никак не желает.. Что это такое?? ПОчему в Делфе5 ВСЕ РАБОТАЕТ, а в мною используемой 6ой не хочет .. !!! Даже таким образом: IBTable1.FieldByName("VREMIA"):=StrToTime("16:00:00"); Более того если вносить изменения прямо в гриде, оно тоже ругаеться тем же матом.. Что это за глюка? Попробуйте сами.. (Хотя из оболочки IBConsole это поле редактируеться так же прекрасно как и остальные два..)


kostik78ua   (2003-10-16 18:25:00) [6]

К сожалению не смогу протестировать (нету Делфи 6), но пару советов:
1. ...AsFloat := Time;
2.
var d: TDateTime;
d := Time;
...AsDateTime := d;
3.
var t: TTimeStamp;
t := DateTimeToTimeStamp(Time);
...AsDateTime := t;


gds   (2003-10-16 18:16:00) [7]

function getTime(uColumnNumber: Word; pData: Pointer; var pbIsNull: LongBool)


gds   (2003-10-16 18:14:00) [8]

простите за ламерский вопрос,
параметры чего вписать? там их три ))
Form1.IBTable3Vremia.AsDateTime:=GetTime();


gds   (2003-10-16 18:07:00) [9]

чувствую, что надо интсалить 5ый и править в нем (((((((


gds   (2003-10-16 18:05:00) [10]

диалект 3


gds   (2003-10-16 18:05:00) [11]

РЕПЛИКА gds © (16.10.03 18:00)ИСПРАВЛЕНА :Form1.IBTable3Vremia.AsSQLTimeStamp:=DateTimeToSQLTimeStamp(Time); вызывает ошибку [Cannot access field "Vremia" as type SQLTimeStamp.] .. к тому же обрати внимание, что Form1.IBTable3Data.AsDateTime:=Date; работает нормально без всяких преобразований.

stud .AsTime нет такого ) - пробовал сам ) и через AsVariant AsString AsValue ))


Alex_Bredin   (2003-10-16 18:04:00) [12]

а если gettime вместо time?


stud   (2003-10-16 18:01:00) [13]

с датой проще округлил до целого вот тебе и дата


gds   (2003-10-16 18:00:00) [14]

Form1.IBTable3Vremia.AsSQLTimeStamp:=DateTimeToSQLTimeStamp(Time); вызывает ту же ошибку.. к тому же обрати внимание, что Form1.IBTable3Data.AsDateTime:=Date; работает нормально без всяких преобразований.


stud   (2003-10-16 17:59:00) [15]

а какой диалект БД. типы date time меньше по длине чем timestamp
может попробовать
Form1.IBTable3Vremia.AsTime:=Time;
а вообще лучше это делать через запросы и в запросах через параметры


Alex_Bredin   (2003-10-16 17:54:00) [16]

TDateTimeField encapsulates the fundamental behavior common to Date-time fields. Date-time fields contain combined date and time information, sometimes called timestamps. TDateTimeField introduces new properties to convert between date-time values and other data types, and to format the value of a date-time field for display.

Note: Data-time values accessed through dbExpress use TSQLTimeStampField instead of TDateTimeField

Дело по-видимому в этом.Надо приводить время к целому типу.


gds   (2003-10-16 17:31:00) [17]

Пробовал ) Глухо.. Ошибка таже..


MsGuns   (2003-10-16 17:29:00) [18]

На вскидку.
Попробуй так:
Form1.IBTable3Data.AsString:=DateToStr(Date);
Form1.IBTable3Vremia.AsString:=TimeToStr(Time);


Наверх

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