Редактирование TDateTime в DBGDrid
От: zje  
Дата: 05.06.07 18:59
Оценка:
Что-то совсем запутался...
Проблема в следующем: в таблице есть поле типа DateTime, нужно обеспечить ввод в одной колонке грида даты, во второй колонке времени. И сохранить обратно всё в это поле.
Используется SQL Server 2000, BCB6, связь с базой через ADO.
Порылся в инете, и как то безрезультатно.
Направьте, хоть в какую сторону копать..Спасибо.
Re: Редактирование TDateTime в DBGDrid
От: Tilir Россия http://tilir.livejournal.com
Дата: 06.06.07 06:36
Оценка:
Здравствуйте, zje, Вы писали:

zje>Что-то совсем запутался...

zje>Проблема в следующем: в таблице есть поле типа DateTime, нужно обеспечить ввод в одной колонке грида даты, во второй колонке времени. И сохранить обратно всё в это поле.
zje>Используется SQL Server 2000, BCB6, связь с базой через ADO.
zje>Порылся в инете, и как то безрезультатно.
zje>Направьте, хоть в какую сторону копать..Спасибо.

Не понимаю, какие могут быть проблемы.

Если у вас скажем грид это обычный TStringGrid, отвязанный от таблицы и вы сохраняете SQL-запросом (что идеологически правильно), то либо так:

AnsiString datetimestr = "06.06.2007 10:12:42";
ADOQuery1->SQL->Text = AnsiString("INSERT INTO tabDates(datecol) VALUES(CAST('") + 
                       datetimestr + 
                       AnsiString("' AS datetime))");
ADOQuery1->ExecSQL();


Либо сложнее:

TDateTime dtValue = StrToDateTime(datetimestr);
ADOQuery1->SQL->Text = "INSERT INTO tabDates(datecol) VALUES(:DTParam)";
ADOQuery1->ParamByName("DTParam")->AsDateTime = dtValue;
ADOQuery1->ExecSQL();


Если у вас TDBGrid, что неправильно зато просто, то там вообще никаких проблем нет просто редактируется в ячейке. Ну можно для красоты календарь подвесить.
Re[2]: Редактирование TDateTime в DBGDrid
От: zje  
Дата: 06.06.07 07:57
Оценка:
Редактирование идет в DBGridEh, к которму привязана AdoQuery c запросом
SELECT FACTR AS DTFACTR, FACTR AS TMFACTR FROM ...
У AdoQuery устанавливаю свойства СursorType — csStatic, LockType — ltBatchOptimistic.
В AdoQuery делаю два Field-а: DTFACTR класса TDateField и TMFactR класс TTimeField.
Их и вывожу в соответствующих колонках Grid-а
результат сохраняется путем вызова
AdoQuery->UpdateBatch.
Re[3]: Редактирование TDateTime в DBGDrid
От: Danchik Украина  
Дата: 06.06.07 12:02
Оценка:
Здравствуйте, zje, Вы писали:

zje>Редактирование идет в DBGridEh, к которму привязана AdoQuery c запросом

zje>SELECT FACTR AS DTFACTR, FACTR AS TMFACTR FROM ...
zje>У AdoQuery устанавливаю свойства СursorType — csStatic, LockType — ltBatchOptimistic.
zje>В AdoQuery делаю два Field-а: DTFACTR класса TDateField и TMFactR класс TTimeField.
zje>Их и вывожу в соответствующих колонках Grid-а
zje>результат сохраняется путем вызова
zje>AdoQuery->UpdateBatch.

Добавить два Calculated поля. Запихнуть на OnCalcFields в них данные из главного. На OnSetText нужного поля менять содержимое главного.
Re[4]: Редактирование TDateTime в DBGDrid
От: zje  
Дата: 06.06.07 12:57
Оценка:
D>Добавить два Calculated поля. Запихнуть на OnCalcFields в них данные из главного. На D>OnSetText нужного поля менять содержимое главного.

Изменил SQL на SELECT FACTR FROM ...
Добавил в AdoQuery два Field-a DTFACTR, TMFACTR, установил свойства FieldKind = fkCalculated.
Релизовал событие onCalcFields. Запуситил прогу. Дата и время в колонках Grida появились, но они закрыты для редактировния..Свойства ReadOnly у Grida и Field-ов установлены в false.
А вообще разве можно редактировать вычисляемые поля?
Re[5]: Редактирование TDateTime в DBGDrid
От: Danchik Украина  
Дата: 06.06.07 15:23
Оценка:
Здравствуйте, zje, Вы писали:

D>>Добавить два Calculated поля. Запихнуть на OnCalcFields в них данные из главного. На D>OnSetText нужного поля менять содержимое главного.


zje>Изменил SQL на SELECT FACTR FROM ...

zje>Добавил в AdoQuery два Field-a DTFACTR, TMFACTR, установил свойства FieldKind = fkCalculated.
zje>Релизовал событие onCalcFields. Запуситил прогу. Дата и время в колонках Grida появились, но они закрыты для редактировния..Свойства ReadOnly у Grida и Field-ов установлены в false.
zje>А вообще разве можно редактировать вычисляемые поля?

Можна, но как я смотрю DBGrid не позволяет. А если не менять FieldKind для DTFACTR, TMFACTR?
Re[6]: Редактирование TDateTime в DBGDrid
От: zje  
Дата: 06.06.07 16:56
Оценка:
D>>>Добавить два Calculated поля. Запихнуть на OnCalcFields в них данные из главного. На D>OnSetText нужного поля менять содержимое главного.

zje>>Изменил SQL на SELECT FACTR FROM ...

zje>>Добавил в AdoQuery два Field-a DTFACTR, TMFACTR, установил свойства FieldKind = fkCalculated.
zje>>Релизовал событие onCalcFields. Запуситил прогу. Дата и время в колонках Grida появились, но они закрыты для редактировния..Свойства ReadOnly у Grida и Field-ов установлены в false.
zje>>А вообще разве можно редактировать вычисляемые поля?

D>Можна, но как я смотрю DBGrid не позволяет. А если не менять FieldKind для DTFACTR, TMFACTR?


А если не менять, то AdoQuery ругается на отсутствие этих полей, поэтому и писал запрос так : SELECT FACTR AS DTFACTR, FACTR AS TMFACTR ..
в событиях от onChange Field-а перезаписывал либо, дату, либо время (взависимости от измененного поля). Но возникают проблемы придобавлние новых записей и
затем при потытки сохранить изменения вызовом ADOQuery->UpdateBatch. Выдает ошибку, что поле FactR использкется несколько раз и не сохраняет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.