Конференция "Базы" » Помогите плиз с TBCDField.Create
 
  • passman © (02.12.13 11:02) [0]
    Есть в БД поле 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

    Уже голову сломал, ничего не понимаю...
  • [ВладОшин] © (02.12.13 11:08) [1]
    .Size :=
    ?
  • Ega23 © (02.12.13 11:08) [2]
    Ты не поверишь!
    f.Size := ...
  • passman © (02.12.13 11:59) [3]
    пробовал size разных размеров... то же самое
  • Медвешоног Порожог (02.12.13 13:25) [4]
    Есть в БД поле Cena Numeric 15,2

    Создаю поле в рантайм:

      f:=TBCDField.Create(nil);


    1. Зачем в ратнтайм?
    2. А почему создаешь  бсд, а не мемо например?
  • passman © (02.12.13 13:41) [5]
    В рантайм, потому что надо. БСД - потому Numeric
  • Медвешоног Порожог (02.12.13 13:46) [6]
    А почему не мемо если нумерик?
    Почему бсд?
    Почему не Image?
  • Медвешоног Порожог (02.12.13 13:47) [7]
    Кроме того, поля так не создаются.
    Поля создаются через TFieldDefs
  • passman © (02.12.13 14:00) [8]
    мля.. ну все поля прекрасно создаются.. и все работает, кроме BCD
  • sniknik © (02.12.13 14:21) [9]
    > БСД - потому Numeric
    в дельфе все "базовое" БСД идет через каренси.
  • passman © (02.12.13 14:37) [10]
    И что?
  • sniknik © (02.12.13 14:56) [11]
    да ничего, просто что бы ты там не поставил, точность больше чем у каренси не будет (отсюда "а смысл?").
    ну и +, если один тип может подменять другой (), то почему ты уверен, что подмена будет равнозначная?
    BCD в принципе "безразмерный" тип (в mssql от 5 до 17, с дельфе, если настоящий хз. возможно и 0 как мемо/блоб). почему не поставить тот у которого размер точно 4? (у тебя база судя по ошибке бсд 4 байтным). или хотя бы тот в который возможна автоконвертация (см. [9]).
  • passman © (02.12.13 15:02) [12]
    если создаю поле другого типа, датасет ругается и все равно требует BCD
  • sniknik © (02.12.13 15:03) [13]
    а вообще, открой таблицу как есть, без своих ухищрений с созданием, и посмотри какой там тип, размерность и тд.
  • passman © (02.12.13 15:09) [14]
    там и есть BCD ))) Делфи интерпретирует большие нумерик поля как бсд. Беда - не получается создать в рантайм.
  • passman © (02.12.13 15:11) [15]
    Ошибка выходит даже когда копирую структуру полей уже заполненной таблицы, где есть BCD ((
  • sniknik © (02.12.13 15:25) [16]
    > большие нумерик поля как бсд.
    > Size mismatch for field 'cena', expecting: 4 actual: 0
    у темя максимум single по delphi-вому.

    > Беда - не получается создать в рантайм.
    при назначении в дизайн-тайм оно также создается в рантайм... только код генерит дельфя.

    > Ошибка выходит даже когда копирую структуру полей уже заполненной таблицы, где есть BCD ((
    либо криво копируешь либо чудо.
  • sniknik © (02.12.13 15:32) [17]
    > у темя максимум single по delphi-вому.
    ошибся, 4 байта ставится и для BCD поля (проверил), хотя размерность у него зачастую больше... странно, мжет чисто под указатель раздмер, а не под значение?

    ну да ладно, все клево создается, и открывается, ошибка у автора в 17й строке.
  • Плохиш © (02.12.13 16:04) [18]
    Может разгадка в справке кроется

    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.

  • passman © (02.12.13 17:33) [19]
    Ура, заработало! ))) сделал так Size:=0; для любых других значений выходит ошибка. Если не инициализировать Size - тоже ошибка. Знал бы прикуп - жил бы в Сочи )) Всем спасибо за помощь.
 
Конференция "Базы" » Помогите плиз с TBCDField.Create
Есть новые Нет новых   [118769   +95][b:0][p:0.001]