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

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

Взять значение поля с другой таблицы [D6, dBase, FoxPro]


Bolat ©   (2004-09-16 13:53:00) 

Дорогие мастера!!!
есть две таблицы (dbase III) один из них справочник с несколькими сотен видов материалов. Поля: код, наименование материала, стоимость.
В другой таблице тоже несколько полей в том числе и код материала и вычисляемые поля.
Так вот для вычисление одного из полей нужно следующие данные:
потребность * на стоимость материала, код которого введен в этой таблице.


Sergey13   (2004-09-22 09:53:00) [1]

2[9] RavenD   (22.09.04 09:15)
1.А зачем нужны запросы возвращающие 150000 записей?
2.Если через лукап TTable связывать 2 таблицы по 150000 записей, то конца связывания можно и не дождаться. Тем более с ф/с системой по сети.


RavenD   (2004-09-22 09:15:00) [2]

>Sergey13
ну в 2 ни 2 но в в 1.5 это точно, становится заметно особенно на больших объемах, особенно при связках нескольких табл где в каждой больше 150 000 записей, а это уже кое что


Sergey13   (2004-09-16 16:52:00) [3]

2[6] RavenD  
Тебе бы хелпы писать.
Вот только утверждение

>но.. к сожалению с файл-серверной системой медленно (во всяком случае медленее чем 2 способ в 2 раза)

так скажем спорно, как минимум


Bolat   (2004-09-16 16:35:00) [4]

Ravend i Sergey bolshoe vam spasibo!!


RavenD   (2004-09-16 16:18:00) [5]

как было сказано есть 2 варианта решения данной проблемы
I) через TQuery при помоще запроса, очень гибко, удобно но.. к сожалению с файл-серверной системой медленно (во всяком случае медленее чем 2 способ в 2 раза)
a) select * from Рабочая, Справочник
  where Справочник.Code = Рабочая.Code (но есть ньюансы объединения таблиц, читай help по SQL)
b) в TQuery создаешь поле Calculate и читай ниже.
II) через TTable (значительно быстрее, но менее гибко любые изменения в ТЗ потребую коренной переделки связки).
Для начинающего по шагам,
 a) вешаешь 2 TTable (Справочник, Рабочая) и настраиваешь на свои таблицы
 b) в Рабочей создаешь новое поле (контекстное меню -> New), тип поля Lookup, там 4 параметра (имя таблицы которую прикручиваем, 2 поля по которым вяжем, и поле которое вытаскиваем) наверху слева укажешь имя и тип, в результате ты имеешь в своей Рабочей табле значения из Справочника
 c) если тебе ещё требуются какието расчеты с этими полями, создаешь в Рабочей ещё нужное количество полей, только теперь ставишь Calculate, имя и тип
 d) на TTable выбираешь событие OnCalculate (не помню транскрипцию), и там уже пишишь свою арифметику типа:
  fieldCalc.AsFloat := fieldLookup.AsFloat * 10;


Sergey13   (2004-09-16 15:33:00) [6]

Так и ты протяни чего нибудь. 8-)
Например компоненты доступа.
Или расшифруй
>Так вот для вычисление одного из полей


Bolat   (2004-09-16 15:23:00) [7]

:))
net serezno pomogite nachinayushemu, protyanite ruku tak skazat'


Sergey13   (2004-09-16 15:05:00) [8]

Там сначала 2 строки по русски от себя (от меня в смысле), а потом 3 стоки на SQL.
8-)


Bolat   (2004-09-16 14:59:00) [9]

ya kajetsya nemnogo ne ponyal etogo zaprosa chto est chto tut?
:))


Sergey13   (2004-09-16 14:18:00) [10]

Либо насторить лукап поле "стоимость", либо (лучше) написать запрос с этим полем
типа
select m.*,s.stoim
from main_table m,sprav_table s
where m.id_mat=s.id


Наверх

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