2011-01-24 2 views
4

Моя конфигурация:Ошибка преобразования вариант в двойной [Delphi XE + IBObjects 4.9.12]

Delphi XE
Firebird 2.1
IBObjects 4.9.12
Windows 7, 64бит

я получаю исключение когда Я пытаюсь установить значение для параметра IBOQuery («Не удалось преобразовать вариант типа (UnicodeString) в тип (Double)»).

Исключением является процедура TIB_Column.SetAsVariant в IB_Components.pas (строка 42795). Для того, чтобы создать эту ситуацию, просто пытаюсь передать строку в качестве параметра даты:

myQuery.paramByName('mydate').AsString := DateToStr(IncDay(Now,5));

В течение последних 25 дней я пытаюсь решить эту ситуацию, но в списке поддержки IBO У меня нет никаких ответов.
У кого-то есть идея?

+3

Каким ваше поле даты в базе данных? Предположим, например, что это Delphi TDateTime, тогда преобразование в строку неверно. Вы должны просто использовать что-то вроде: 'myQuery.paramByName ('mydate'). AsDateTime: = IncDay (Now, 5);' Правильный ответ будет зависеть от типа данных, используемых в поле базы данных. –

+0

+1 для IncDay. Radu – RBA

+0

Это сообщение, поднятое VarCastError из блока Variants при попытке плохого преобразования; Попробуйте создать приложение с помощью «Использовать Debug DCU», и вы увидите, что он поднят из Variants.pas; Мое предположение: если IBObjects имеет способ присвоить параметру «тип данных», ваш параметр определяется как DATE (TDateTime = Double в Delphi, а Double - своего рода Float). Показывает нам код в IB_Components.pas по указанному номеру строки; –

ответ

3

Архитектура IBObjects преобразует (в момент выполнения) все параметры, поля и т. Д. В String или Variants. Если ваш параметр «mydate» имеет тип «DateTime» (числовой), вы должны заполнить его значением типа ответчика. Не логика, чтобы заполнить 'числовой' параметр типа со строкой ...

попробовать этот

myQuery.paramByName ('') MyDate AsDateTime:. = Теперь + 5; // это то же самое, что и ответ Дэвида.

или

myQuery.paramByName ('MyDate') AsFloat:. = Теперь + 5; // или IncDay (Теперь, 5)

С наилучшими пожеланиями,
Radu

+1

Я предполагаю, что база данных позади этого может содержать дату, используя нечто, отличное от «TDateTime» Delphi. –

+1

Преобразование из «STRING» в «STRING или VARIANT» никогда не должно прерываться. Преобразование из STRING в DateTime может завершиться неудачно, особенно если строка является результатом DateToStr() –

+1

Раду, спасибо за ваш ответ.Я пробовал это и прекрасно работал, но проблема заключается в том, чтобы найти все «ParamByName» и исправить. В предыдущих версиях Delphi он отлично работает. – TiagoTecchio

 Смежные вопросы

  • Нет связанных вопросов^_^