Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хочу ликбез по блокировкам. Нужно внести несколько, изменений вместе или не внести ни одного 
:(
    Опции темы
Bes
Дата 6.4.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Программа для продажи какого-то товара.
Каждая продажа стостоит из двух действий.
1) создание записи в чеке с количеством товара.
2) изменение количества товара на складе.
либо
1) изменения количества товара в чеке.
2) изменение количества товара на складе.

если одно из действий по какой-то причине не выполняется, то количество продаж не равно количеству закупленного товара минус остаток - ОГРОМНАЯ ПРОБЛЕМА.

можно конечно проверять многократно (а то ли положилось в таблицу, что мы хотели), но это не выход....
Если можно, пример как сделать два Exec-а для Query для Акцесса.
ОГРОМНОЕ Спасибо.
PM MAIL   Вверх
Bes
Дата 6.4.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблему решил, решение такое:

Для АДО:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
     ADOConnection1.BeginTrans;
     try
          ADOQuery1.Active:=false;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Text:='update Tab1 set qnt = qnt + :qnt';
          ADOQuery1.Parameters[0].Value:=1;
          ADOQuery1.ExecSQL;

          ADOQuery2.Active:=false;
          ADOQuery2.SQL.Clear;
          ADOQuery2.SQL.Text:='update Tab2 set qnt = qnt - :qnt';
          ADOQuery2.Parameters[0].Value:=1;
          ADOQuery2.ExecSQL;
          ADOConnection1.CommitTrans;
     except
          ADOConnection1.RollbackTrans;
     end;
end;


Для БДЕ:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
     Database1.StartTransaction;
     try
          Query1.Active:=false;
          Query1.SQL.Clear;
          Query1.SQL.Text:='update Tab1 set qnt = qnt + :qnt';
          Query1.Params[0].AsInteger:=1;
          Query1.ExecSQL;

          Query2.Active:=false;
          Query2.SQL.Clear;
          Query2.SQL.Text:='update Tab2 set qnt = qnt - :qnt';
          Query2.Params[0].AsInteger:=1;
          Query2.ExecSQL;
          Database1.Commit;
     except
          Database1.Rollback;
     end;
end;

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.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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