![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ничего не понимаю!!!!!
stud © (2007-05-30 18:56:00)есть база ms sql 2000,
есть ХП, выполняю эту ХП из менеджера и своей программы (ADO) с одинаковыми параметрами - получаю разные результаты!
причем вношу изменения в процедуру - такое ощущение что программа не их не видит и все результаты старые выдает (до изменения).
что это может быть??????
stud (2007-06-01 10:10:00) [1]както само рассосалось...........
ЮЮ (2007-05-31 11:09:00) [2]>такими повторами TADOQuery грешит, в силу его специфики + привычек программиста в написания кода с Add и одновременным забыванием Clear...
>чето там у вас не то было.
Всё было именно так как сказано.
Есть соединение, класс типа TADOConnection. У него метод Exeс().
Использовался компонент TADOCommand, создаваемый в конструкторе. Какие там к черту Add, там нет SQL.
При выполнении в рамках одной транзакции цепочки
Exec(EXEC procName1 :p1 :p2);
Exec(EXEC procName2 :p1 :p2);
Exec(EXEC procName1 :p1 :p2);
Exec(EXEC procName2 :p1 :p2);
такая фигня и наблюдалась. В отладчике я вижу один EXEC ... в Command, а в профайлере - цепочку вызовов, которую замыкает нужный вызов.
При создании локального TADOCommand в методе Exeс все стало работать нормально.
sniknik (2007-05-31 10:54:00) [3]> что причиной всему использованеие одного экземпляра TADOCommand для выполнения разных SQL предложений.
> При повторном его использовнии на серевере обнаружено исполнение сначала предыдущего, а затем ожидаемого предложения.
ничего не путаешь? обычно такими повторами TADOQuery грешит, в силу его специфики + привычек программиста в написания кода с Add и одновременным забыванием Clear...
а для TADOCommand это надо постараться ... CommandText:= CommandText + #13#10 + NewSql; такого и спьяну не напишешь...
чето там у вас не то было.
ЮЮ (2007-05-31 09:15:00) [4]> похоже на то, что из программы вызывается старая версия
> хп???
Неоткуда ей взятся старой.
Толька другая
1) с другой БД
2) есть две
dbo.ProcName
<user>.ProcName
Самая простая проверка - переименование той, которую правишь. Если программа по-преднему её "видит", значит - другая
stud (2007-05-31 08:42:00) [5]сервер естественно тот который нужен.
уже несколько раз проверял.
компонент адосторедпроц. удалял, кидал новый - результат тот же.
параметры одинаковые. вызывается только одна хп.
похоже на то, что из программы вызывается старая версия хп???
тока откуда оно берется?
ЮЮ (2007-05-31 03:46:00) [6]>и своей программы (ADO)
какой компонент? Не используешь ли один и тот же компонент для вызова разных ХП? Какой сераиспак на сервере?
Вот с чем я столкунулся на практике:
1) Имеет место ошибка в сервере:
http://support.microsoft.com/kb/834720/EN-US/
Исправлена в SP4. У нас стоял только SP3.
2) в одной транзакции выполнялись несколько ХП.
В рамках транзакции возникало Zero Divide, сокрытое от глаз по причине 1)
В ходе многочасовой трассировки удалось выяснить, что причиной всему использованеие одного экземпляра TADOCommand для выполнения разных SQL предложений. При повторном его использовнии на серевере обнаружено исполнение сначала предыдущего, а затем ожидаемого предложения. Причем вызываемые внутри первого предложения SP вызывала UDF логика работы которой не соответствала значениям параметров, которые оно должнв была получить.
Kostafey (2007-05-30 19:29:00) [7]Было дело.
В приложении было 2 подключения к БД.
Одно поменял, другое забыл.
Полчаса бился голофой в стол. Вспомнил;)
Исправил, отправился в нирвану ;)
Jan1 (2007-05-30 19:28:00) [8]
> есть ХП, выполняю эту ХП из менеджера и своей программы
> (ADO) с одинаковыми параметрами - получаю разные результаты!
>
уверен что такие же параметры? профайлер смотрел?
Desdechado (2007-05-30 19:19:00) [9]другой сервер
другая схема с данными