Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.036 c
1-1135880057
___SED
2005-12-29 21:14
2006.02.05
Можно ли написать на делфи 64-х битную прогу?


15-1137434498
Cerberus
2006-01-16 21:01
2006.02.05
Файловая система Linux из под Windows


10-1112809260
King of Lamers
2005-04-06 21:41
2006.02.05
Word. Установка курсора на заданную позицию в строке.


1-1136296400
TStas
2006-01-03 16:53
2006.02.05
Существует ли модуль вроде JPEG, но для гифов?


2-1137700639
(CHALING 32)S K i N E R
2006-01-19 22:57
2006.02.05
Число