Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

"Двойной" вызов ХП   Найти похожие ветки 

 
KSergey ©   (2004-11-04 13:16) [0]

ADODataSet
Записан след. запрос (схематично):

DECLARE @r int
DECLARE @e varchar(100)

EXEC @r = spMyProc 1, 2, @e OUTPUT  -- считаем, что параметры тут верны

SELECT @r, @e


Что в программе

ADODataSet1.Close;
ADODataSet1.CommandText := то, что выше;
ADODataSet1.Open;


Что происходит:

хранимка вызывается 2 (!!) раза.
Как установлено: в ней ведется лог вызовов. Происходит это не всегда: первые 2 раза (вызова приведенного кода) - по по два, потом по одному.

Да еще по разному на разных серверах. Короче бред полный. В QueryAnalizer"е все отлично (по одному разу вызов, как и ожидалось). Если бы не этот лог -  ничего бы и не заметил никогда, а тут...

Может кто сталкивался с подобным? Может какие параметры где покрутить? Я покрутил вроде все (у DataSet) - но ничего не изменилось. Курсор - клиентский.

Через ADOConnection.Execute - все работает нормально (как и ожидалось - 1 раз).

Все апдейты на дельфи установлены.


 
KSergey ©   (2004-11-04 15:04) [1]

Тут выяснилась еще деталь: это происходит только когда ХП вызывается с другого сервера (RPC)


 
sniknik ©   (2004-11-04 15:31) [2]

а если через  
ADOCommand.CommandTex  := то, что выше;
ADOCommand.Execute;
?
и если так результат получать
ADODataSet1.Recordset:= ADOCommand.Execute.NextRecordset(EmptyParam); {вроде второй в пакете нужен}
?


 
KSergey ©   (2004-11-04 15:45) [3]

> [2] sniknik ©   (04.11.04 15:31)
> а если через  
> ADOCommand.CommandTex  := то, что выше;
> ADOCommand.Execute;

Пробовал. Та же фигня. (сейчас специально проверил еще раз)
И через ADOQuery пробовал... (ну это уже так, с горя)

Причем через ADOCommand - стабильно 2 раза, через ADODataSet.Open - например так: 2  2  1 1 1 1...

Короче идиотизм.

Сделал я, сотоварисч, другой сотоварисч. Результат одинаков (ну в смысле я к тому, что врятли уже скрытые какие-то моменты, т.к. хоть и делали одно, но каждый сам, с нуля).

Единственное как что удалось сделать (тьфу-тьфу) - через ADOConnection.Execute

Опять же на одном сервере (без RPC в смысле) - все отлично. На RPC - такая вот фигня. Пары серверов использовали разные - результат одинаков (в плане неоднократности вызова).


 
sniknik ©   (2004-11-04 16:00) [4]

> Пробовал. Та же фигня. (сейчас специально проверил еще раз)
не помню уже, давно и мельком читал о проблеме с параметрами в адо компанентах (вроде именно к D5 относилось), там вроде тоже про попторные вызовы (вроде при prepare делалось для определения параметров ...) в общем смутно все и возможно неправда, но всетаки...
попробуй у ParamCheck ппоставить в фалсе
ADOCommand.ParamCheck := false;
ADOCommand.CommandTex := то, что выше;
ADOCommand.Execute;
изменится чтото?


 
KSergey ©   (2004-11-04 16:46) [5]

> [4] sniknik ©   (04.11.04 16:00)
> попробуй у ParamCheck ппоставить в фалсе
> ADOCommand.ParamCheck := false;

Пробовал и это ;) Про ParamCheck я тоже подумал, вдруг, думаю, вызывает для проверки. Но не помогло, увы...

И, что страно, "двоение" возникает только при старте проги. Потом (после 2-х вызовов) все становится нормально... (хотя есть вариации с другими компонентами, когда это постоянно)

Хотя сейчас попробовал код:

ADOCommand1.ParamCheck := FALSE;
ADOCommand1.CommandText := s;
ADOCommand1.ParamCheck := FALSE;
rst := ADOCommand1.Execute;


происходит "занятно": 1  2  1 1 1 ...

Еще из наблюдений: остановка в ADOConnection.WillExecute происходит как и положено 1 раз. И код вызова там один ;)
Занятно так же, что "двоение" происходит именно во время Open/Execute, т.е. ни при коннекте (когда какие-нибудь параметры могли бы чекаться), ни при изменении параметрров - нет...


 
sniknik ©   (2004-11-04 18:17) [6]

:о(
осталось одно, радикальное средство, сменить D5 на хотя бы D6 + апдейты ADO? или сразу D7. (50/50 поможет ;о))


 
ЮЮ ©   (2004-11-05 06:35) [7]

>И, что страно, "двоение" возникает только при старте проги. Потом (после 2-х вызовов) все становится нормально... (хотя есть вариации с другими компонентами, когда это постоянно)

А может, "двоение" возникает всё же не на сервере, а в программе, т.е. дважды выполняется код

ADODataSet1.Close;
ADODataSet1.CommandText := то, что выше;
ADODataSet1.Open;


 
KSergey ©   (2004-11-05 07:27) [8]

> [7] ЮЮ ©   (05.11.04 06:35)
> А может, "двоение" возникает всё же не на сервере, а в программе,
> т.е. дважды выполняется код

Ну разумеется, такое подозрение было. Как проверял:

1) вставил обработчик ADOConnection.WillExecute. Происходит 1 раз. Ну разве что тут можно возразить, что где-то коннект мимо этого ADOConnection идет... Ну тут можн оодно только возразить: в 3-х разных программах троих разных человек - ну не могло быть одинакового косяка.

2) да просто точка останова/ShowMessage в этот код.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
14-1100374186
Dima1
2004-11-13 22:29
2004.12.05
пиктограмки у Microsoft Office 2003


9-1091206083
Evgeniy_K
2004-07-30 20:48
2004.12.05
Уровень кооперации - глюк


8-1093708660
Den
2004-08-28 19:57
2004.12.05
Наложение текстуры


3-1099915106
SergP
2004-11-08 14:58
2004.12.05
Как узнать находится ли dataset в режиме insert или edit?


4-1098633252
_Дельфин_
2004-10-24 19:54
2004.12.05
Параметры монитора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский