Delphi 2006 переводит SQL Server 2008 Express поля даты как twidestring - PullRequest
0 голосов
/ 30 ноября 2009

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 30 ноября 2009

Когда 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 похож на Delphi TDateTime.

Другая возможность заключается в переходе на dbGO (компоненты ADO), но для этого потребуется дополнительная доработка.

0 голосов
/ 30 ноября 2009

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

...