Перейти к содержанию

Вопросы

Собственно, сабж в заголовке. Как? 

Пытаюсь использовать SQLite + FDConnection. 

  FDConnection.Params.Database:= TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'basename.db');

работает в основной форме, но вешает сервис...

Отредактировал Adm123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

если не секрет что можно делать в оффлайн базе ? сервисом ? 

если нужны какие либо действия  используйте  уведомления  на запланированое время  оно выскочит даже если приложение закрыто  юзер кликнет и  программа уже все выполнит

TNotificationCenter

Отредактировал master webs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Возможно проблема в System.IOUtils.TPath.GetDocumentsPath

Попробуйте прописать путь к базе константой. System.IOUtils.TPath.GetDocumentsPath - возвращает путь к папке "Мои документы" пользователя, а сервисы запускаются от своего пользователя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 минуту назад, master webs сказал:

если не секрет что можно делать в оффлайн базе ? сервисом ? 

Не секрет. Из нее можно брать условия для парсинга и складывать в нее результаты.

 

9 минут назад, dnekrasov сказал:

Возможно проблема в System.IOUtils.TPath.GetDocumentsPath

Спасибо, попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
24 минуты назад, dnekrasov сказал:

Возможно проблема в System.IOUtils.TPath.GetDocumentsPath

Попробуйте прописать путь к базе константой.

Увы, не помогло...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

setings.LoadFromFile(TPath.GetDocumentsPath + TPath.DirectorySeparatorChar +'seting.json');

я так подгружаю

сделайте проверку файла есть ли он там 

if FileExists(TPath.GetDocumentsPath + TPath.DirectorySeparatorChar +'seting.json') then

Отредактировал master webs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
20 минуты назад, master webs сказал:

сделайте проверку файла есть ли он там 

if FileExists(TPath.GetDocumentsPath + TPath.DirectorySeparatorChar +'seting.json') then

База по выбранному пути есть и из юнита основной программы нормально цепляется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
43 минуты назад, Adm123 сказал:
1 час назад, dnekrasov сказал:

Возможно проблема в System.IOUtils.TPath.GetDocumentsPath

Попробуйте прописать путь к базе константой.

Увы, не помогло...

Если файл базы лежит в документах пользователя - то сервис, возможно, просто не имеет прав доступа в эту папку. Попробуйте его переместить в папку общие документы (тогда можно будет использовать System.IOUtils.TPath.GetSharedDocumentsPath) или в какую-нибудь другую публичную папку.

 

20 минуты назад, master webs сказал:
1 час назад, dnekrasov сказал:

Возможно проблема в System.IOUtils.TPath.GetDocumentsPath

Попробуйте прописать путь к базе константой.

Увы, не помогло...

Полностью согласен, только одно маленькое дополнение - вместо TPath.GetDocumentsPath + TPath.DirectorySeparatorChar лучше использовать IncludeTrailingPathDelimiter(TPath.GetDocumentsPath)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

Да не в путях тут дело. Чтобы завис нормальный рабочий сервис достаточно просто кинуть ему на форму FDConnection. И ничего никуда не подключать, никак этот FDConnection не использовать...

Так что дело тут в использовании компонента. И вопрос остается открытым - как общаться с БД в сервисе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ищите другой вариант реализации например список задач выгружайте в json  в сервисе обрабатывайте  по завершению отправляйте уведомление что все сделано  и заносите изменения в базу уже в запущенном состояние потом опять также  создавайте список новых задач или одни и тек же крутите постоянно до определенного условия  бесконечны циклы вроде можно запустить и выйти с него так же можно

обрабатывать базу данных в сервисе большего извращения нет  так как размер может быть непредсказуем и вы просто сожрете все ресурсы на телефоне 

Отредактировал master webs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Размер как раз предсказуем и невелик. Но придется, похоже, так делать, через тот json

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Товарищи, вот у меня такой же вопрос, как в сабже.

Сервис работает в процессе приложения, должен собирать геокоординаты устройства и писать их в базу SQLite, которая используется и самим приложением, в том числе приложение работает с собранными координатами.

Подскажите пожалуйста, как обеспечить доступ к SQLite из программы и из сервиса, в какую папку базу лучше деплоить и как к ней из приложения и сервиса обращаться?

P.S.: Приложение работает с базой SQLite, но на устройстве базу найти не могу, ни в каталоге приложения, ни поиском по всему устройству. В чем фокус, может кто знает?

procedure TDM.conSQLiteBeforeConnect(Sender: TObject);
var
  dbPath: string;
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
  dbPath := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sdb');
{$ENDIF}
{$IF DEFINED(MSWINDOWS)}
  dbPath := TPath.GetFullPath(TPath.Combine(TPath.GetLibraryPath, '..\..\..\DataBase\mybase.sdb'));
  if not FileExists(dbPath) then
    dbPath := TPath.GetFullPath(TPath.Combine(TPath.GetLibraryPath, 'mybase.sdb'));
{$ENDIF}
  conSQLite.Database := dbPath;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Товарищи, вот у меня такой же вопрос, как в сабже.

Сервис работает в процессе приложения, должен собирать геокоординаты устройства и писать их в базу SQLite, которая используется и самим приложением, в том числе приложение работает с собранными координатами.

Подскажите пожалуйста, как обеспечить доступ к SQLite из программы и из сервиса, в какую папку базу лучше деплоить и как к ней из приложения и сервиса обращаться?

P.S.: Приложение работает с базой SQLite, но на устройстве базу найти не могу, ни в каталоге приложения, ни поиском по всему устройству. В чем фокус, может кто знает?

 

UPDATE:

Я нашел решение, отписался в этой ветке.

procedure TDM.conSQLiteBeforeConnect(Sender: TObject);
var
  dbPath: string;
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
  dbPath := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sdb');
{$ENDIF}
{$IF DEFINED(MSWINDOWS)}
  dbPath := TPath.GetFullPath(TPath.Combine(TPath.GetLibraryPath, '..\..\..\DataBase\mybase.sdb'));
  if not FileExists(dbPath) then
    dbPath := TPath.GetFullPath(TPath.Combine(TPath.GetLibraryPath, 'mybase.sdb'));
{$ENDIF}
  conSQLite.Database := dbPath;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Вадим Смоленский
      Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption  (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {"
      Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
       
    • От x11
      При попытке подключиться к базе данных SQLite на эмуляторе с Android  7 получаю исключение:
      Delphi Tokyo + UniDAC 7.
      Эмулятор какой-то неполноценный?
    • От brunnengi
      Здравствуйте.
      Требуется программа на андроид с набором кнопок со следующем функционалом:
      1. Кнопка1 - создать базу в test.sqlite (в том месте где доступ к нему есть только у самого приложения (имею ввиду если это не ROOT телефон, при рут и так всё понятно)
      2. Кнопка2 - создать таблицу в базе test.sqlite с названием "TblTest01" (с разным набором полей на своё усмотрение)
      3. Кнопка3 - создать таблицу в базе test.sqlite с названием "TblTest02" (с разным набором полей на своё усмотрение)
      4. Кнопка4 - Добавить строку в таблицу "TblTest01" (любой набор данных на ваших усмотрение)
      5. Кнопка5 - Удалить строку в таблице "TblTest01" (по любому ключу на ваше усмотрение)
      6. Кнопка6 - Изменить строку в таблице "TblTest01" (по любому ключу и любое значение на ваше усмотрение)
       
      Приложение должно иметь фоновый сервис, который должен получать данные с сервера и добавлять их в базу test.sqlite в таблицу "TblTest02".
      При получение новый данных, сервис должен показать в "шторке" сообщение, по клику на которую открывается само приложение с визуальной частью.
      Т.е. если визуально приложение закрыто, выгружено, не запущено или запущено, фоновый процесс должен сам делать запросы к серверу и добавлять новые данные в базу, если они есть/поступили
      Приложение должно запускаться вместе с системой, после перезагрузки и т.д.
      Использовать только те компоненты что доступны в самой среде из коробки.
      Часть где делается запрос к серверу должен иметь timeout равный 20 секундам.
      Сервис должен грамотно делать запросы к серверу как положено в Андроид приложениях. 
      Серверная часть мне не нужна, можете для теста сами эмулирвать эти процессы.
       
       
      -----
      ЦЕНА: 2500р.
      СРОКИ: Не горит, но в целом где то дней 7 есть
      Перечисляю на QIWI, ЯД, Сбербанк, короче куда скажите.
    • От x11
      На основе нескольких тем форума сделал службу перехвата звонков и номера телефона.
      http://fire-monkey.ru/topic/3878-статьякак-создать-простой-android-broadcast-receiver-how-to-implement-simplest-android-broadcast-receiver-in-delphi/
      http://fire-monkey.ru/topic/2386-перехват-события-звонка/
      http://fire-monkey.ru/topic/2972-использование-нативных-localbroadcastmanager-и-broadcastreceiver/
      Покритикуйте пожалуйста. Уверен, что не всё правильно.
      Но что до ума не удалось довести, так это то, как правильно останавливать службу и закрывать приложение.
      Проект (для Токио) приложил теме.
      Заранее благодарен.
       
      BR2.rar
    • От notricky
      Суть вопроса в заголовке.
      Есть ли какие-то настройки у базы или FireDAC чтобы в английской системе (винда 7) русский текст отображался не вопросами, а русским текстом?
      Настройки у БД UTF-8.
    • От Clio
      Добрый день !
      В приложении я использую базу SQLite (полt, содержащие дату и время тип REAL) . В TFDQuery я описал это поле - тип Float и через LiveBindings подключил к TGrid (Date Column). 
      Но в гриде отображается только год, а не полное время. 
      Подскажите, пожалуйста, как необходимо настроить поле в Query и TGrid, чтобы дата и время отображалась правильно.
    • От Олег Киреев
      Здравствуйте ребята. Моё имя Олег. Я из Минска.
      Подскажите пожалуйста. У меня есть приложение для OS Android представляющее собой базу данных в котором задеплоин файл БД SQLite. Хотелось бы пойти дальше и изучить как обновлять этот файл базы на этом приложении из удалённого сервера простора INTERNET. Может у кого есть готовое решение или ссылка где это подробно описано?
      Благодарю.
      С Уважением. Олег.
    • От notricky
      Собственно как это делают люди?

      Речь, конечно, не про выполнение скрипта "update table set...", а про использование Edit/Post с изменением как в Датасете, так и в БД.

      Какие нужны настройки, в частности у TFDQuery.
      // настройки qr.UpdateOptions = [KeyFields = id][UpdateChangedFields = true] // при этом селект не смотрит напрямую в theTable, но id - это поле theTable qr2.UpdateOptions.UpdateTableName := 'theTable'; qr2.Edit; qr2.FieldByName('Str').Value := Format('%s-%d',[qr2.FieldByName('Str').AsString, Code]); qr2.Post; В такой форме позволяет менять датасет, но в БД данные не скидываются. БД SQLite.
    • От M1shQa
      Подкинуло начальство  задачку, да не простую. Приложение должно в фоне мониторить gps, собирать данные о батарее, логировать и потом сливать на сервер. Все это будет нащадно жрать батарею, понимаю, но начальству нужен именно этот вариант. Перейду к вопросам:
      1.Нужно пилить сервис, но исходя из прошлых тем - таймер не работает, слипы не вариант, как сделать так, чтоб сервис просыпался каждые 5 минут/15 минут/ 1 час ?
      2.Мониторинг GPS, тут решение вроде нашел в этой ветке для seattle, как лучше всего собирать и хранить данные для отправки? (до этого все сохранял в простых .txt)
      3.Работают ли компоненты indy корректно в сервисе? срабатывают ли except'ы и как правильно мониторить подключение к сети? 
      Проблема еще и в том, что программа должна работать более менее стабильно и если опыт написания простых приложений у меня есть, то с сервисами уже пару месяцев не могу подружиться..
      Всем бобра!
    • От Bio HaZaRD
      Всем привет!
      Пишу проект на основе FireDac (TFDConnection, TFDQuery) + SQLite. На ПК с IDE программа запускается, а на других - нет. На ПК, без IDE, стоят все обновы.
      Помогите разобраться, где проблема или посоветуйте другой компонент, который поддерживает SQLite. Заранее спасибо!
       
      Примечания к файлу:
      Windows-Problemberichtserfassung = Windows Problem Reporting

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...