|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.01.2012, 16:44 | #1 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
Ввод данных в БД через Edit
Надо написать программу на Delphi по расчету лизинга и занесении результатов в базу + БД клиентов и связь этих БД.
Форма ввода и расчета выглядит так: Пытался использовать для ввода DBEdit, но он как будто дохлый, ни на что не реагировал. Тогда решил использовать простой Edit. Весь ввод данных и расчеты привязал к одной кнопке. Код такой: procedure TForm2.Button1Click(Sender: TObject); begin table1.Insert; table1BalansStoimost.Value:=StrToIn t(Edit1.Text); table1UslugyLizingodatelja.value:=S trToInt(Edit2.Text); table1SrokEkspluatacii.Value:=StrTo Int(Edit3.Text); table1SrokDogovora.value:=StrToInt( Edit4.Text); table1StavkaKredita.value:=StrToInt (Edit5.Text); table1KomissijaLizingodatelja.value :=StrToInt(Edit6.Text); table1NDS.value:=StrToInt(Edit7.Tex t); if table1BalansStoimost.Value<1 then form4.showmodal else if table1UslugyLizingodatelja.value<0 then form4.showmodal else if table1SrokEkspluatacii.Value<1 then form4.showmodal else if table1SrokDogovora.value<1 then form4.showmodal else if table1SrokDogovora.value>10 then form4.showmodal else if table1StavkaKredita.value<1 then form4.showmodal else if table1KomissijaLizingodatelja.value <1 then form4.showmodal else if table1NDS.value<1 then form4.showmodal else begin table1AO1.value:=table1BalansStoimo st.Value/table1SrokEkspluatacii.Value; table1PKR1.value:=(table1BalansStoi most.Value+table1BalansStoimost.Val ue-table1AO1.value)*table1StavkaKredit a.value/100; table1KO1.value:=table1PKR1.value*1 00/table1StavkaKredita.value*table1Kom issijaLizingodatelja.value/100; table1UL1.Value:=table1UslugyLizing odatelja.value; table1V1.Value:=table1AO1.value+tab le1PKR1.value+table1KO1.value+table 1UL1.Value; table1NDS1.Value:=table1V1.value*ta ble1NDS.Value/100; table1I1.Value:=table1V1.Value+tabl e1NDS1.Value; (Дальше идут аналогичные расчеты для последующих лет договора) Проблема только в том, что, судя по всему, не производятся расчеты. Кнопка "Рассчитать" нажимается без ошибок, но DBEditы (те что справа) пусты. При нажатии кнопки "Сохранить" вылетает ошибка "EDBEngine error with message 'Key violation'" Я ничего не понимаю... |
08.01.2012, 18:25 | #2 | |
Made In USSR!
Старожил
Регистрация: 01.09.2010
Сообщений: 3,657
|
А вместо 100500 edit-ов справа СтрингГрид не проще использовать
Цитата:
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой" |
|
08.01.2012, 18:56 | #3 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
Да... я действительно пишу, как индус. Привычка еще с физического факультета, где главное чтобы прога выдавала верный ответ и все. Проги на паскале выходили в 300+ строк но работали.
Я исправил немного прогу. Убрал простые эдиты, вместо них вернул ДБЕдиты. теперь программа обращается к DataSource не на своей форме, а на Datasource на форме DataModule. Странно, но только в этом случае DBEdit активизируется. В общем, теперь все нормально вводится в DBEditы слева. Код кнопки "Рассчитать": procedure TForm2.Button1Click(Sender: TObject); begin //Проверка на правильность ввода if datamodule3.table1BalansStoimost.Va lue<1 then form4.showmodal else if datamodule3.table1UslugyLizingodate lja.value<0 then form4.showmodal else if datamodule3.table1SrokEkspluatacii. Value<1 then form4.showmodal else if datamodule3.table1SrokDogovora.valu e<1 then form4.showmodal else if datamodule3.table1SrokDogovora.valu e>10 then form4.showmodal else if datamodule3.table1StavkaKredita.val ue<1 then form4.showmodal else if datamodule3.table1KomissijaLizingod atelja.value<1 then form4.showmodal else if datamodule3.table1NDS.value<1 then form4.showmodal else begin //Активирую таблицу datamodule3.table1.Insert; //Рассчет по формулам на первый год datamodule3.table1AO1.value:=datamo dule3.table1BalansStoimost.Value/datamodule3.table1SrokEkspluatacii. Value; {Вот тут возникает ошибка "invalid floating point operation"} datamodule3.table1PKR1.value:=(data module3.table1BalansStoimost.Value+ datamodule3.table1BalansStoimost.Va lue-datamodule3.table1AO1.value)*datamo dule3.table1StavkaKredita.value/100; datamodule3.table1KO1.value:=datamo dule3.table1PKR1.value*100/datamodule3.table1StavkaKredita.val ue*datamodule3.table1KomissijaLizin godatelja.value/100; datamodule3.table1UL1.Value:=datamo dule3.table1UslugyLizingodatelja.va lue; datamodule3.table1V1.Value:=datamod ule3.table1AO1.value+datamodule3.ta ble1PKR1.value+datamodule3.table1KO 1.value+datamodule3.table1UL1.Value ; datamodule3.table1NDS1.Value:=datam odule3.table1V1.value*datamodule3.t able1NDS.Value/100; datamodule3.table1I1.Value:=datamod ule3.table1V1.Value+datamodule3.tab le1NDS1.Value; //Рассчет на второй год. Все просто. Если рассчитывается лишь на 1 год, все значения для 2+ года равны нулю. if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1AO2.value:=0 else datamodule3.table1AO2.value:=datamo dule3.table1AO1.value; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1PKR2.Value:=0 else datamodule3.table1PKR2.Value:=((dat amodule3.table1BalansStoimost.Value-datamodule3.table1AO1.value)+(datam odule3.table1BalansStoimost.Value-datamodule3.table1AO1.value-datamodule3.table1AO2.value))*datam odule3.table1StavkaKredita.value/100; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1KO2.value:=0 else datamodule3.table1KO2.value:=datamo dule3.table1PKR2.value*100/datamodule3.table1StavkaKredita.val ue*datamodule3.table1KomissijaLizin godatelja.value/100; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1UL2.value:=0 else datamodule3.table1UL2.Value:=datamo dule3.table1UslugyLizingodatelja.va lue; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1V2.Value:=0 else datamodule3.table1V2.Value:=datamod ule3.table1AO2.value+datamodule3.ta ble1PKR2.value+datamodule3.table1KO 2.value+datamodule3.table1UL2.Value ; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1NDS2.Value:=0 else datamodule3.table1NDS2.Value:=datam odule3.table1V2.value*datamodule3.t able1NDS.Value/100; if datamodule3.table1SrokDogovora.valu e<2 then datamodule3.table1I2.Value:=0 else datamodule3.table1I2.Value:=datamod ule3.table1V2.Value+datamodule3.tab le1NDS2.Value; Ошибку 'Кеy violation' исправил, перестроив таблицу БД. Там была ошибка. Не могу понять причину ошибки "invalid floating point operation". Деления на ноль нет, это точно. Типы данных, участвующих в расчетах, в таблице указаны как Number. Последний раз редактировалось TuxoH; 08.01.2012 в 18:59. |
08.01.2012, 19:09 | #4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
08.01.2012, 19:13 | #5 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
Деление идет на datamodule3.table1SrokEkspluatacii. Value. Я его ввожу через DBEdit, программа его принимает.
Добавление: Направив указатель на "value" любой записи, вижу "datamodule3.table1любоеполе.va lue = 0" Интересно... Добавление: Убрал строку "datamodule3.table1.Insert;" Но добавил навигатор. Если начать "+" и потом уже кнопку расчета, то все в порядке. Можно, конечно, добавить кнопку типа "готовность к расчету", но по-моему немного глупо... Последний раз редактировалось TuxoH; 08.01.2012 в 19:23. |
08.01.2012, 19:24 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А чего интересного? Insert в таблицу сделали и ожидаете, что по щучьему велению там данные появятся
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
08.01.2012, 19:31 | #7 |
Новичок
Джуниор
Регистрация: 08.01.2012
Сообщений: 4
|
Ну Insert же это создание новой записи. Еще пустой... вернуться к обычным Edit. Или все-таки сделать кнопку.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ввод данных через форму | hamlook | Microsoft Office Excel | 9 | 24.03.2013 17:11 |
ввод данных через форму | kelt-222 | Microsoft Office Excel | 28 | 20.09.2011 23:58 |
Ввод данных через DBGrid | postaveche | БД в Delphi | 6 | 19.12.2010 15:48 |
ввод данных через форму | brans | Microsoft Office Excel | 16 | 22.10.2010 18:32 |