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;
База данных ... вычитание из таблицы
появилась такая вот проблема
есть таблица "каталог"
в ней хранятся количества товаров.
мне нужно в другой таблице заказать n количество товаров
и чтобы из таб "каталог" вычиталось это количество
не подскажите через какие запросы можно это сделать?
на заказ
Код:
а это на всякий случай в каталоге
Код:
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;
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;
2) перед инсертом заказа селект количества из каталога с условием where ID_AUTO=ID_AUTO_Заказа потом проверка количества (если больше 0) то update каталога set KOL_Auto=KOL_Auto-1 where ID_AUTO=ID_AUTO_Заказа и дальше insert заказа.
2) а не могли бы написать кусочек этот
как должно быть подкорректировать тот код
я не понял как сделать проверку(
Код:
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;
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
Код:
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;
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 до боли глючной оказалась, поэтому через фильтр пришлось сделать.
Спасибо вам огромное!!!!!!! :)