Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi+InterBase]Расчет суммы стоимости услуги


Автор: Gamber 20.4.2009, 18:03
Доброго всем времени суток...
Пишу небольшое приложение для учета оказанных услуг...
Есть три таблицы:
1. Клиенты
2. Услуги
3. Оказанные услуги

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

Можно ли такое реализовать, подскажите пожалуйста...

Автор: Keeper89 20.4.2009, 18:09
Какая СУБД?

Автор: insoft 20.4.2009, 18:49
Gamber
элементарно делается средствами хранимой процедуры

Автор: Gamber 20.4.2009, 20:52
Rodman, прошу прощения забыл указать...
СУБД - InterBase 6.5

С расчетом вроде бы удалось разобраться - сделал суммирование с помощью IBQuery...

А вот с очисткой таблицы после закрытия окна калькулятора не выходит, попробовал сделать тоже с помощью IBQuery (напсал в нем DELETE FROM sel_connects и повесил его исполнение на закрытие окна), не выходит, ругается что к пустому датасету применить операцию нельзя, хотя значения в датасете при закрытии есть ...

Автор: insoft 20.4.2009, 21:06
Gamber, код в студию как делаешь?

Автор: Gamber 21.4.2009, 15:06
Вот код:
Код

procedure TdmClient.aCalcSelConnectsExecute(Sender: TObject);
begin
  IBQCalc.Refresh;
  fmEditClients.ehnumCostConnect.Value := IBQCalc.FieldValues['SUM'];
  fmSelConnects.Close;
  gbSel_Connects.Refresh;
  gbSel_Connects.Close;
  IBQClear.Refresh;
end;


Calc работает нормально, а вот с Clear ничего не выходит...
Пробовал по разному:
IBQClear.ExecSQL (т.е. не используя IBQUpdate) (access violation)
IBQClear.Delete (ругается на пустой датасет);
IBQClear.Refresh (ругается на открытый датасет)

Проверил запрос (да какой там запрос, одна строчка) на сервере, работает нормально, все удаляет... На триггер подвесить не получается так как моя ситуация ни одним не описывается...

Помогите пожалуйста  smile 

Автор: insoft 21.4.2009, 15:14
используй простой IBQuery
Код

IBQuery.close;
IBQuery.SQL.clear;
IBQuery.sql.add := 'delete from NameTable';
IBQuery.ExecSQL;

ну и соответственно к кверику у тебя должна быть привязана IBTransaction 

Автор: Gamber 21.4.2009, 15:32
insoft,  пошло, большое спасибо... Только писал не Add, а Text...

И еще такой вопрос...
Почему
Код

  gbSel_Connects.Refresh;
  gbSel_Connects.Close;
  IBQClear.ExecSQL;

не работает, а
Код

  gbSel_Connects.Refresh;
  gbSel_Connects.Close;  
  IBQClear.close;
  IBQClear.SQL.clear;
  IBQClear.sql.Text := 'delete from sel_connects';
  IBQClear.ExecSQL;

работает...

В чем принципиальная разница конструкций?

Ага... Добавил IBQClear.Close и все заработало...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)