Текущий архив: 2006.02.05;
Скачать: CL | DM;
Вниз
Странное поведение TADOCommand Найти похожие ветки
← →
Max Zyuzin © (2005-12-08 12:52) [0]Приветствую всех!
Динамически создаю TADOCommand делаю следующий "финт ушами"
WorkADOCommand.CommandText := "update CustPayment set cpPaymDate = :pcpPaymDate, cpPaymNumber = :pcpPaymNumber "+
"where cpCustomer = :pcpCustomer and cpDate = :pcpDate and cpPaymSum = :pcpPaymSum and cpCustContract = :pcpCustContract "+
" and cp1CDocNum = :pcp1CDocNum and cpCurCode = :pcpCurCode ";
if GetSubstr(curStr,7) = " " then WorkADOCommand.Parameters.ParamByName("pcpPaymNumber").Value := NULL
else WorkADOCommand.Parameters.ParamByName("pcpPaymNumber").Value := StrToInt(GetSubstr(curStr,7));
if GetSubstr(curStr,8) = " " then WorkADOCommand.Parameters.ParamByName("pcpPaymDate").Value := NULL
else WorkADOCommand.Parameters.ParamByName("pcpPaymDate").Value := StrToDate(GetSubstr(curStr,8));
....
WorkADOCommand.Execute(i,NULL);
GetSubstr функция собственного написания.
Так вот вне зависимости от того что присваиваешь параметру pcpPaymDate результат один и тот же… после Execute поле NULL. При парсинге параметру присваивается корректное значение.
Значение полю cpPaymNumber при этом присваивается корректно.
И самое интересное, что если переделать 1-ю строчку на (т.е. просто поменять порядок)WorkADOCommand.CommandText := "update CustPayment set cpPaymNumber = :pcpPaymNumber, cpPaymDate = :pcpPaymDate "+
То теперь значение в поле с датой присваиваются корректно, а в cpPaymNumber NULL…
В общем как в том стихотворении «стою на асфальте я в лыжи обутый, то ли лыжи не едут, то ли я …»
← →
Max Zyuzin © (2005-12-08 12:53) [1]Ой забыл укзать... MSSQL, D7
← →
Johnmen © (2005-12-08 12:59) [2]Если тип datetime, то и присваивать надо
WorkADOCommand.Parameters.ParamByName("pcpPaymDate").Value := <<TDateTime Value>>;
← →
Плохиш © (2005-12-08 13:01) [3]
> WorkADOCommand.Execute([i,NULL]);
← →
Плохиш © (2005-12-08 13:02) [4]
> Johnmen © (08.12.05 12:59) [2]
> Если тип datetime, то и присваивать надо
> WorkADOCommand.Parameters.ParamByName("pcpPaymDate").Value
> := <<TDateTime Value>>;
Есть подозрение, что он вообще Parameters не использует
← →
Max Zyuzin © (2005-12-08 13:10) [5]>Плохиш © (08.12.05 13:01) [3]
Да, если сделать просто WorkADOCommand.Execute;
То все присваивается, мне хочется узнать сколько записей обработано, для этого и пытаюсь сделать WorkADOCommand.Execute(i,NULL)
Почитал хелп по Execute нашел что парметры типа OleVariant и все. без объяснения что же за параметры выполнения.
>Плохиш © (08.12.05 13:02) [4]
Подозрение верно... в морг? ;)
← →
msguns © (2005-12-08 13:11) [6]>Johnmen © (08.12.05 12:59) [2]
>Если тип datetime, то и присваивать надо
>WorkADOCommand.Parameters.ParamByName("pcpPaymDate").Value := <<TDateTime Value>>;
В ADO "катят" и "строчные" даты (и не только даты).
← →
Johnmen © (2005-12-08 13:13) [7]>msguns © (08.12.05 13:11) [6]
Серёга, если что-то катит, то это не значит, что только так и нужно катить...
:)
← →
Max Zyuzin © (2005-12-08 13:17) [8]>Johnmen © (08.12.05 13:13) [7]
Женя & Сергей, чего вы решили что я присваиваю строку этому параметру? Там вроде стоит явное преобразование StrToDate... Что возвращает TDateTime
← →
Плохиш © (2005-12-08 13:19) [9]
> Max Zyuzin © (08.12.05 13:10) [5]
О, блин, только заметил, что в том так красиво отформатированном коде, параметры написаны.
Тогда возникает вопрос, какой смысл вложен в WorkADOCommand.Execute(i,NULL);?
← →
msguns © (2005-12-08 13:30) [10]>Плохиш © (08.12.05 13:19) [9]
>Тогда возникает вопрос, какой смысл вложен в WorkADOCommand.Execute(i,NULL);?
см. [5]. Хотя самому интересно ;)
← →
Max Zyuzin © (2005-12-08 13:30) [11]>Плохиш © (08.12.05 13:19) [9]
мне хочется узнать сколько записей обработано
← →
Johnmen © (2005-12-08 13:41) [12]>Max Zyuzin ©
Максим, я не поленился нажать F1 на TADOCommand и Using TADOCommand.
Там всё так понятно написано...:)
← →
Desdechado © (2005-12-08 13:41) [13]Зачем так сложно с самописными функциями? Можно ведь:
ParamCheck := True;
CommandText := ...
oParam := Params.FindParam( "P_Type" );
if( oParam <> nil ) then
oParam.Value := ...
или я что-то не понял?
← →
msguns © (2005-12-08 13:49) [14]>Johnmen © (08.12.05 13:13) [7]
>Серёга, если что-то катит, то это не значит, что только так и нужно катить...
Жэка, не умничай
;)
← →
Johnmen © (2005-12-08 13:59) [15]
> msguns © (08.12.05 13:49) [14]
> Жэка, не умничай
> ;)
Я только чуть-чуть :)
Есть у меня такая слабость...
← →
Max Zyuzin © (2005-12-08 14:14) [16]В обчем вниматеьно перечитал, понял за параметры имелись ввиду в Execute. Вот только вопрос неужто токо таким "кривым" способом можно вытащить количество обработаных строк?
← →
Johnmen © (2005-12-08 14:19) [17]>Max Zyuzin © (08.12.05 14:14) [16]
Ну почему же этот метод кривой? Совсем нет. Притом "быстрый", о чём также говорится в хелпе.
← →
Max Zyuzin © (2005-12-08 14:28) [18]>Johnmen © (08.12.05 14:19) [17]
На мой взгляд мене очевидный, проще запутаться... ибо важен порядок значений параметров.
← →
Johnmen © (2005-12-08 14:29) [19]>Max Zyuzin © (08.12.05 14:28) [18]
>ибо важен порядок значений параметров.
Это да :)
Страницы: 1 вся ветка
Текущий архив: 2006.02.05;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.013 c