Конференция "Базы" » глюк в StoredProc при переходе на новую версию Делфи [D7]
 
  • кгшзх © (29.01.16 16:36) [20]
    смысл менять архитектуру?

    а смысл перекомпиливать?
  • кгшзх © (29.01.16 16:38) [21]
    понять это глюк новых делфи в связке с БДЕ или что

    у тебя эксепшен бдешный?
    ни разу.
    он поднимается не из бде.

    так откуда мысли про какие-то связки?
  • кгшзх © (29.01.16 16:46) [22]
    120 параметров, которые биндятся по индексу вместо поимени......
    ты вообще уверен, что когда дфм переколбашивался из д7 в хе то все они остались на своих местах?
  • qwas © (29.01.16 16:52) [23]
    захотелось просто перейти на более новый делфи.  ведь неизвестно как будет старый делфи7 работать под новыми виндосами (8,10)
    не ожидал такой засады от обычной процедуры.
    мысль про связку возникла потому что малая вероятность что все делфи новее делфи7 имеют такой глюк.
    а глюк связки более вероятен из-за устаревшей архитектуры БДЕ и новой делфи.
    вот и ищу откуда ноги растут изза спортивного интереса.
    поменяв ASSTRING на VALUE проблема исчезла.
    поэтому так и оставлю, без смены архитектур.
  • qwas © (29.01.16 16:54) [24]
    >кгшзх
    остались все на местах потому что когда поменял ASSTRING на VALUE то все заработало
    при потере параметров при переколбасеньи были бы ошибки
  • qwas © (29.01.16 16:56) [25]
    а чем может быть чревато использование VALUE?

      Params[12].value := strtofloat(edit14.text);
      Params[13].value := strtofloat(edit6.text);
      Params[14].value := strtofloat(edit7.text);

    в литературе видел и такое присвоение , то есть это допустимо?
  • кгшзх © (29.01.16 17:02) [26]
    остались все на местах потому что когда поменял ASSTRING на VALUE то все заработало

    вот как раз потому что полегчало от замены на value, я бы и не был так уверен что параметры сохранили индексы.

    применив value ты получил доп. сервис вариантов по преобразованию типов.
    что как бы и намекает на то, что параметры могли перемешаться по индексам по сравнению с D7
  • sniknik © (29.01.16 17:03) [27]
    > Просто "Invalid Floating Point Operation" - операция с числом.
    много кто с числами работает, даже размер фонта (строки) пересчитывают с их участием.

    > Чаще всего деление на ноль.
    не, там другая ошибка - "divide by zero".

    > Params[13].Asstring :=  'ddffdf';
    в новых юникод по умолчанию... может и параметры widestring-ом сделать?

    > ведь неизвестно как будет старый делфи7
    известно, нормально работает, у нас до сих пор это основной инструмент и менять не собираются. для старых проектов уж точно. новые может быть, но тоже сомнения, тогда придется отказаться от кучи наработок, и все переписывать (под фаремонкей/под 64 битность и т.д. а менять просто чтобы скомпилировать другим, ничего не меняя... нафиг).
  • qwas © (29.01.16 19:31) [28]
    >кгшзх
    в смысле перемешаться параметры по номерам?
    ок, проверю

    >sniknik
    да я тоже не бегу впереди прогресса. понятно ,что то, что работает, трогать не нужно.
    но не ожидал что в простом проекте сразу такие грабли будут непонятные.
    и хотелось потихоньку переходить на поновей делфи.
    насчет widestring- попробую

    спасибо за советы
  • NoUser © (29.01.16 21:13) [29]
    Был у меня такой код:

    function MyFloatTest  (fl : Single) : Single;
    function MyFloatToIEEE(fl : Single) : Single;
    //
    var
    fl   : Single;
    Data : PByte;
    begin
    //
    fl := PSingle(Data)^;
    fl := MyFloatTest(fl);
    fl := MyFloatToIEEE(fl);
    //


    И работало оно.

    А потом, как раз после переезда на новую версию,
    иногда, в зависимости от фазы луны (как выяснилось - младших битов мантиссы MyFloato'в)
    начало хромать.

    Раскопки показали:

    Project1.dpr.71: fl := MyFloatTest(fl);
    0041C544 FF35BC3E4200     push dword ptr [$00423ebc]
    0041C54A E8E9D4FFFF       call MyFloatTest
    0041C54F D91DBC3E4200     fstp dword ptr [$00423ebc]    /// Invalid Floating Point Operation !!!
    0041C555 9B               wait



    Мораль:
    Нечего на версию пенять, если вместо float у меня(тебя) xz.
  • qwas © (01.02.16 10:55) [30]
    >NoUser

    я же писал что дело не в float а в стрингах:

    среди параметров были параметры не только числовые но и символьные, типа :

     Params[12].Asstring := 'ddffdf';
     Params[13].Asstring :=  'ddffdf';

    так вот, если этих строковых параметров больше 2-3 то и возникает ошибка!
    а если их 2 или меньше, то все нормально!
  • qwas © (01.02.16 12:24) [31]
    >sniknik
    замена string на widestring не помогла
    и путаницы параметров нет при конвертации.
    как только я уменьшаю количество параметров типа string до 2 , сразу ошибка пропадает.
  • кгшзх © (01.02.16 12:51) [32]
    оставь и не трогай.
  • sniknik © (01.02.16 17:52) [33]
    > замена string на widestring не помогла
    а может наоборот... оно и "ломает"? -> по умолчанию string стал юникодом т.е. увеличился размер в 2 раза (считая в байтах) - переполнился буфер, ну параметры тоже где то складываются...
    т.е. в D7 у тебя уже было на грани переполнения, с юникодом переполнилось...
    есть там AnsiString в параметрах?
  • qwas © (02.02.16 09:22) [34]
    >sniknik

    вот это уже мне кажется ближе к истине.
    в параметрах есть несколько string.
    их было штук 5. я стал для эксперимента уменьшать их количество. как только оставляю строковых параметров 2 штуки-ошибка пропадает.
    причем дело не в их значениях. я пробовал просто присваивать им в коде значение типа "qwerty".   неужели это уж такой огромные размер?)
  • qwas © (02.02.16 09:36) [35]
    >sniknik

    спасибо!!!!!!

    помог Ваш  последний совет.
    после замены:

    Params[13].Asstring :=  'ddffdf';
    на
    Params[13].Asansistring :=  'ddffdf';

    ошибка исчезла.
    неужели 3 несчастных параметра со стрингом вызывали переполнение буфера? их значение то было просто пару английских букв
  • sniknik © (02.02.16 10:04) [36]
    > их значение то было просто пару английских букв
    а зарезервированный под них размер? не думаю, что в рабочем буфере была упаковка данных по значениям.
  • qwas © (02.02.16 10:08) [37]
    ясно. еще раз большое спасибо
    То есть в новых дельфях в процедурах лучше не  использовать обычный стринг а юзать ансистринг.
  • qwas © (02.02.16 10:10) [38]
    я имею в виду конечно процедуры Storedproc
  • qwas © (02.02.16 10:12) [39]
    из палитры BDE
 
Конференция "Базы" » глюк в StoredProc при переходе на новую версию Делфи [D7]
Есть новые Нет новых   [118585   +36][b:0][p:0.001]