![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Данные из другой таблицы * коеффициент [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.поле_связи)