Редактирование поля Time

Модератор: Модераторы

Редактирование поля Time

Сообщение Роман1971 » 08.12.2008 03:59:50

Столкнулся с такой проблемой, в базе (FireBird) таблица с полем типа Time, не TimeStamp, а именно Time.
Время в таблице TDBGrid или компоненте TDBEdit отображается правильно, однако при редактировании значений и попытке их ввести, введённые данные отображаются неправильно. Пробовал редактировать маски ввода (DisplayFormat и EditMask) - ничего не помогает.
С полем типа TimeStamp работа происходит нормально, проблема только с типом поля Time.

Кто чем поможет?
:?:
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53

Re: Редактирование поля Time

Сообщение Attid » 08.12.2008 12:03:34

попробывать TRxDbGrid =) других мыслей нет.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Редактирование поля Time

Сообщение v-t-l » 08.12.2008 13:13:49

v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Редактирование поля Time

Сообщение alexs » 08.12.2008 16:11:11

Attid
В RxDBGrid я вроде на этот счёт специального ничего не делал. Поведение не должно отличаться от стандартного грида.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Редактирование поля Time

Сообщение Роман1971 » 08.12.2008 16:15:22

Внёс исправления указанные здесь:
http://freepascal.ru/forum/viewtopic.ph ... &sk=t&sd=a

Не помогло!
Сначала исправил:
procedure TRecordsBuffer.RefreshRecordFromQuery(RecNo: integer; Sourse: TJvUIBQuery);
Не помогло...
Исправил аналогичным образом:
procedure TRecordsBuffer.ReadRecordFromQuery(RecNo:integer; Sourse:TJvUIBQuery);

Код: Выделить всё
        ftDate:
            begin
              {$IFDEF FPC}
                {$IFDEF MSWINDOWS}
                PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[i].sqldata)^ - DateOffset + 693594;
                {$ELSE}
                PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[i].sqldata)^ - DateOffset;
                {$ENDIF}
              {$ELSE}
              PInteger(FiPtr)^:=PInteger(Sourse.Fields.Data.sqlvar[i].sqldata)^ - DateOffset + 693594;
              {$ENDIF}
            end;
        ftTime:
            begin
              {$IFDEF FPC}
              PDouble(FiPtr)^ := Sourse.Fields.AsDateTime[i];
              {$ELSE}
              PInteger(FiPtr)^:=PCardinal(Sourse.Fields.Data.sqlvar[i].sqldata)^ div 10;

              {$ENDIF}
            end;

Тоже не помогло...
Что делать, кто поможет?
:( :?:

Добавлено спустя 6 минут 9 секунд:
alexs писал(а):В RxDBGrid я вроде на этот счёт специального ничего не делал. Поведение не должно отличаться от стандартного грида.

Да, стандартные DBGrid и RxDBGrid одинаково себя ведут... Неправильно отображает время и DBEdit.
Причина не в них, а примерно как указано здесь: http://freepascal.ru/forum/viewtopic.ph ... &sk=t&sd=a
Но это не помогло... ничего не пойму...
Я скачивал последние версии SVN отсюда: svn://svn.shamangrad.net/FBDataSet.

:?:
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53

Re: Редактирование поля Time

Сообщение Attid » 08.12.2008 18:14:20

Роман1971 писал(а):Я скачивал последние версии SVN отсюда: svn://svn.shamangrad.net/FBDataSet.

тык ты про FBDataSet или про RxDBGrid ? ато гришь про одно, а показываешь другое.

у меня Time нигде не используется.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Редактирование поля Time

Сообщение Роман1971 » 08.12.2008 22:42:01

Attid писал(а):тык ты про FBDataSet или про RxDBGrid ? ато гришь про одно, а показываешь другое.


Ошибка проявляется при редактировании с помощью любых компонентов, в том числе и из RxLib.
Проблема в DataSet.
:(

Добавлено спустя 2 часа 35 минут 48 секунд:
Мысли вслух...
Порылся немного в исходниках.

alexs

fbcustomdataset.pas
procedure TFBCustomDataSet.DoFillParams(Qu: TJvUIBQuery; OnlyMaster:boolean);
В этой процедуре обрабатываются параметры, при этом есть только тип ftDateTime.

Код: Выделить всё
          ftDateTime:Qu.Params.AsDateTime[i]:=F.AsDateTime;
//          ftDate:Qu.Params.AsDate[I]:=F.AsDate;
//          ftTime:Qu.Params.AsTime[i]:=F.Asti;


Далее, поля типов ftDateTime, ftDate и ftTime обрабатываются раздельно.
В Delphi все три типа ftDateTime, ftDate и ftTime сводятся к одному TDateTime, в FPC вроде это не совсем так, ftDate - Integer.
А вот какого типа ftTime?
Если ftTime типа TDateTime, то его можно обрабатывать также как и ftDateTime. Не совсем понятны взаимоотношения TTime и TDateTime. В тексте программы указано, что ftTime - Double, то есть, такой же как и ftDateTime.

Может обработать всё как ftDateTime? :?:

Впрочем, я не совсем себе представляю, что там за обработка...
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru
cron