Конференция "Начинающим" » Запрос по соединению данных. [D7, FireBird 1.5]
 
  • Xmen (24.03.08 06:45) [0]
    Привет мастерам.
    У меня возникла такая проблема даже незнаю как описать. Такесть у меня 2 таблицы мастер(1)-детал(1). В одном список документов а втором кому этот документ назначен для прочтения. Нужно сделат такой запрос чтобы в одной строке был данные с мастер таблицы и в конце одном поле показывал бы данные с второй таблицы.
    1 табл.
    ID            Doc_name                    Doc_Date              Doc_type
    ---------------------------------------------------------------
    1              письмо1                     21.03.2008             письмо
    2              приказ1                     22.03.2008             приказ
    3              письмо2                     22.03.2008             письмо

    2 табл.
    ID             Main_id              FIO                        Content
    ---------------------------------------------------------------
    1                 1                Петров А.С.           на расмотрение
    2                 2                Ким Л.А.               на выполнение
    3                 2                Иванов Н.Н.          на выполнение
    4                 2                Попов Р.Д.            на рассмотрение
    5                 3                Иванов Н.Н.          для ознакомления

    результат должен быт такой
    ID  Doc_name     Doc_date          FIO_Content
    2  приказ1        22.03.2008        Ким Л.А. на выполнения,         Иванов Н.Н. на выполнения, Попов Р.Д.  на рассмотрения
  • Johnmen © (24.03.08 09:00) [1]
    Пиши ХП.
  • Sergey13 © (24.03.08 09:02) [2]
    ИМХО, без хранимой процедуры никак.
    Вот только стОит ли стараться? Если "поле" получится очень большим начнутся проблемы с отображением.
  • Sergey13 © (24.03.08 09:05) [3]
    +
    Я так понимаю это документооборот какой то?
    У каждой записи второй таблицы могут (даже должны) быть свои даты. Иначе весь учет теряет смысл без хронологии.
  • Sergey13 © (24.03.08 09:08) [4]
    +
    И отправитель еще должен быть во второй таблице.
  • Xmen (24.03.08 09:41) [5]
    Да это так это таблица для документооборота, а как это реализовать в ХП я еще не исползовал их. Обясните это в примере если возможно. так как это прого для дипломной работе то испольнителе могут быть макс 5 чел, разумеется в приделах 255 символов для отображения. Это строка нужно для ввода в отчет.
  • Sergey13 © (24.03.08 10:08) [6]
    > [5] Xmen   (24.03.08 09:41)
    > так как это прого для дипломной работе то испольнителе могут быть макс 5 чел

    Это неправильно - писать по разному для диплома и не для диплома. Пиши всегда правильно - меньше путаться придется. Кроме того - завалят ведь на защите диплома, если в комиссии не круглые идиоты будут. Скажут - чему ж мы тебя учили то 5 лет?

    > а как это реализовать в ХП я еще не исползовал их

    На сайет ibase.ru много всякого материала по ИБ/ФБ.
  • Xmen (24.03.08 10:15) [7]
    а можно это то что я спрашевал в FastReporte реализовать. У меня отчете там выходять, както видел что там тоже есть свой язык программирования или это уже сложно.
  • Sergey13 © (24.03.08 10:23) [8]
    > [7] Xmen   (24.03.08 10:15)

    Можно В ФР. Перед печатью бенда заполняешь вручную переменную чем угодно.

    Но неправильно это.
  • Xmen (24.03.08 10:36) [9]
    да тогда покажите простую путь примером. Пожалуйста...
  • Xmen (24.03.08 15:14) [10]
    Сделал так но выдал ощибку, не понял где сделал ощибку

    CREATE PROCEDURE PR1 (
       main_id integer)
    returns (
       pr_date varchar(255))
    as
    declare variable pr_date1 varchar(55);
    begin
     /* Procedure Text */
     pr_date = '';
     for select e.executor_id||' '||e.control_date
     from incoming_executor e
     where e.incoming_id=:main_id
     into :pr_date1
     do
      begin
        if (:pr_date1 is not null) then pr_date = pr_date +  :pr_date1;
      end
     suspend;
    end
  • Правильный_Вася (24.03.08 15:34) [11]

    > выдал ощибку

    ждем текст ошибки
  • Xmen (24.03.08 15:41) [12]
    Текс такой
    Unsuccessful execution caused by a system error that precludes
    successful execution of subsequent statements.
    Dynamic SQL Error.
    expression evaluation not supported.
  • Правильный_Вася (24.03.08 15:45) [13]
    сделай явное приведение типов здесь:
    e.executor_id||' '||e.control_date

  • Правильный_Вася (24.03.08 15:45) [14]
    хотя ошибка, похоже, при неправильном вызове процедуры
  • Xmen (24.03.08 15:49) [15]
    если я сделал
    e.executor_id
    все равно такая ощибка
  • Правильный_Вася (24.03.08 15:55) [16]
    какие типы полей?
    как вызываешь ХП?

    > pr_date +  :pr_date1;

    операция + не определена для строковых типов
  • Xmen (24.03.08 15:59) [17]
    я же вверху писал с ХП незнаком просто гдето посмотрел код ХП и для себя настроил. как нужно сделать правильние
  • Правильный_Вася (24.03.08 16:15) [18]

    >  с ХП незнаком

    ознакомься, это не долго
  • Xmen (25.03.08 15:50) [19]
    This operation is not defined for system tables.
    unsuccessful metadata update.
    STORE RDB$PROCEDURES failed.
    lock conflict on no wait transaction.
    attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_21".

    Что это за ошибка?
  • Johnmen © (25.03.08 16:14) [20]

    > Что это за ошибка?

    На чём?
 
Конференция "Начинающим" » Запрос по соединению данных. [D7, FireBird 1.5]
Есть новые Нет новых   [134434   +26][b:0][p:0.001]