Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO Кэширование ltbatchoptimistic, ADO Не работает транзакция 
:(
    Опции темы
Wovan
Дата 29.12.2015, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



Здравствуйте.
Подскажите пожалуйста. Где-то пропустил.
Работаю с ADOQuery LockType = ltBatchOptimistic. Типа пакетного ввода.
Таблица типа заголовка qryOrders + таблица qryOrderList типа связанного списка.
После добавления (редактирования) всех нужных записей делаю
try
 ADOConnection.BeginTrans;
...
 qryOrder.UpdateBatch();
...
qryOrderList.UpdateBatch();
...
 ADOConnection.CommitTrans;
...
 except
 on e:Exception do
  begin
   if ADOConnection.InTransaction
    then ADOConnection.RollbackTrans;
   MShowMessage('Ошибка сохранения заказа'#13 + e.Message);
  end;
 end;
При этом происходит ошибка при qryOrderList.UpdateBatch(); Срабатывает ADOConnection.RollbackTrans;
Но. Изменения qryOrder.UpdateBatch(); остаются зафиксированы. ??? Данные из пакета qryOrderList.UpdateBatch(); пропадают из грида.
Что не так? 
Есть еще симптомы. Не срабатывают некоторые события ADOQuery. Например, TField.OnValidate, TField.OnSetText. При этом TField.OnChange срабатывает.
Может есть какие-то ограничения при работе с пакетными (кэшированными) данными в ADO? Может что-то в ADOConnection подкрутить? Или параметры какие?
Спасибо.
Извините. Работаю в Delphi 7 + SQLSever 2008R2

Это сообщение отредактировал(а) Wovan - 29.12.2015, 12:20
PM MAIL   Вверх
Wovan
Дата 21.1.2016, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.9.2008

Репутация: нет
Всего: нет



Привет.
Появилась еще одна зацепка. Может кто сможет объяснить?
 
ADOQuery.Connection := ADOConnection;
ADOQuery.SQL.Text := 'insert into Pools (....  values (....  select SCOPE_IDENTITY() as PoolID'

Финт такой:

ADOConnection.BeginTrans;
 ADOQuery.Open;
 NewPoolID := ADOQuery.FieldByName('PoolID').AsInteger;
 ADOQuery.Close;
ADOConnection.RollbackTrans;

В результате имеем в БД вставленную строку.
По другому:

ADOQuery.Connection.BeginTrans;
 ADOQuery.Open;
 NewPoolID := ADOQuery.FieldByName('PoolID').AsInteger;
 ADOQuery.Close;
ADOQuery.Connection..RollbackTrans;

Строки нет!??? Чего собственно и добивался.
Нужно использовать именно первый вариант. Т.к. к ADOConnection подключено много датасетов.

Может какие настройки? Где копать? 

Это сообщение отредактировал(а) Wovan - 21.1.2016, 12:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1088 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.