Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

База данных ... вычитание из таблицы

63K
12 февраля 2011 года
memoRRRRR
10 / / 12.02.2011
Все доброго времени суток

появилась такая вот проблема
есть таблица "каталог"
в ней хранятся количества товаров.

мне нужно в другой таблице заказать n количество товаров
и чтобы из таб "каталог" вычиталось это количество

не подскажите через какие запросы можно это сделать?

на заказ
Код:
procedure TForm1.btZakAddClick(Sender: TObject);
 var
    KOL: Integer;
 begin
  // Проверка полей ввода
  try
   KOL:=StrToInt(ZakKol.Text);
  except
   ZakKol.SelectAll;
   ZakKol.SetFocus;
   ShowMessage('Количество должно быть числом');
   exit;
  end;
  if Trim(ZakFIO.Text)='' then
   begin
    ZakFIO.SetFocus;
    ShowMessage('Выберите клиента');
    exit;
   end;
  if Trim(ZakAvto.Text)='' then
   begin
    ZakAvto.SetFocus;
    ShowMessage('Выберите клиента');
    exit;
   end;
  // Добавляем запись в базу
  tbZakaz.Insert;
  tbZakaz['ID_AUTO']:=ZakAvto.KeyValue;
  tbZakaz['ID_KlIENT']:=ZakFIO.KeyValue;
  tbZakaz['KOL']:=KOL;
  tbZakaz['DATE_PRODA']:=ZakDat.Date;
  tbZakaz['sum']:=Sum;
  tbZakaz.Post;
 end;

а это на всякий случай в каталоге
Код:
procedure TForm1.btCatAddClick(Sender: TObject);
 var
    KOL,CENA,GOD,PROB: integer;
 begin
  try
   KOL:=StrToInt(CatNum.Text);
  except
   CatNum.SelectAll;
   CatNum.SetFocus;
   ShowMessage('Количество должно быть числом');
   exit;
  end;
  try
   CENA:=StrToInt(CatPrice.Text);
  except
   CatPrice.SelectAll;
   CatPrice.SetFocus;
   ShowMessage('Цена должна быть числом');
   exit;
  end;
  try
   GOD:=StrToInt(CatYear.Text);
  except
   CatYear.SelectAll;
   CatYear.SetFocus;
   ShowMessage('Год должен быть числом');
   exit;
  end;
  try
   PROB:=StrToInt(CatProbeg.Text);
  except
   CatProbeg.SelectAll;
   CatProbeg.SetFocus;
   ShowMessage('Пробег должен быть числом');
   exit;
  end;
  if Trim(CatKuzov.Text)='' then
   begin
    CatKuzov.SelectAll;
    CatKuzov.SetFocus;
    ShowMessage('Выберите кузов');
    exit;
   end;
  if Trim(CatColor.Text)='' then
   begin
    CatColor.SelectAll;
    CatColor.SetFocus;
    ShowMessage('Выберите цвет');
    exit;
   end;
  if Trim(CatGear.Text)='' then
   begin
    CatGear.SelectAll;
    CatGear.SetFocus;
    ShowMessage('Выберите КПП');
    exit;
   end;
  if Trim(CatReg.Text)='' then
   begin
    CatReg.SelectAll;
    CatReg.SetFocus;
    ShowMessage('Выберите регион');
    exit;
   end;
  if (KOL<0) or (CENA<0) or (GOD<0) or (PROB<0) then
   begin
    ShowMessage('Неверный формат чисел, все числа должны быть положительны');
    exit;
   end;
  // Добавляем запись в базу
  tbCatalog.Insert;
  tbCatalog['ID_AUTO']:=CatName.KeyValue;
  tbCatalog['KOL_Auto']:=KOL;
  tbCatalog['Cena']:=CENA;
  tbCatalog['God_vipusk']:=GOD;
  tbCatalog['Probeg']:=PROB;
  tbCatalog['Kuzov']:=CatKuzov.Text;
  tbCatalog['COLOR']:=CatColor.Text;
  tbCatalog['KPP']:=CatGear.Text;
  tbCatalog['REGION']:=CatReg.text;
  tbCatalog.Post;
 end;
277
12 февраля 2011 года
arrjj
1.7K / / 26.01.2011
1) можно на уровне БД автоматизировать гуглим create trigger before insert
2) перед инсертом заказа селект количества из каталога с условием where ID_AUTO=ID_AUTO_Заказа потом проверка количества (если больше 0) то update каталога set KOL_Auto=KOL_Auto-1 where ID_AUTO=ID_AUTO_Заказа и дальше insert заказа.
63K
12 февраля 2011 года
memoRRRRR
10 / / 12.02.2011
1) способ мне не подходит..я не понимаю SQL команды в делфи..
2) а не могли бы написать кусочек этот
как должно быть подкорректировать тот код
я не понял как сделать проверку(
63K
12 февраля 2011 года
memoRRRRR
10 / / 12.02.2011
 
Код:
tbZakaz.Insert;
  tbZakaz['ID_AUTO']:=ZakAvto.KeyValue;
  tbZakaz['ID_KlIENT']:=ZakFIO.KeyValue;
  tbZakaz['KOL']:=KOL;
  tbZakaz['DATE_PRODA']:=ZakDat.Date;
   tbZakaz.Post;
  tbCatalog.Locate('NAZVAUTO',ZakAvto.Text,[]);
          tbCatalog.Edit;
          tbCatalog['KOL_AUTO']:=tbCatalog['KOL_AUTO']-StrToInt(ZakKol.Text);
          tbCatalog.Post;

вот пытаюсь сделать так в таб заказе
но он ругается на эту строку tbCatalog.Locate('NAZVAUTO',ZakAvto.Text,[]);
Field NAZVAUTO cannot be used in a filter expression
277
12 февраля 2011 года
arrjj
1.7K / / 26.01.2011
Код:
procedure TForm1.btZakAddClick(Sender: TObject);

 var

    KOL: Integer;

 begin

  // Проверка полей ввода

  try

   KOL:=StrToInt(ZakKol.Text);

  except

   ZakKol.SelectAll;

   ZakKol.SetFocus;

   ShowMessage('Количество должно быть числом');

   exit;

  end;

  if Trim(ZakFIO.Text)='' then

   begin

    ZakFIO.SetFocus;

    ShowMessage('Выберите клиента');

    exit;

   end;

  if Trim(ZakAvto.Text)='' then

   begin

    ZakAvto.SetFocus;

    ShowMessage('Выберите клиента');

    exit;

   end;





  tbCatalog.Filter:='ID_AUTO ='+IntToStr(ZakAvto.KeyValue);

  tbCatalog.Filtered:=True;

  tbCatalog.First;



  if not tbCatalog.Eof then

   begin



    // Добавляем запись в базу

    if tbCatalog['KOL_AUTO']<KOL then

    ShowMessage('Недостаточно авто для заказа')

    else

    begin

  tbZakaz.Insert;

  tbZakaz['ID_AUTO']:=ZakAvto.KeyValue;

  tbZakaz['ID_KlIENT']:=ZakFIO.KeyValue;

  tbZakaz['KOL']:=KOL;

  tbZakaz['DATE_PRODA']:=ZakDat.Date;

  tbZakaz.Post;



    //Удаляем из каталога

          tbCatalog.Edit;

          tbCatalog['KOL_AUTO']:=tbCatalog['KOL_AUTO']-StrToInt(ZakKol.Text);

          tbCatalog.Post;

          ShowMessage('Заказ успешно добавлен');

    end

  end

  else ShowMessage('Авто не найден!!!');

  tbCatalog.Filtered:=False;

 end;

Locate до боли глючной оказалась, поэтому через фильтр пришлось сделать.
63K
12 февраля 2011 года
memoRRRRR
10 / / 12.02.2011
Спасибо вам огромное!!!!!!! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог