Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Данные из другой таблицы * коеффициент [D7, Paradox]


Fl@sh ©   (2005-11-16 02:15:00) 

Доброе время суток.
Попробую розяснить мою проблему:
есть 2 таблицы: TableFirm i TableKlients
Нужно из таблицы TableFirm взять поле Add_Pay и вставить его в TableKlients умножив на соотв. коеф.
Вот проблема в том, что немогу вставить данные в таблицу.
делаю так:


procedure TForm1.TableKlientsCalcFields(DataSet: TDataSet);
begin
 TableKlients.DataSource.DataSet['Reduction'] :=  TableFirm.DataSource.DataSet['Add_Pay'] * 0.15;
end;


Вискакивает Access Violation

а если пишу:

TableKlientsReduction.Value := TableFirmAdd_Pay.Value * 0.15;

Вичисляет неправильно!!!
Помогите исправить ошибку, или может есть лучшее решение?


Fl@sh   (2005-11-20 02:44:00) [1]

Решил все таки, хотя наверное способ не из лучших:


 TableKlients.First;
 TableFirm.First;
 While not TableKlients.Eof do
 begin
   TableKlients.Edit;
   TableKlientsReduction.Value := TableKlientsPrice.Value * (TableFirmAdd_Pay.Value * 0.01);
   TableKlients.Post;
   TableKlients.Next;
   TableFirm.Next;
 end;


Johnmen   (2005-11-18 09:27:00) [2]

>А в структуре TableKlients поле Reduction будет если открыть ее через Database Desktop?

Будет, если Database Desktop что-нибудь знает про твою программу...
:)


dolmat   (2005-11-18 09:18:00) [3]

А в структуре TableKlients поле Reduction будет если открыть ее через Database Desktop?


ЮЮ   (2005-11-18 05:28:00) [4]

>Нужно из таблицы TableFirm взять поле Add_Pay и вставить его в TableKlients умножив на соотв. коеф.

Из какой записи таблицы TableFirm? Или там только одна запись? Или для текущей? Или TableFirm и TableKlients связаны?

Кстати, судя по коду, TableFirm и TableKlients не таблицы, а сетки, в смысле TDBGrid, а таблицами принято называть TTable или сущности в БД


Fl@sh   (2005-11-18 04:31:00) [5]


> dolmat   (17.11.05 10:30) [7]
>
> а ежели так
> TableKlientsReduction.asFloat := roundto(TableFirmAdd_Pay.
> asFloat * 0.15,-2);


Всегда видает одинаковое значение 75 копеек, хотя должны быть разные!!


> ЮЮ ©   (17.11.05 04:59) [6]
>
> >Как, БД = Парадокс!!!
>
> И что в этом запросе таеого, что не поддерживается Local
> SQL?


А где задавать запрос?? У меня нет квери, чтоб писать ето прямо в SQL!!!


dolmat   (2005-11-17 10:30:00) [6]

а ежели так
TableKlientsReduction.asFloat := roundto(TableFirmAdd_Pay.asFloat * 0.15,-2);
Относительно roundto() я понял что здесь пеня рассчитывается.


ЮЮ   (2005-11-17 04:59:00) [7]

>Как, БД = Парадокс!!!

И что в этом запросе таеого, что не поддерживается Local SQL?


Fl@sh   (2005-11-17 02:22:00) [8]


> Использовать SQL примерно такого типа


Как, БД = Парадокс!!!


Fl@sh   (2005-11-17 02:21:00) [9]


> dolmat   (16.11.05 09:21) [1]


> TableKlients.fieldbyname['Reduction'].asvariant :=  TableFirm.
> fieldbyname['Add_Pay'].asvariant * 0.15;

Попробовал все равно Access Violation


Fl@sh   (2005-11-16 19:47:00) [10]


> dolmat   (16.11.05 09:21) [1]

Действительно я ступил..
Тип Reduction : Currency
     Add_pay : number


Johnmen   (2005-11-16 09:41:00) [11]

Почему же asvariant  ?????????? Чтобы поймать conversion error ?

AsFloat.


dolmat   (2005-11-16 09:21:00) [12]

>Помогите исправить ошибку
procedure TForm1.TableKlientsCalcFields(DataSet: TDataSet);
begin
TableKlients.fieldbyname['Reduction'].asvariant :=  TableFirm.fieldbyname['Add_Pay'].asvariant * 0.15;
end;

>или может есть лучшее решение?
Использовать SQL примерно такого типа
select TableKlients.*, (TableFirm.Add_Pay*0.15) as Add_Pay from TableKlients
left join TableFirm TableFirm on (TableKlients.поле_связи=TableFirm.поле_связи)


Наверх

Титульная страница Поиск, карта сайта Написать письмо