Delphi 2006 переводит поля экспресс-даты sql server 2008 как twidestring

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

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

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

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


person José Eduardo    schedule 30.11.2009    source источник


Ответы (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), но это потребует дополнительной доработки.

person Gerry Coll    schedule 30.11.2009

Вручную установите для типа field.FieldType значение TDateTimeField. Это просто означает, что по какой-то причине DBExpress неправильно определяет тип поля автоматически. Отмените его, и все будет в порядке.

person Donnie    schedule 30.11.2009
comment
Я использую процедуру для создания TSQLQuery, TDataSetProvider и TClientDataSet во время выполнения. Когда мне следует добавить это исправление? Tnx. - person José Eduardo; 30.11.2009