Delphi 2006 переводит SQL Server 2008 Express поля даты как twidestring

Несколько дней назад я опубликовал вопрос о том, какой компонент использовать для создания MultiDatabaseWithJustOneComponent, и я следую общему совету по использованию dbexpress.

FirebirdSQL имеет поле даты, SQL Server 2008 также имеет поля даты. Но по какой-то причине поля даты преобразуются в TWideStringField, и когда я полностью уверен, что видел все сообщения об ошибках в Delphi, такие как "катастрофический сбой", у меня появляются новые.;-)

В D2010, похоже, исправлена ​​эта "ошибка", но у меня нет слишком больших денег, чтобы с ней справиться, так что... у кого-нибудь есть идеи?

Заранее спасибо.

2 ответа

Решение

Когда Delphi 2006 был выпущен, SQL-сервер не имел типа поля даты, только DateTime. (Поля даты и времени были добавлены в SQL Server 2008). В результате драйверы DBExpress в D2006 не знают, как с ними обращаться.

Лучшим вариантом может быть приведение полей даты к DateTime (или SmallDateTime) с использованием CAST или CONVERT, тогда D2006 будет знать, как с ними обращаться.

SELECT CAST(DateField as DateTime)

OR 

SELECT CONVERT(DateTime, DateField)

Или используйте поля DateTime или SmallDateTime в вашей схеме БД, если это возможно. SQL Server DateTime похож на TDateTime в Delphi.

Еще одна возможность - перейти на dbGO (компоненты ADO), но для этого потребуется дополнительная доработка.

Установите вручную field.FieldType введите в TDateTimeField, Это просто означает, что по какой-то причине DBExpress неправильно определяет тип поля. Переопределите это, и это должно быть хорошо.

Другие вопросы по тегам