Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 05:41   #1
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

Здравствуйте.
Вопрос следующий:
использую MySQL и Zeos.
вытаскиваю данные c помощью простых запросов на выборку.
связываю подчиненные с главной через MasterSource, например:

Код:
Организации:
id, name_full, id_street, num_dom......
Объекты:
id, id_org, id_type_obj, id_street, num_dom.....
Реквизиты:
id, id_org, inn, okpo, bank, inn_bank .....
Агентский договор:
id, id_org, num_contract......
добавляю на форму для редактирования подчиненных таблиц DBedit'ы, DBlookup'ы, DBcheckbox, DBNavigator.... и т.д.
в результате данные добавляются, редактируются, удаляются корректно.

но появилась задача отобразить такой набор данных:
Код:
SELECT 
  t1.id,
  t1.id_org,
  t5.name AS podch,
  t6.name AS rajon,
  t3.inn,
  t2.name_reduce,
  t4.name AS street,
  t2.jure_home_num,
  t2.jure_corps_num,
  t1.num,
  t1.date_reg,
  t1.validity_begin,
  t1.validity_end,
  t1.cost_heat,
  t1.cost_water,
  t1.cost_electric_energy,
  t1.amount_heat,
  t1.amount_water,
  t1.amount_electric_energy,
  (t1.cost_heat * t1.amount_heat + t1.cost_water * t1.amount_water + t1.cost_electric_energy * t1.amount_electric_energy) AS summ1,
  t1.mark_registr_contract,
  t1.mark_exist_dover,
  t1.date_return,
  t1.num_addit_agree,
  t1.date_addit_agree,
  t1.amount_correct_heat,
  t1.amount_correct_water,
  t1.amount_correct_electric_energy,
  (t1.cost_heat * t1.amount_correct_heat + t1.cost_water * t1.amount_correct_water + t1.cost_electric_energy * t1.amount_correct_electric_energy) AS summ2,
  t1.mark_finally_addit_agree,
  (t1.mark_registr_contract * ((t1.cost_heat * t1.amount_heat + 
t1.cost_water * t1.amount_water + t1.cost_electric_energy * 
t1.amount_electric_energy) + t1.mark_finally_addit_agree * (t1.cost_heat * 
t1.amount_correct_heat + t1.cost_water * t1.amount_correct_water +
 t1.cost_electric_energy * t1.amount_correct_electric_energy))) AS summ3,
  t1.note
FROM
  diplom.requisites t3
  INNER JOIN diplom.contract_agency t1 ON (t3.id_org = t1.id_org)
  INNER JOIN diplom.organizations t2 ON (t1.id_org = t2.id)
  INNER JOIN diplom.spr_street t4 ON (t2.jure_id_str = t4.id)
  INNER JOIN diplom.spr_rajon t6 ON (t2.id_rajon = t6.id)
  INNER JOIN diplom.spr_podch t5 ON (t2.id_podch = t5.id)
GROUP BY id
при этом редактировать мне надо только поля, которые принадлежат t1, остальные компоненты отображающие поля других таблиц READONLY := TRUE.....
возможно я сумбурно сформулировал вопрос, но очень прошу выручайте!

В результате вопрос: как выдернув данные из нескольких таблиц одним запросом, редактировать только часть, работает ведь при простой выборке....

И еще вопрос по ходу: может быть есть какой то способ сократить параметр summ3 в моей выборке, т.е. если вы приглядитесь там используются 2 предыдущих выражения, единственное перемножаются на флаги...

Последний раз редактировалось Stilet; 11.03.2011 в 08:29.
Adamrus вне форума Ответить с цитированием
Старый 11.03.2011, 08:50   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Редактировать нельзя скорее всего из-за наличия GROUP BY. Зачем оно кстати нужно в запросе?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.03.2011, 08:51   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
В результате вопрос: как выдернув данные из нескольких таблиц одним запросом, редактировать только часть, работает ведь при простой выборке....
сделать ЕЩЕ один запрос (и форму) с данными доступными для редактирования и соответствующими текущей позиции работать ТАМ.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.03.2011, 10:15   #4
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

to Аватар:
попробовал, та же ошибка

to evg_m:
прикрепил скриншот формы.
итак:
зеленый цвет - поля непосредственно t1
красный - из справочников "районы" и "подчинения" по id_org в t1
желтый - вычисляемые поля

ну, вот хоть убейся "заказчикам" нужно, чтобы на этой вкладке отображались данные подставляемые (район, подчинение, инн и т.п.) + редактировались поля t1
Изображения
Тип файла: jpg iss.jpg (175.1 Кб, 135 просмотров)
Adamrus вне форума Ответить с цитированием
Старый 11.03.2011, 11:18   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ну, вот хоть убейся "заказчикам" нужно, чтобы на этой вкладке отображались данные подставляемые (район, подчинение, инн и т.п.) + редактировались поля t1

если так надо раздели на два для одной формы
1. запрос на отображение. (поля только просмотра)
2. запрос на обновление/редакцию (поля для редакции).
и синхронное обновление запросов.

точнее раздели свои объекты показа. на эти два запроса.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.03.2011, 11:37   #6
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

to evg_m:
про 2 запроса я что то не допер ))) блин, аж стыдно =(
а по поводу вычисляемых полей что подскажите, так чтобы в summ3 еще раз не использовать предыдущие выражения в полной записи, т.е. заново не вычислять summ1 и summ2, участвующие в вычислении summ3/

абстрактно: summ3 = flag1 * (summ1 + flag2 * summ2)
Adamrus вне форума Ответить с цитированием
Старый 11.03.2011, 11:47   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

можно поробовать вложенные запросы (если СУБД поддерживает)
что-то вроде такого
select s1, sum(s1 +f2* s2)
from ( select sum(v1) as s1, sum(v2) as s2, f2
from .... )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обработать таблицу <table></table> и отобразить данные в программе? Человек_Борща Работа с сетью в Delphi 1 05.10.2010 15:42
нужна одно table где все rows from table 1 но и еще добавленных table 2 Why Помощь студентам 0 20.09.2010 10:29
Баги с Query и Table Toky БД в Delphi 3 15.12.2009 00:01
Размещение Query и Table на ftp:/ Селезень Работа с сетью в Delphi 6 27.04.2007 15:13
Копирование записи из Query в Table Rus_icH БД в Delphi 5 04.03.2007 02:56