powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с ADO
4 сообщений из 4, страница 1 из 1
Помогите разобраться с ADO
    #32259357
Dmitry2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите чайнику с ADO разобраться :). Вот чувствую что самой малости
для понимания не хватает...

Постараюсь изложить коротко:
Есть TADOQuery с запросом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
      select
        s.id, s.nam, s.vidskl_id, v.nam as vidskl_nam, s.my_version
      from
        sp_sklad s
        inner join sp_vidskl v on s.vidskl_id = v.id
      order by
        s.id

sp_sklad - склады, sp_vidskl - виды складов,
s.id, v.id, s.vidskl_id - INT, s.vidskl_id - FK для sp_vidskl
В программе я делаю:

Код: plaintext
1.
2.
3.
4.
qrySp_Vidnakl.Open;
qrySp_Sklad.Open;
qrySp_Sklad.Properties['Update Criteria'].Value := adCriteriaKey;
qrySp_Sklad.Properties['Unique Table'].Value:='sp_sklad';


Потом в TDBLookupComboboxEh меняю значение vidskl_id и делаю Post и Commit.
Получаю exception: "Multiple-step operation generated errors. Check each status value"

Объясните мне пожалуйста почему я вижу вот это в Profiler'e:
1.
Код: plaintext
exec sp_executesql N'UPDATE "claims".."sp_sklad" SET "vidskl_id"=@P1 WHERE "id"=@P2 AND "vidskl_id"=@P3', N'@P1 int,@P2 int,@P3 int',  2 ,  4 ,  3 

Зачем в where указан "vidskl_id", ведь в PK только ID

2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
exec sp_executesql N'SELECT "nam","id" FROM "claims".."sp_vidskl" WHERE "id"=@P1', N'@P1 int',  1 
exec sp_executesql N'SELECT "id","nam","vidskl_id","my_version" FROM "claims".."sp_sklad" WHERE "id"=@P1', N'@P1 int',  1 
exec sp_executesql N'SELECT "nam","id" FROM "claims".."sp_vidskl" WHERE "id"=@P1', N'@P1 int',  1 
exec sp_executesql N'SELECT "id","nam","vidskl_id","my_version" FROM "claims".."sp_sklad" WHERE "id"=@P1', N'@P1 int',  2 
exec sp_executesql N'SELECT "nam","id" FROM "claims".."sp_vidskl" WHERE "id"=@P1', N'@P1 int',  2 
exec sp_executesql N'SELECT "id","nam","vidskl_id","my_version" FROM "claims".."sp_sklad" WHERE "id"=@P1', N'@P1 int',  3 
exec sp_executesql N'SELECT "nam","id" FROM "claims".."sp_vidskl" WHERE "id"=@P1', N'@P1 int',  3 
exec sp_executesql N'SELECT "id","nam","vidskl_id","my_version" FROM "claims".."sp_sklad" WHERE "id"=@P1', N'@P1 int',  4 

Вот это все он для чего делает??? Это что Refresh такой?

3. Как узнать в Profler какой из операторов в "Multiple-step operation" вызвал ошибку?
...
Рейтинг: 0 / 0
Помогите разобраться с ADO
    #32259721
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADO не всегда может правильно построить запросы на обновление когда запрос на выборку не из одной таблицы. Поэтому лучше на это не полагаться, а строить запросы на UPDATE самому.

По поводу 2 - да, это обновления строк.

По поводу 3 - запрос с этой ошибкой - тот UPDATE из п.1. Просто вернулось ROWCOUNT больше единицы.
...
Рейтинг: 0 / 0
Помогите разобраться с ADO
    #32259903
Dmitry2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем он выбирает ВСЕ записи? У меня ведь их может быть не 4 а 100.
и что после каждого обновления ОДНОЙ записи, он будет
перечитывать весь набор данных? Да еще по одной записи за запрос?

И еще. Непонятно как могло вернуть ROWCOUNT > 1? Там ведь
в условиях запроса первичный ключ используется!

Что-то чем больше я в этом ADO ковыряюсь, тем больше
у меня желание попробовать переползти на dbExpress :(((
...
Рейтинг: 0 / 0
Помогите разобраться с ADO
    #32260141
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dmitry2

Используй хранимые процедуры и на селект и на апдэйт и все будет прекрасно и будет работать!!!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]