Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
MerryJane
Member

Откуда:
Сообщений: 4
Здравствуйте.
Случился у меня курсовик по субд, и ничто не предвещало беды пока не случилась данная проблема...
Есть таблица "склад". в ней поля "наименование детали" "кол-во" "куплено" "заказано" "свободно"
назначение всех полей следует из названия кроме поля "куплено". в данном поле хранится кол-во деталей, который на данный момент находятся в "чеке".
т.е.
приходит покупатель, выбирает товар. решил купить подушку правой опоры двигателя, продавец занес ее в чек.
пусть всего на складе таких деталей 5. до момента занесения в чек куплено=0. после куплено =1.
свободно=колво-куплено-заказано=5-1-0=4
таким образом куплено позволяет видеть сколько свободных деталей, на случай если человек решит еще одну такую же деталь купить.
после того как все необходимое занесено в чек, и человек готов купить - оформляем покупку.
записи из чека уходят в табл."розница" со склада списывается кол-во. т.е. кол-во=кол-во-куплено. а куплено возвращается в 0.
и все это работает до тех пор, пока куплено не станет равно кол-ву на складе. а именно
осталось две детали. купили две детали. и эти запросы уже не выполняются.
пробовала разъединять запросы. смотрела все ограничения. нигде не нашла ограничения, запрещающего кол-ву становится = 0
помогите пожалуйста.
знаю, что оч сложно это все описываю, но дело в том что защита курсовика уже завтра, и переделывать все с 0, просто нет времени
30 май 13, 22:30    [14372837]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37138
У вас ошибка в запросах.
30 май 13, 22:46    [14372881]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
MerryJane
Member

Откуда:
Сообщений: 4
Гавриленко Сергей Алексеевич,

тогда почему первые разы, пока кол-ву не надо становится = 0 все работает корректно?
30 май 13, 22:51    [14372906]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
MerryJane,

ну отлаживаться надо, чего-же еще то
что говорит то когда отказывается ноль делать?
какой код выполняется?
30 май 13, 23:02    [14372940]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
MerryJane
Member

Откуда:
Сообщений: 4
leov,

в запрос приходит по строчкам проходит, но ошибки не выдает. а после в таблице можно увидеть что значение куплено изменилось.из 0 стало например 2, но обратно не обнулилось, и кол-во тоже осталось не изменным.
а из чека в розницу записи перенеслись
30 май 13, 23:08    [14372950]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
MerryJane
Member

Откуда:
Сообщений: 4
это для изменения куплено при внесении в чек

with form2.ADOQuery1 do
begin
//уменьшение кол-ва свободных деталей
 close;
 sql.clear;
 sql.Add('update Склад set Куплено=Куплено+ :kol');
 sql.Add('where Склад.номер_яч='''+id+'''');
 Parameters.ParamByName('kol').Value:=strtoint(CbKolVo.text);
 execsql;
end;

а это процедура списания из чека в розницу и изменение значений

if adotable1.RecordCount>0 then
if (vnes-sum)<0 then showmessage('Внесенная сумма меньше итоговой')
else
begin
with ADOQuery1 do
 begin
 close;
 sql.Clear;
 sql.Add('Insert into Розница(Ном_яч_склад, Наим_дет, Фирм_про, Дата, кол_во , Цена)');
 sql.Add('Select Ном_яч_склад, Наим_дет, Фирм_про, Дата, кол_во , Цена from Чек');
 ExecSQL;
 end;//with
with ADOQuery1 do
 begin
 close;
 sql.Clear;
 sql.Add('Update Склад set Кол_во=Кол_во-Куплено,Куплено=Куплено-Куплено');
 sql.Add('where Куплено>=0');
 ExecSQL;
 end;//with
with ADOQuery1 do
 begin
 close;
 sql.Clear;
 sql.Add('truncate table Чек');
 ExecSQL;
 end;//with
showmessage('Покупка оплачена');
ADOTable1.Active:=false;
ADOTable1.Active:=true;
end //if
else showmessage('Чек пуст');
30 май 13, 23:12    [14372963]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
MerryJane,

что находится в таблице склад до операции update ?
т.е что вернет select * from Склад

кстати Куплено=Куплено-Куплено бессмыслено т.к всегда будет ноль или вообще null
и если таки там null то where Куплено>=0 не даст выполнить update
31 май 13, 00:45    [14373124]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля не хочет становится равным нулю. подскажите, в чем дело?  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
MerryJane,

вероятнее всего там таки null
и update Склад set Куплено=Куплено+ :kol не выполняется
может надо update Склад set Куплено=isnull(Куплено,0)+ :kol
31 май 13, 00:48    [14373130]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить