Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 30.11.2011, 17:49   #1
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Адрес: г. Караганда(Казахстан)
Сообщений: 43
Репутация: 10
По умолчанию

17:49
Доброго времени формучане!

Существует Access и Delphi!

Помогите решить проблему с проверкой таблицы на наличие данных!
Существует таблица оформление продажи и склад, при оформлении товара надо выполнять проверку таблицу оформление продажи на наличие товара в таблице! то есть при добавлении нового товара делаем запрос, который проверяет, есть ли уже такой товар в таблице. Если нет, то добавляем полностью запись, а если уже есть - просто увеличивает количество.
Я делал через ADOQuery! пробовал через фильтрацию Where в SQL! не смог помогите пожалуйста!!
Вот код:

Код:

procedure TfrmAmount.btnOkfrmAmountClick(Sender: TObject);
begin
frmConnection.qSells.Active:=false;
frmConnection.qSells.SQL.Clear;
frmConnection.qSells.SQL.Add('Select Naimenov, Naimenov,  Zavnumber, Edizmerenie, Amount, Price, Sumprice');
frmConnection.qSells.SQL.Add('from Sells');
frmConnection.qSells.Active:=true;
  begin
  if frmConnection.qSells.FieldByName('Naimenov').AsString=Naimenov then
       begin
       frmConnection.qSells.Edit;
       frmConnection.qSells.FieldByName('Naimenov').AsString:=frmConnection.qSells.FieldByName('Naimenov').AsString;
frmConnection.qSells.FieldByName('Zavnumber').AsInteger:=ZavNum;

frmConnection.qSells.FieldByName('Edizmerenie').AsString:=EdIzmer;

frmConnection.qSells.FieldByName('Price').AsCurrency:=Price;
frmConnection.qSells.FieldByName('Sumprice').AsCurrency:=Sumprice; 
      frmConnection.qSells.FieldByName('Amount').AsInteger:=frmConnection.qSells.FieldByName('Amount').AsInteger+strtoint(spinedit1.Text);
       frmConnection.qSells.Post
       end
       else
      frmConnection.qSells.Insert;
      frmConnection.qSells.FieldByName('Naimenov').AsString:=Naimenov;
      frmConnection.qSells.FieldByName('Zavnumber').AsInteger:=ZavNum;
      frmConnection.qSells.FieldByName('Amount').AsInteger:=strtoint(spinedit1.Text);
      frmConnection.qSells.FieldByName('Edizmerenie').AsString:=EdIzmer;
      frmConnection.qSells.FieldByName('Price').AsCurrency:=Price;
      frmConnection.qSells.FieldByName('Sumprice').AsCurrency:=Sumprice;
      frmConnection.qWarehouse.Edit;
      frmConnection.qWarehouse.FieldByName('Amount').AsInteger:=frmConnection.qWarehouse.FieldByName('Amount').AsInteger - strtoint(spinedit1.Text);
      frmConnection.qSells.Post;
      frmConnection.qWarehouse.Post;
      if frmConnection.qWarehouse.FieldByName('Amount').AsInteger=0 then frmConnection.qWarehouse.Delete;
      frmAmount.Close;
      frmWarehouse.Show;
      end;
  end;

У меня первичный ключ на Naimenov, поэтому ошибка?если да то как решить данную проблему!
плохо знаю SQL по этому с ним не смог!поэтому сделал через ADOQuery

20:43
Ну хотя бы на истинный путь направьте!

Красные жирные циферки видны ?
Это время, когда вы отправляли свои сообщения друг за другом, подряд.
У нас есть кнопка "Правка".
Читаем правила раздела.
По правилам это приравнивается к флуду.

Последний раз редактировалось mihali4; 01.12.2011 в 03:18.
Blood_ghosT вне форума   Ответить с цитированием
Старый 30.11.2011, 21:21   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,607
Репутация: 6210
По умолчанию

Что бы на истинный путь направить, скажите хотя бы что не получается. Два раза прочитал, так и не понял в чем проблема, какая ошибка и где
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 30.11.2011, 21:54   #3
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Адрес: г. Караганда(Казахстан)
Сообщений: 43
Репутация: 10
По умолчанию

Сори если не правильно пояснил ошибку!Делаю программу склад!БД=Аксес!
Моя кнопка добавляет в таблицу оформление заказа товар из таблицы склад если добавить один раз товар то код работает!А если еще раз добавить тот же товар то он будет заноситься как не то же товар а как новый!
Хотелось бы что бы при добавлении нового товара, который уже существует в таблице, количество просто увеличивалось, а не заносилось как новый товар!

данное условие
Код:

 if frmConnection.qSells.FieldByName('Naimenov').AsString=Naimenov then

проверяет на наличие товара! но выходит ошибка что qSells не знает что делать то ли заносить то ли редактировать!

Надеюсь на этот раз я все правильно пояснил!
Blood_ghosT вне форума   Ответить с цитированием
Старый 30.11.2011, 22:38   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,607
Репутация: 6210
По умолчанию

Для начала - идентификация товара только по наименованию конечно дубово-дубово. Почему не быть товару с одним и тем же наименованием, но с разной ценой? Да и наименование ручками вводится наверно, одной буквой ошибся при вводе - и уже в базе не найдет такого наименоваия даже для существующего товара.

дальше
Код:

...
frmConnection.qSells.SQL.Clear;
frmConnection.qSells.SQL.Add('Select Naimenov, Naimenov,  Zavnumber, Edizmerenie, Amount, Price, Sumprice'); //зачем два раза Naimenov?
frmConnection.qSells.SQL.Add('from Sells');
frmConnection.qSells.Active:=true;
  begin  //begin лишний
  if frmConnection.qSells.FieldByName('Naimenov').AsString=Naimenov then
...
       frmConnection.qSells.Post
       end
       else begin  //begin потеряли
      frmConnection.qSells.Insert;
...

add

Цитата:
if frmConnection.qSells.FieldByName('N aimenov').AsString=Naimenov
Эта проверка даст False даже при сравнении 'Б' и 'б'. Используйте AnsiUpperCase при сравнении

add

evg_m прав, даже не заметил что в первом запросе WHERE нет
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.12.2011 в 00:14.
Аватар вне форума   Ответить с цитированием
Старый 01.12.2011, 00:05   #5
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,644
Репутация: 2097
По умолчанию

Чтобы знать что такого товара нет его надо искать, а не просто сравнивать первый попавшийся с искомым так написано у тебя в программе.
Для этого можно использовать разные методы.
1. SQL искать с помощью Access
Код:

frmConnection.qSells.SQL.:='Select Naimenov, Naimenov,  Zavnumber, Edizmerenie, Amount, Price, Sumprice' #13
 + 'from Sells'#13
 + 'where Naimenov =:Naimtovar';
frmConnection.qSells.Parammeters.ParamByname('naimtovar').value:=Naimenov;
frmConnection.Open;
if not frmConnection.IsEmpty then begin 
//товар есть
// но товар может оказаться и не один
end
else begin
//товара нет
end;

2. тащить всю таблицу в программу (как сейчас)
Код:

frmConnection.Open;
if frmConnection.locate('naimenov', naimenoc, []) then begin
// будет найдена первая запись
end
else begin
// не нашли
end;

3. искать самостоятельно перебирая записи.
Код:

frmConnection.Open;
while not frmConnection.EOf do begin
  if ............ then begin
  // нашли товар
  end; 
  frmConnection.next;
end;
// о том что товара нет мы узнаем только перебрав ВСЕ записи.
if frmConnection.EOF then begin
// не нашли
end;

__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.12.2011 в 00:08.
evg_m вне форума   Ответить с цитированием
Старый 01.12.2011, 11:17   #6
Blood_ghosT
Пользователь
 
Регистрация: 29.07.2011
Адрес: г. Караганда(Казахстан)
Сообщений: 43
Репутация: 10
По умолчанию

Спасибо парни за помощь вроде код работает!!

Код:

procedure TfrmAmount.btnOkfrmAmountClick(Sender: TObject);
begin
frmConnection.qSells.Active:=false;
frmConnection.qSells.SQL.Clear;
frmConnection.qSells.SQL.Add('Select Naimenov, Zavnumber, Edizmerenie, Amount, Price, Sumprice');
frmConnection.qSells.SQL.Add('from Sells');
frmConnection.qSells.Active:=true;

  if frmConnection.qSells.Locate('Naimenov', Naimenov,[])
  then
    begin
       frmConnection.qSells.Edit;
       frmConnection.qSells.FieldByName('Naimenov').AsString:=frmConnection.qSells.FieldByName('Naimenov').AsString;
       frmConnection.qSells.FieldByName('Zavnumber').AsInteger:=ZavNum;
       frmConnection.qSells.FieldByName('Amount').AsInteger:=frmConnection.qSells.FieldByName('Amount').AsInteger+strtoint(spinedit1.Text);
       frmConnection.qSells.FieldByName('Edizmerenie').AsString:=EdIzmer;
       frmConnection.qSells.FieldByName('Price').AsCurrency:=Price;
       frmConnection.qSells.FieldByName('Sumprice').AsCurrency:=Sumprice;
       frmConnection.qWarehouse.Edit;
       frmConnection.qWarehouse.FieldByName('Amount').AsInteger:=frmConnection.qWarehouse.FieldByName('Amount').AsInteger - strtoint(spinedit1.Text);
       frmConnection.qSells.Post;
       frmConnection.qWarehouse.Post;
       if frmConnection.qWarehouse.FieldByName('Amount').AsInteger=0 then frmConnection.qWarehouse.Delete;
       frmAmount.Close;
       frmWarehouse.Show;
       end
       else
       begin
      frmConnection.qSells.Insert;
      frmConnection.qSells.FieldByName('Naimenov').AsString:=Naimenov;
      frmConnection.qSells.FieldByName('Zavnumber').AsInteger:=ZavNum;
      frmConnection.qSells.FieldByName('Amount').AsInteger:=strtoint(spinedit1.Text);
      frmConnection.qSells.FieldByName('Edizmerenie').AsString:=EdIzmer;
      frmConnection.qSells.FieldByName('Price').AsCurrency:=Price;
      frmConnection.qSells.FieldByName('Sumprice').AsCurrency:=Sumprice;
      frmConnection.qWarehouse.Edit;
      frmConnection.qWarehouse.FieldByName('Amount').AsInteger:=frmConnection.qWarehouse.FieldByName('Amount').AsInteger - strtoint(spinedit1.Text);
      frmConnection.qSells.Post;
      frmConnection.qWarehouse.Post;
      if frmConnection.qWarehouse.FieldByName('Amount').AsInteger=0 then frmConnection.qWarehouse.Delete;
      frmAmount.Close;
      frmWarehouse.Show;
      end;
  end;

Правда че то третьим способом не получилось!
Blood_ghosT вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование множества данных из разных книгах или из разных листов на 1 лист посредством макроса Тантана Microsoft Office Excel 6 18.12.2014 14:04
Лабораторка C++: Создать класс "угол на полскости" и выполнить проверку работоспособности. Zidane_13 Помощь студентам 0 13.01.2011 23:18
Запись в поля DateTime в БД Visual FoxPro посредством ADO Аватар БД в Delphi 2 13.12.2010 12:44
Как организовать проверку на наличие значения при UPDATE? vladtr SQL, базы данных 2 24.02.2010 15:47
Как в Методе гаусса создать обратную(At) матрицу!выполнить проверку! vdv08 Помощь студентам 1 29.10.2008 16:46


07:33.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru