Конференция "Базы" » Временные файлы при выполнении SQL запроса [D7, Paradox]
 
  • zerohold (13.05.08 21:23) [0]
    Подскажите.
    Использую стандартный компонент TQuery для выполнения SQL запроса, работаю с базой paradox.
    Проблема в том, что после каждого выполнения запроса формируется временный файл и не удаляется. При накоплении 48 файлов (ограничение в настройках BDE Admin) появляется FatalError.
    Увеличение количества файлов явно не правильное решение потому как запросов может быть больше.
    значит чего делаю?
    [code]
    procedure ...
    SQL=TQuery.Create(nil);

    // сам запрос простой
    SELECT t.ID, t.Name, t.Phones, t.Site, t.Email, t.Address, t.ModeWorks, t.IDSection, t.IDKind, t.IDCity, t.Priority, t.Rating FROM "company.db" t ORDER BY Priority DESC, Rating, Name
    поля только char, integer и float
      SQLs.DatabaseName:=PathData;                                                  
      SQLs.SQL.Clear;
      SQLs.SQL.Add(SQL_text);                                                         try
         SQLs.ExecSQL;
      except
         on EDBEngineError do AddLogFile(NameErrorFile,'Error SQL. procedure SQL_Run; Text SQL: '+SQL_text);
      end;
      SQLs.Active:=True;                              
      SQLs.First;                                          

    ....
    SQL.Free;

    [/code]
    я вот думаю может чего из-за сортировки такой сложной ?
  • Виталий Панасенко(дом) (13.05.08 22:15) [1]
    а PrivateDir у Session не пробовал настроить ?
  • zerohold (13.05.08 22:22) [2]
    Session вообще не использую.. я бы указал
    убрал из запросов
    ORDER BY
    файлы временные перестали появляться и все заработало.
    Как только добавляю ORDER by снова начинается глюки.
  • Loginov Dmitry © (14.05.08 00:33) [3]
    >     SQLs.ExecSQL;
    >  except
    >     on EDBEngineError do AddLogFile(NameErrorFile,'Error
    > SQL. procedure SQL_Run; Text SQL: '+SQL_text);
    >  end;
    >  SQLs.Active:=True;  


    Временные файлы появляются и не удаляются только при ошибках, и то далеко не всегда.
    У тебя же здесь по истине пляски с бубном!

    А вот это:

    >  except
    >     on EDBEngineError do AddLogFile(NameErrorFile,'Error
    > SQL. procedure SQL_Run; Text SQL: '+SQL_text);
    >  end;


    диверсия. Лучше вообще без except..end. Как можно прятать оригинальное сообщение об ошибке?!
  • Виталий Панасенко(дом) (14.05.08 11:04) [4]

    > zerohold   (13.05.08 22:22) [2]
    >
    > Session вообще не использую.. я бы указал

    Враки... Эта переменная присутствует, даже если ты и не "кинул" компонент.. Точно так же, как и Application...Так и называется - Session..
  • MsGuns © (14.05.08 12:16) [5]
    >Виталий Панасенко(дом)   (14.05.08 11:04) [4]
    >.. даже если ты и не "кинул" компонент..

    Его и не нужно "кидать" без крайней необходимости
  • Виталий Панасенко(дом) (14.05.08 12:35) [6]

    > MsGuns ©   (14.05.08 12:16) [5]

    Не спорю.. С прошедшим...:-)
  • Виталий Панасенко(дом) (14.05.08 13:04) [7]
    Удалено модератором
  • Amoeba © (14.05.08 13:09) [8]

    > // сам запрос простой
    > SELECT t.ID, ...

    >   SQLs.DatabaseName:=PathData;                          
    >                        
    >   SQLs.SQL.Clear;
    >   SQLs.SQL.Add(SQL_text);                              
    >                           try
    >      SQLs.ExecSQL;


    ExecSQL при запросе SELECT? Слов на такое нет, одни буквы.
  • zerohold (22.05.08 12:18) [9]

    > Loginov Dmitry


    > диверсия. Лучше вообще без except..end. Как можно прятать
    > оригинальное сообщение об ошибке?!

    Видимо вы мало работали с клиентами. Такого рода ошибки они явно не любят. Они вызывают катастрафическое "ААААаааа, все пропало" лучше прятать их, и потом смотреть в тихоря логи. Спокойней живется. Потому как все равно заставить клиента прочитать нормально код ошибки и его содержание это все равно что слона заставить говорить по тибетски.


    > MsGuns ©  

    Абсолютно в дырочку... Session кидается автоматом и кидать ее принудительно не обязательно. Поэтому никогда этого не делал.


    > Amoeba

    Каюсь, виновен. CopyPast проклятый, не увидел очевидной вещи :(( дааа, но такое в нашей программной практике не редкость, бывает + с - перепутаешь в сложной формуле и тогда долго  и очень долго ищешь что не так.

    Тему можно закрыть
    Исправил на SQLs.Open - все пошло и работает нормуль.
    Спасибо всем
  • Loginov Dmitry © (22.05.08 22:30) [10]

    > Такого рода ошибки они явно не любят.


    Больше они не любят, когда их дурят.


    > Они вызывают катастрафическое "ААААаааа, все пропало" лучше
    > прятать их, и потом смотреть в тихоря логи.


    Бред. Полный. Лучше сообщить о них пользователю, чтобы пользователь дал знать о проблеме. Если он не будет о ней знать, то не сможет сообщить своевременно. А вот когда на пару-миллионный оборот пропадут данные, тогда будешь ему объяснять, что хотел "как лучше".


    > Потому как все равно заставить клиента прочитать нормально
    > код ошибки и его содержание это все равно что слона заставить
    > говорить по тибетски.


    Обязательно дублируй сообщение об ошибке в логах. Среднестатисчического оператора ты естественно не заставишь прочесть лог, приведенный на английском языке (скорее всего, и на русском языке оператор тоже прочесть не сможет, так как в 80% случаев он нажмет по привычке на <Enter> или <Escape>, никогда не читая, что ему напишешь, это не лечится).


    > Видимо вы мало работали с клиентами.


    Куда уж мне!
  • Loginov Dmitry © (22.05.08 22:39) [11]
    > Обязательно дублируй сообщение об ошибке в логах.


    Даже если оператор неспособен сообщить администратору об ошибках программы (а это бывает очень часто, гдето в 80%), то потом начнут делать сверку, и обнаружат несхождения, с причинами которых помогут разобраться корректные логи. А то что ты предлагаешь:


    >  except
    >     on EDBEngineError do AddLogFile(NameErrorFile,'Error
    > SQL. procedure SQL_Run; Text SQL: '+SQL_text);
    >  end;


    это диверсия, которая рано или поздно заявит о себе (лучше рано). Почему это диверсия, думаю, не стоит объяснять человеку, который много работал с клиентами.
  • Игорь Шевченко © (22.05.08 23:05) [12]

    > Видимо вы мало работали с клиентами. Такого рода ошибки
    > они явно не любят. Они вызывают катастрафическое "ААААаааа,
    >  все пропало" лучше прятать их, и потом смотреть в тихоря
    > логи. Спокойней живется. Потому как все равно заставить
    > клиента прочитать нормально код ошибки и его содержание
    > это все равно что слона заставить говорить по тибетски.


    Какие-то у тебя неправильные клиенты. Ты их меняй скорее, от них добра не будет
 
Конференция "Базы" » Временные файлы при выполнении SQL запроса [D7, Paradox]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]