Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.06.2012, 14:13
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию Помогите с вычислением

В общем то проблема такова.
Есть 2 Ado_таблицы (1. Склад медикаментов) (2. Формирование рецепта)
Код:
DataModule4.ADOTable2.Locate('Nazvanie', Form10.Edit2.text, []);
DataModule4.ADOTable2.Edit;
If (DataModule4.ADOTable2.FieldByName('Kolichestvo').Value < StrToInt(Form10.Edit3.Text))
then ShowMessage('Нехватает лекарств');
DataModule4.ADOTable2.FieldByName('Kolichestvo').Value:=DataModule4.ADOTable2.FieldByName('Kolichestvo').Value-StrToInt(Form10.Edit3.Text);
суть кода в чем. из таблицы (1. Склад медикаментов) мы вычитаем количество определенное лекарства, которое находит Locate.
т.е. вводим данные для формирования рецепта
Yod 10 (данные сохраняются в таблице 2.формирование рецепта ) а количество yoda вычитается из (таблицы 1.склад медикаментов)
===
проблема в чем.
1)если какого либо лекарства не хватает он выводит сообщение не хватает лекарства но вычитает в минус например 10-20= -10. Мне же надо что бы он и вовсе не вычитал.
2) если я ввожу при формировании рецепта то лекарство которого нет на складе медикаментов, мне надо что бы он вывел сообщение что на складе такого лекарства нету и не вычитал лекарство (а у меня же это неизвестное лекарство он вычитает из первой строки в таблице 1.склад медикаментов.)
----
вот так вот(

Последний раз редактировалось lmikle, 18.06.2012 в 17:14.
Ответить с цитированием
  #2  
Старый 18.06.2012, 15:17
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
If (DataModule4.ADOTable2.FieldByName('Kolichestvo'). Value < StrToInt(Form10.Edit3.Text))
 then ShowMessage('Нехватает лекарств')
 else DataModule4.ADOTable2.FieldByName('Kolichestvo').V alue:=DataModule4.ADOTable2.FieldByName('Kolichest vo').Value-StrToInt(Form10.Edit3.Text);
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 18.06.2012, 21:15
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
Код:
If (DataModule4.ADOTable2.FieldByName('Kolichestvo'). Value < StrToInt(Form10.Edit3.Text))
 then ShowMessage('Нехватает лекарств')
 else DataModule4.ADOTable2.FieldByName('Kolichestvo').V alue:=DataModule4.ADOTable2.FieldByName('Kolichest vo').Value-StrToInt(Form10.Edit3.Text);
---
Не помогает...) Вообще возможно поставленные задачи не понял, он вычитает и сообщение выводит и с тем кодом, но мне надо видимо проверку что если не хватает, то он выводил сообщение, но вычитание не производил, а если вообще в Складе нет такого лекарства, то он писал бы что нет лекарства, и не вычитал бы из 1й строки, как это он делает сейчас
Ответить с цитированием
  #4  
Старый 18.06.2012, 23:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
If (DataModule4.ADOTable2.FieldByName('Kolichestvo').Value < StrToInt(Form10.Edit3.Text)) then 
begin
  ShowMessage('Нехватает лекарств');
  exit;
end;

А вообще, лучше использовать отдельный запрос или StoredProcedure. Locate не всегда работает хорошо.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
ShiniDelf (19.06.2012)
  #5  
Старый 19.06.2012, 11:40
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ShiniDelf
---
Не помогает...) Вообще возможно поставленные задачи не понял, он вычитает и сообщение выводит и с тем кодом, но мне надо видимо проверку что если не хватает, то он выводил сообщение, но вычитание не производил, а если вообще в Складе нет такого лекарства, то он писал бы что нет лекарства, и не вычитал бы из 1й строки, как это он делает сейчас
а он и не должен вычитать ... если условие True то он выведет сообщение, а в противном случае автоматом произведет вычитание
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
ShiniDelf (19.06.2012)
  #6  
Старый 19.06.2012, 14:13
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
а он и не должен вычитать ... если условие True то он выведет сообщение, а в противном случае автоматом произведет вычитание
неизвестный идентификатор, пишет
[DCC Error] Unit10.pas(51): E2003 Undeclared identifier: 'b'

Последний раз редактировалось ShiniDelf, 19.06.2012 в 14:21.
Ответить с цитированием
  #7  
Старый 19.06.2012, 14:20
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Код:
If (DataModule4.ADOTable2.FieldByName('Kolichestvo').Value < StrToInt(Form10.Edit3.Text)) then 
begin
  ShowMessage('Нехватает лекарств');
  exit;
end;

А вообще, лучше использовать отдельный запрос или StoredProcedure. Locate не всегда работает хорошо.
ругается на данный код.
Ответить с цитированием
  #8  
Старый 19.06.2012, 14:36
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Код:
if (DataModule4.ADOTable2.FieldByName('Kolichestvo').Value > StrToInt(Form10.Edit3.Text))
then
begin
  DataModule4.ADOTable2.FieldByName('Kolichestvo').Value:=DataModule4.ADOTable2.FieldByName('Kolichestvo').Value-StrToInt(Form10.Edit3.Text);
end else begin
  ShowMessage ('Недостаточно лекарств')
end;
-------
так этим кодом разобрался с первой проблемой
Ответить с цитированием
  #9  
Старый 19.06.2012, 20:25
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Код:
 DataModule4.ADOTable2.Locate('Nazvanie', Form10.Edit2.text, []);
DataModule4.ADOTable2.Edit;
if (DataModule4.ADOTable2.FieldByName('Nazvanie').value <> StrToInt(Form10.Edit2.Text))
then
ShowMessage ('Нет лекарства')
else begin
DataModule4.ADOTable2.FieldByName('Kolichestvo').Value:=DataModule4.ADOTable2.FieldByName('Kolichestvo').Value-StrToInt(Form10.Edit3.Text);
end;
Form10.Close;
Form9.Show;
end;

end.
Вроде как по решению второй проблемы, работает, но в режиме работы когда вводу данные для рецепта и на кнопку сохранить вылетает такая лабуда "Название лекарства" Is not a valid integer value и формы не закрываются и не всплывают, что делать? Тип данных в базе данных сменить с текстового на числовой или можно как то по другому?

Последний раз редактировалось ShiniDelf, 19.06.2012 в 21:08.
Ответить с цитированием
  #10  
Старый 19.06.2012, 23:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ничего вот тут не смущает:
Код:
 (DataModule4.ADOTable2.FieldByName('Nazvanie').value <> StrToInt(Form10.Edit2.Text))
Ответить с цитированием
  #11  
Старый 19.06.2012, 23:15
ShiniDelf ShiniDelf вне форума
Прохожий
 
Регистрация: 18.06.2012
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ничего вот тут не смущает:
Код:
 (DataModule4.ADOTable2.FieldByName('Nazvanie').value <> StrToInt(Form10.Edit2.Text))
Смущает, но я не знаю какой функцией заменить....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter