Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
1

Вычисление поля delphi

18.04.2012, 09:28. Показов 3645. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый утро ребята. Access подключение на Delphi2010 при помощи ADOConnection1, ADOTable1, DataSource1, в Таблице ест 5 поля: К-во, Цена, Скидка, Цена_итого, Процент в Delphi делал второе форма для добавленная Edit1-К-во Edit2.- Цена Edit3- Скидка, после добавление мне надо что таблица делал следующий математически операции .

1. К-во * Цена = Цена_итого
2. Цена_итого /100*Скидка= Процент
3. Цена_итого - Процент = Цена_итого

Для этого пишу на кнопке
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Adotable1.Edit;
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена').Value * ADOTable1.FieldByName('К-во').AsFloat;
ADOTable1.FieldByName('Процент').Value := ADOTable1.FieldByName('Цена_итого').Value /100 * ADOTable1.FieldByName('Скидка').AsFloat;
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена_итого').Value - ADOTable1.FieldByName('Процент').AsFloat;
Adotable1.Post;
 
end;
Работает да это код выполняет это операцию , Но мне надо что без кнопку после добавление, DBGrid перечитал автоматически. и как это реализовать ?
Вложения
Тип файла: rar СУБД -Вычисление поля.rar (555.0 Кб, 59 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2012, 09:28
Ответы с готовыми решениями:

Вычисление поля.
Суть проблемы в следующем. У меня есть, типа такая таблица: field1 |field2 запись1 | 5...

Вычисление значения поля
Здравствуйте. Подскажите пожалуйста как реализовать такую штуку. Есть таблица с полями - поле1,...

Вычисление поля по окончании ввода
Вопрос таковой, есть 2 поля Количество и Розничная цена, как сделать так, чтобы окончании ввода в...

Автоматическое вычисление поля класса
class A {int a=0; int b=0; int c=a*b; } При создании экземпляра с=0 - очевидно. Возможно ли...

12
23 / 23 / 12
Регистрация: 13.09.2010
Сообщений: 88
18.04.2012, 10:37 2
Delphi
1
2
3
4
5
6
if adotable1.Modified=true then begin
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена').Value * ADOTable1.FieldByName('К-во').AsFloat;
ADOTable1.FieldByName('Процент').Value := ADOTable1.FieldByName('Цена_итого').Value /100 * ADOTable1.FieldByName('Скидка').AsFloat;
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена_итого').Value - ADOTable1.FieldByName('Процент').AsFloat;
Adotable1.Post;
end;
Добавлено через 53 секунды
событие может любым
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
18.04.2012, 11:04 3
А SQL запрос написать, не?
0
23 / 23 / 12
Регистрация: 13.09.2010
Сообщений: 88
18.04.2012, 11:16 4
мне не понятен ваш вопрос, зачем SQL, если у вас ADOTable а не ADOQuery
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
18.04.2012, 11:20 5
Зачем использовать adoTable ?
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
18.04.2012, 14:55  [ТС] 6
Цитата Сообщение от malenkaya Посмотреть сообщение
Delphi
1
2
3
4
5
6
if adotable1.Modified=true then begin
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена').Value * ADOTable1.FieldByName('К-во').AsFloat;
ADOTable1.FieldByName('Процент').Value := ADOTable1.FieldByName('Цена_итого').Value /100 * ADOTable1.FieldByName('Скидка').AsFloat;
ADOTable1.FieldByName('Цена_итого').Value := ADOTable1.FieldByName('Цена_итого').Value - ADOTable1.FieldByName('Процент').AsFloat;
Adotable1.Post;
end;
Добавлено через 53 секунды
событие может любым
после это if adotable1.Modified=true then begin программа не выполняет нечего, код который я выложил он работает но мне интересно ! когда добавляю запись что программа без не какого нажать кнопки сам выполнял это операция

Добавлено через 2 часа 46 минут
помочь не кто не сможет ?
0
23 / 23 / 12
Регистрация: 13.09.2010
Сообщений: 88
18.04.2012, 15:09 7
Цитата Сообщение от xxbesoxx Посмотреть сообщение
после это if adotable1.Modified=true then begin программа не выполняет нечего, код который я выложил он работает но мне интересно ! когда добавляю запись что программа без не какого нажать кнопки сам выполнял это операция

Добавлено через 2 часа 46 минут
помочь не кто не сможет ?
Delphi
1
if (adotable1.Modified=true) then begin
попробуй так
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
18.04.2012, 15:16 8
xxbesoxx, а мне вот интересно, зачем держать три поля, если для вычисления значений двух из них достаточно значнения из третьего поля? зачем такая избыточность?
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
18.04.2012, 15:21  [ТС] 9
Цитата Сообщение от malenkaya Посмотреть сообщение
Delphi
1
if (adotable1.Modified=true) then begin
попробуй так
Вы код который здесь вставляете проверили у вас работает ????

Добавлено через 3 минуты
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
xxbesoxx, а мне вот интересно, зачем держать три поля, если для вычисления значений двух из них достаточно значнения из третьего поля? зачем такая избыточность?
Как вы предлагаете реализовать это ? Что вы меня советуйте ?
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
18.04.2012, 15:23 10
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Как вы предлагаете реализовать это ? Что вы меня советуйте ?
ADOQUERY и SQL

 Комментарий администратора 
надеюсь, я правильно понял ваш посыл топикстартеру
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
18.04.2012, 15:32 11
xxbesoxx, да все элементарно просто, убери лишнее поле в таблице "Процент", а дальше:
1) такой код будет работать, если позиционирование будет по ДБГриду, а данная таблица - его источник данных
Delphi
1
2
3
4
5
6
7
8
9
10
if ADOTable1.Active = true then // точно не помню уже паскаля, поэтому не судите за индокод
var: 
  sum : Double;
begin
ADOTable1.Edit; 
sum := ADOTable1.FieldByName('Цена').Value * ADOTable1.FieldByName('К-во').AsFloat;
sum := (1.0 - ADOTable1.FieldByName('Скидка').AsFloat) * sum;
ADOTable1.FieldByName('Цена_итого').Value := sum;
ADOTable1.Post;
end;
а еще лучше сделать это по средствам параметризированного запроса (если не знаете, что сие, поиск по форуму) на обновление. Я бы даже сказал, настоятельно прошу использовать именно запрос
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
18.04.2012, 15:50  [ТС] 12
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
xxbesoxx, да все элементарно просто, убери лишнее поле в таблице "Процент", а дальше:
1) такой код будет работать, если позиционирование будет по ДБГриду, а данная таблица - его источник данных
Delphi
1
2
3
4
5
6
7
8
9
10
if ADOTable1.Active = true then // точно не помню уже паскаля, поэтому не судите за индокод
var: 
  sum : Double;
begin
ADOTable1.Edit; 
sum := ADOTable1.FieldByName('Цена').Value * ADOTable1.FieldByName('К-во').AsFloat;
sum := (1.0 - ADOTable1.FieldByName('Скидка').AsFloat) * sum;
ADOTable1.FieldByName('Цена_итого').Value := sum;
ADOTable1.Post;
end;
а еще лучше сделать это по средствам параметризированного запроса (если не знаете, что сие, поиск по форуму) на обновление. Я бы даже сказал, настоятельно прошу использовать именно запрос
Огромное вам спасибо за внимание ! извиняться что я вас отвлекал, вечером попробую SQL Запрос и напишу как получится
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,553
19.04.2012, 20:19  [ТС] 13
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Огромное вам спасибо за внимание ! извиняться что я вас отвлекал, вечером попробую SQL Запрос и напишу как получится
Огромное всем спасибо кто пытался меня помочь . Очень помогло это статья http://devdelphi.ru/?p=1229 от это примере уже дальше всю ясно .
Вложения
Тип файла: rar Вычисляемые поля.rar (536.7 Кб, 66 просмотров)
0
19.04.2012, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2012, 20:19
Помогаю со студенческими работами здесь

Вычисление с IIf по условию другого поля
Всем добрый день. Подскажите как правильно написать формулу. Есть главная форма frmZakazKart с...

Вычисление потока векторного поля, найти ошибку
Добрый день! Пытаюсь найти поток векторного поля a=(1+z-y)j+(3x+2y-2z)k через треугольник...

Вычисление значения свободного поля в ленточной форме
Здравствуйте! Помогите пожалуйста с такой проблемой. Есть ленточная форма с данными и свободное...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru