Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2014, 23:04
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию SQLite, ExecSQL, Insert

Уже начинаю тохонько звереть от непонимания причины. Когда программа запущена вручную, то работает нормально, но когда запускается через реестр перестаёт писать в базу, сваливается на выполнении SQL запроса. Чтение старых данных происходит нормально. Такое ощущение, что база становится ReadOnly.
Код:
      if Assigned(sldb) then
      begin
        sldb.BeginTransaction;
        try
          St := AnsiString(Format('INSERT INTO maplog(date, ...'))); // обрезано для краткости
          // Не выполняется при запуске из реестра
          sldb.ExecSQL(St);
          sldb.Commit;
        except
          sldb.Rollback;
        end;
      end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #2  
Старый 24.06.2014, 11:31
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

От имени какого пользователя запускается из реестра? Права на запись в файл у него есть?
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #3  
Старый 24.06.2014, 15:12
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Пользователь один, права есть.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 24.06.2014, 16:04
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Пользователь точно тот же самый, а не NetworkService какой-нибудь? Каков конкретно текст ошибки?
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #5  
Старый 24.06.2014, 16:12
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Пользователь один. SQLite ошибок не даёт - гад, тупо не работает. Логирование каждой строки показало, что не отрабатывает ExecSql, да и только по автозапуску. При ручном запуске всё в норме.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 24.06.2014, 16:18
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от angvelem
SQLite ошибок не даёт - гад, тупо не работает.
Это больше похоже на саботаж try..except в коде или отсутствие вызова аналога RaiseLastSQLiteError в нужном месте. Какие компоненты для SQLite используются? Их можно потрассировать по исходникам на предмет подобной "закладки"?

Обработчик Application.OnException пустой?
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #7  
Старый 24.06.2014, 16:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот в блоке except и переходит на Rollback.
Никаких компонентов. Имеется в исходниках процедура RaiseError, но она в секции private. Также имеется функция SQLiteErrorStr и хотя она доступна, толку от неё никакого - требует числового кода ошибки, которого нет.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 24.06.2014, 16:27
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от angvelem
Вот в блоке except и переходит на Rollback.
Правильный блок должен выглядеть так:
Код:
try
  ....
except
  Rollback;
  ....
  raise;
end;
Это если не хочется заморачиваться с типами исключений и отлавливать конкретные. Пусть всплывает и обрабатывается на высшем уровне или показывается на экране, если обработчика нет.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #9  
Старый 24.06.2014, 16:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Freeman
Правильный блок должен выглядеть так:
Не хотелось "шуметь", но видно придётся.

Шаманство, не желает нормально работать при запуске из реестра.

Бред конечно, но по какой-то причине при запуске из реестра, не срабатывает глобальная переменная. Обидно на такую мелочь потерять время.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 24.06.2014 в 23:07.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter