![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите найти ошибку
Дева © (2005-11-23 05:20:00)Написала код, по логике веще должно все работать правильно, однако запрос ADOQuerySale ничего не пишет в таблицу. Утро уже видать раннее, спать пора топать - вот башка совершенно не соображает. Вот код, может кто сообразит, в чем загвоздка:
//приход
procedure TFormSB.Bring(bBarCode: String);
var
iSale: Integer;
begin
iSale:=0;
//работа с каталогом
ADOQueryPrice.Close;
ADOQueryPrice.Prepared;
ADOQueryPrice.Parameters.ParamByName('pBarCode').Value:=bBarCode;
ADOQueryPrice.Open;
if ADOQueryPrice.IsEmpty = true then
begin
ShowMessage('в каталоге не присутсвует!');
//внести в каталог
with DlgPriceForm do
begin
Caption:='Добавить запись о товаре';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit1.Text:=bBarCode;
end;
if DlgPriceForm.ShowModal = mrOk then
begin
ADOQueryPrice.Close;
ADOQueryPrice.SQL.Clear;
ADOQueryPrice.SQL.Add('SELECT * FROM Price');
ADOQueryPrice.Open;
ADOQueryPrice.Insert;
ADOQueryPrice.Fields.Fields[0].AsString:=DlgPrice.DPEd1;
ADOQueryPrice.Fields.Fields[1].AsString:=DlgPrice.DPEd2;
ADOQueryPrice.Fields.Fields[2].AsVariant:=StrToFloat(DlgPrice.DPEd3);
ADOQueryPrice.Fields.Fields[3].AsString:=DlgPrice.DPEd4;
try
ADOQueryPrice.Post;
except
ShowMessage('Ошибка! Одинаковые штрих-коды');
ADOQueryPrice.Delete;
end;
ADOQueryPrice.Close;
ADOQueryPrice.SQL.Add('WHERE BarCode = :pBarCode');
end;
end;
//запрос Sale - проверка присутсвия в продаже товара
ADOQuerySale.Open;
ADOQuerySale.Locate('BarCode', bBarCode,[loCaseInsensitive]);
if ADOQuerySale.Fields.Fields[0].AsString <> bBarCode then
begin
// внести в Sale
ADOQuerySale.Last;
iSale:=ADOQuerySale.Fields.Fields[2].AsInteger+1;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Вот именно тут загвоздка. Информация в таблицу не попадает.
ADOQuerySale.Insert;
ADOQuerySale.Fields.Fields[2].AsInteger:=iSale;
ADOQuerySale.Fields.Fields[1].AsInteger:=0;
ShowMessage(IntToStr(iSale));//вставила чисто для проверки,
//движется ли здесь процесс, сообщение выдается - значет движется,
//но почему тогда не пишется в таблицу?
ADOQuerySale.Fields.Fields[0].AsString:=bBarCode;
ADOQuerySale.Post;
end;
//пишу в Sale количество - больше на один
ADOQuerySale.Edit;
ADOQuerySale.Fields.Fields[1].AsVariant:=ADOQuerySale.Fields.Fields[1].AsInteger+1;
ADOQuerySale.Post;
ADOQuerySale.Close;
//пишу в таблицу прихода
ADOQueryBring.Open;
ADOQueryBring.Insert;
ADOQueryBring.Fields.Fields[1].AsVariant:=Date;
ADOQueryBring.Fields.Fields[2].AsString:=bBarCode;
ADOQueryBring.Post;
end;
P. S. прошу не судить строго, может я и вправда какую-то мелочь не заметила, но просто уже утро, а я спать не ложилась
clickmaker (2005-11-23 15:08:00) [1]http://www.interface.ru/fset.asp?Url=/borland/ado3.htm
Дева (2005-11-23 15:05:00) [2]Нашла, почему не работает... В свойствах ADOQuerySale было
LockType = ltBatchOptimistik...
Что это вообще такое?
Separator (2005-11-23 05:57:00) [3]> if DlgPriceForm.ShowModal = mrOk then
> begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'INSERT INTO Price (Field1, Field1, Field1, Field1) VALUES (' + DlgPrice.DPEd1 + ', ' + DlgPrice.DPEd2 + ', ' + StrToFloat(DlgPrice.DPEd3) + ', ' + DlgPrice.DPEd4 ')';
ADOQuery1.ExecSQL;
Вот Ё, проще и понятней использовать SQL