-
Есть в БД поле Cena Numeric 15,2
Создаю поле в рантайм:
f:=TBCDField.Create(nil);
f.FieldName:='Cena';
f.FieldKind:=fkData;
f.dataset:=IBTable1;
при открытии таблицы выход ошибка: Size mismatch for field 'cena', expecting: 4 actual: 0
Уже голову сломал, ничего не понимаю...
-
.Size :=
?
-
Ты не поверишь!
f.Size := ...
-
пробовал size разных размеров... то же самое
-
Есть в БД поле Cena Numeric 15,2
Создаю поле в рантайм:
f:=TBCDField.Create(nil);
1. Зачем в ратнтайм?
2. А почему создаешь бсд, а не мемо например?
-
В рантайм, потому что надо. БСД - потому Numeric
-
А почему не мемо если нумерик?
Почему бсд?
Почему не Image?
-
Кроме того, поля так не создаются.
Поля создаются через TFieldDefs
-
мля.. ну все поля прекрасно создаются.. и все работает, кроме BCD
-
> БСД - потому Numeric
в дельфе все "базовое" БСД идет через каренси.
-
И что?
-
да ничего, просто что бы ты там не поставил, точность больше чем у каренси не будет (отсюда "а смысл?").
ну и +, если один тип может подменять другой (), то почему ты уверен, что подмена будет равнозначная?
BCD в принципе "безразмерный" тип (в mssql от 5 до 17, с дельфе, если настоящий хз. возможно и 0 как мемо/блоб). почему не поставить тот у которого размер точно 4? (у тебя база судя по ошибке бсд 4 байтным). или хотя бы тот в который возможна автоконвертация (см. [9]).
-
если создаю поле другого типа, датасет ругается и все равно требует BCD
-
а вообще, открой таблицу как есть, без своих ухищрений с созданием, и посмотри какой там тип, размерность и тд.
-
там и есть BCD ))) Делфи интерпретирует большие нумерик поля как бсд. Беда - не получается создать в рантайм.
-
Ошибка выходит даже когда копирую структуру полей уже заполненной таблицы, где есть BCD ((
-
> большие нумерик поля как бсд.
> Size mismatch for field 'cena', expecting: 4 actual: 0
у темя максимум single по delphi-вому.
> Беда - не получается создать в рантайм.
при назначении в дизайн-тайм оно также создается в рантайм... только код генерит дельфя.
> Ошибка выходит даже когда копирую структуру полей уже заполненной таблицы, где есть BCD ((
либо криво копируешь либо чудо.
-
> у темя максимум single по delphi-вому.
ошибся, 4 байта ставится и для BCD поля (проверил), хотя размерность у него зачастую больше... странно, мжет чисто под указатель раздмер, а не под значение?
ну да ладно, все клево создается, и открывается, ошибка у автора в 17й строке.
-
Может разгадка в справке кроется
TBCDField konvertiert die Daten eines BCD-Wertes beim Übertragen aus einer Datenbanktabelle in einen Currency-Wert und beim Zurückschreiben der Daten von einem Currency-Wert in einen binärcodierten Dezimalwert. Wenn die zugrunde liegende Tabelle Werte enthält, für die eine größere Genaugikeit erforderlich ist, löst TBCDField eine Exception aus. Wenn Sie BCD-Werte mit mehr als 4 Dezimalstellen oder 20 signifikanten Stellen benötigen, sollten Sie satt dessen TFMTBCDField verwenden. TFMTBCDField ist ein echtes BCD-Feld mit der Genaugikeit des binärcodierten Dezimaltyps (TBCD), aber etwas geringerer Ausführungsgeschwindigkeit.
-
Ура, заработало! ))) сделал так Size:=0; для любых других значений выходит ошибка. Если не инициализировать Size - тоже ошибка. Знал бы прикуп - жил бы в Сочи )) Всем спасибо за помощь.
-
> сделал так Size:=0;
как то "стремновато" получается... под данные, что совсем места не надо? или он реально как мемо/блоб поле? но почему в дизайне ставит 4-ре? (и тест с этим же делал. разница в базах?)
-
Согласен - коряво разрабы сделали, и текст ошибки не информативен. Я на D5 работаю, может в других версиях по другому...
-
Разобрался с 4, это значение Size по умолчанию. А нужен 0. Вот и выходит ошибка: Size mismatch for field 'cena', expecting: 4 actual: 0.
Делфи для BCD поля не использует свойство Size. Но нахрена тогда генерит ошибку? Могли бы просто игнорировать это поле...
-
passman © , если разобрался, отчего же не протрассировал дальше - почему требует 0-го размера?
-
> если разобрался, отчего же не протрассировал дальше - почему
> требует 0-го размера?
Ну тут что угодно может быть. В первую очередь я бы посмотрел на компоненты доступа.
-
> [24] Ega23 © (03.12.13 00:49)
> на компоненты доступа
Не проапдейтчены?