Обработка данных в Fr

NckNck
отредактировано 08:43 Раздел: FastReport 4.0
Здравствуйте, имеется вопрос, помогите пожалуйста!

После загрузки данных из БД, перед тем, как их выводить на печать в виде таблицы - их надо отредактировать
(значения части полей домножить на коэффициенты). Для этого:
1. В запросе Q1 создается временная таблица, в которой данные
редактируются.
2. Потом в запросе Q2 берем данные из временной таблицы.
3. временную таблицу удаляем:
begin
         Q1.Close;
         Q1.SQL.Clear;                            
         Q1.SQL.Add('Select Count(em.id) as cntemid, e.numcode as numcode, e.code as ename, k.name as katname, month(em.date) as M, year(em.date) as Y');
         Q1.SQL.Add('into #tT');           
         Q1.SQL.Add('from em');
         Q1.SQL.Add('left join exam e on (e.id=em.eid)');
         Q1.SQL.Add('left join k on (e.kid=k.kid)');             
         Q1.SQL.Add('Group by ename, katname, M, Y, NumCode;');
         Q1.SQL.Add('Update #tT set cntemid=4*cntemid where numcode=1001;');
         Q1.ExecSQL;                                                                            

         Q2.Close;
         Q2.SQL.Clear;
         Q2.SQL.Add('select * from #tT');
         Q2.ExecSQL; }                        
                                                         
         Q1.Close;
         Q1.SQL.Clear;
         Q1.SQL.Add('Drop table #tT');
         Q1.ExecSQL;                                                           
end.

Выдается ошибка: "The specified table, memo file or index file was unable to be opened. tT"

В чем ошибка подхода и как можно было бы решить задачу?

Комментарии

  • SSVSSV
    отредактировано 08:43
    Nck написал: »
    Здравствуйте, имеется вопрос, помогите пожалуйста!

    После загрузки данных из БД, перед тем, как их выводить на печать в виде таблицы - их надо отредактировать
    (значения части полей домножить на коэффициенты). Для этого:
    1. В запросе Q1 создается временная таблица, в которой данные
    редактируются.
    2. Потом в запросе Q2 берем данные из временной таблицы.
    3. временную таблицу удаляем:
    begin
             Q1.Close;
             Q1.SQL.Clear;                            
             Q1.SQL.Add('Select Count(em.id) as cntemid, e.numcode as numcode, e.code as ename, k.name as katname, month(em.date) as M, year(em.date) as Y');
             Q1.SQL.Add('into #tT');           
             Q1.SQL.Add('from em');
             Q1.SQL.Add('left join exam e on (e.id=em.eid)');
             Q1.SQL.Add('left join k on (e.kid=k.kid)');             
             Q1.SQL.Add('Group by ename, katname, M, Y, NumCode;');
             Q1.SQL.Add('Update #tT set cntemid=4*cntemid where numcode=1001;');
             Q1.ExecSQL;                                                                            
    
             Q2.Close;
             Q2.SQL.Clear;
             Q2.SQL.Add('select * from #tT');
             Q2.ExecSQL; }                        
                                                             
             Q1.Close;
             Q1.SQL.Clear;
             Q1.SQL.Add('Drop table #tT');
             Q1.ExecSQL;                                                           
    end.
    

    Выдается ошибка: "The specified table, memo file or index file was unable to be opened. tT"

    В чем ошибка подхода и как можно было бы решить задачу?
    по-моему нельзя в Q1 вставлять два запроса... в данном случае в него пихается и insert и update... и я бы поменял местами строки:
    Q1.SQL.Add('Select Count(em.id) as cntemid, e.numcode as numcode, e.code as ename, k.name as katname, month(em.date) as M, year(em.date) as Y');
    Q1.SQL.Add('into #tT');
  • NckNck
    отредактировано 08:43
    SSV написал: »
    по-моему нельзя в Q1 вставлять два запроса... в данном случае в него пихается и insert и update... и я бы поменял местами строки:
    Q1.SQL.Add('Select Count(em.id) as cntemid, e.numcode as numcode, e.code as ename, k.name as katname, month(em.date) as M, year(em.date) as Y');
    Q1.SQL.Add('into #tT');

    Спасибо :)

    В плане самого запроса - все ок. Я неправильно с датасетами работаю. Получается, что я удаляю таблицу, к которой Q2 обращается.
    И ошибка сообщает, что таблица занята. Только вот как от этого уйти...?
  • SSVSSV
    отредактировано 08:43
    Nck написал: »
    Спасибо :)

    В плане самого запроса - все ок. Я неправильно с датасетами работаю. Получается, что я удаляю таблицу, к которой Q2 обращается.
    И ошибка сообщает, что таблица занята. Только вот как от этого уйти...?
    а если перед DROP сделать Q2.Close

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.