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

Как вшить БД в приложение для Win32/64?

Вопросы

Делаю кросс-платформенное прилоежние - на Android работает, на Windows: not such table

Как сделать так, чтобы на других ПК работало приложение с БД? 

post-1887-0-88709000-1450029207_thumb.pn

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


Ссылка на сообщение

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

  • 0

никак

куда должен компилятор "паковать" эти файлы?

в андроиде apk - это простой zip, и туда много что входит

в windows аналогом будет являться msi

но созданием этого пакета занимаются другие программы

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


Ссылка на сообщение
  • 0

меняй путь к базе руками ибо если она у тебя лежит в проекте то при сборке программы она помещает exe-шник в папку win32\debug или release в зависимости от того что компилировал. а соответственно там нет твой базы лежащей в корне проекта. ну или по другому, я в настройках проекта указал что бы сборка шла в папку с исходниками и все работает. 

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


Ссылка на сообщение
  • 0
 procedure TDM1.FDConnection1BeforeConnect(Sender: TObject);
    begin
 
      {$IFDEF DCC}
      {$IFDEF MSWINDOWS}
 
      FDConnection1.Params.Values['ColumnMetadataSupported'] := 'False';
      FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), 'baza.sqlite');
      FDConnection1.Params.Add('SharedCache=False');
      FDConnection1.Params.Add('LockingMode=Normal');
 
      // FDConnection1.Params.Values['Password'] := '52V11aP7_bYnl_VHDXfN|U]F<*^{4,S}1]m5>Ss5a2|!vOhp(o-CW^7=5\DHW4S';
      // FDConnection1.Params.Values['NewPassword'] := '52V11aP7_bYnl_VHDXfN|U]F<*^{4,S}1]m5>Ss5a2|!vOhp(o-CW^7=5\DHW4S';
      // FDConnection1.Params.Values['Password']    := '';
      // ShowMessage(TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), 'baza.sqlite'));
 
      {$ENDIF}
      {$IFDEF ANDROID}
 
      FDConnection1.Params.Values['ColumnMetadataSupported'] := 'False';
      FDConnection1.Params.Values['Database']                := TPath.Combine(TPath.GetDocumentsPath, 'baza.sqlite');
      FDConnection1.Params.Add('SharedCache=False');
      FDConnection1.Params.Add('LockingMode=Normal');
      // FDConnection1.Params.Values['Password'] := '52V11aP7_bYnl_VHDXfN|U]F<*^{4,S}1]m5>Ss5a2|!vOhp(o-CW^7=5\DHW4S';
 
      {$ENDIF}
      {$IFDEF MACOS}
      {$IFDEF IOS}
 
      FDConnection1.Params.Values['ColumnMetadataSupported'] := 'False';
      FDConnection1.Params.Values['Database']                := TPath.Combine(TPath.GetDocumentsPath, 'baza.sqlite');
      FDConnection1.Params.Add('SharedCache=False');
      FDConnection1.Params.Add('LockingMode=Normal');
      // FDConnection1.Params.Values['Password'] := '52V11aP7_bYnl_VHDXfN|U]F<*^{4,S}1]m5>Ss5a2|!vOhp(o-CW^7=5\DHW4S';
 
      {$ELSE}
 
      FDConnection1.Params.Values['ColumnMetadataSupported'] := 'False';
      FDConnection1.Params.Values['Database']                := TPath.Combine(TPath.GetDocumentsPath, 'baza.sqlite');
      FDConnection1.Params.Add('SharedCache=False');
      FDConnection1.Params.Add('LockingMode=Normal');
      // FDConnection1.Params.Values['Password'] := '52V11aP7_bYnl_VHDXfN|U]F<*^{4,S}1]m5>Ss5a2|!vOhp(o-CW^7=5\DHW4S';
 
      {$ENDIF}
      {$ENDIF}
      {$IFDEF LINUX}
      {$ENDIF}
      {$ENDIF}
      {$IFDEF FPC}
      {$ENDIF}
 
    end;
 
Пароль на sqlite устанавливается так
NewPassword

Specifies a new password for a database and performs an encryption operation:

  • To encrypt an unencrypted database, specify the non-empty NewPassword and empty Password;
  • To decrypt an encrypted database, specify the empty NewPassword and non-empty Password;
  • To change an encrypted database password, specify the non-empty NewPassword and non-empty Password.

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


Ссылка на сообщение

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

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

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

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

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

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

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

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


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

    • От Женя
      В визуал студии в Xamarin есть такой класс -Java.Security.KeyStore Class, этот класс(как я понял) отвечает за подключение к хранилищу ключей  андроида,короче говоря Android keystore system .
      А вот как  достучаться до этой функции  в с++builder ?Я хочу сделать привязку  приложения  через  Android keystore system ,а как это сделать в Rad  студии не знаю
    • От SIARHEI RAHOUSKI
      Здравствуйте, у меня возник вопрос Как базу данных подключить к TGrid? Я использую Delphi XE3 и База данных Accsess: ADOConnection + ADOQuery + DataSource. И вот как отобразить в TGrid Таблицу бд ?
    • От Volodja
      Здравствуйте. 
      Пишу на Delphi 7. В принципе нет сложностей с Delphi 10 для Win32.
      Необходимо написать небольшую программку для Android (через Delphi 10 и FierMonkey). Функциональность совсем простенькая: запрос к БД, отображение на экране 3-4 полей, нажатие на запись - обновлений записи в БД (установка снятие bit). 
      Подключение к БД сделал через DataSnap. С запросами к БД проблем нет, все работает без ошибок. С интерфейсом беда. Использую TGrid (описан как мультиплатформный). Долго боролся с заполнением грида - поборол. Но работает очень медленно, подлагивает, в общем работать, совсем некомфортно. 
      Вопрос. Подскажите, какой выбрать компонент(ы) для реализации указанной функциональности. Такое ощущение, что TGrid на Androide вообще не используют. С пулом компонентов FireMonkey практически не знаком. Одноименные с Delphi 7 компоненты ведут себя не предсказуемо. Списки параметров, свойств и методов по-большому не совпадают. Просто теряюсь. Прошу помощи.
    • От Макс Войтенко
      var Keyboard: IFMXVirtualKeyboardService; begin if TPlatformServices.Current.SupportsPlatformService( IFMXVirtualKeyboardService, IInterface( Keyboard ) ) then if TVirtualKeyboardState.Visible in Keyboard.GetVirtualKeyBoardState then ShowMessage( 'клавиатура открыта' ) else ShowMessage( 'клавиатура скрыта' ); end; ТАК Я на шел для делфи. Но мне нужно для C++
    • От Pulsarius
      Здравствуйте, Ярослав! Скажите, пожалуйста, есть ли какая либо информация о планах поддержки Linux в C++ Builder? Нашей компании очень подходит RAD Studio для наших целей и быстрой разработки. Планируем приобрести лицензию. В ближайшее время планируем разрабатывать наше решение для Windows, macOS и Android, пока этого достаточно. Но есть некоторые сомнения о выборе RAD Studio и всё из-за того, что примерно через год потребуется наше решение реализовать и для Linux. Какова вероятность, что C++ Builder обзаведётся поддержкой Linux'а в течении 1 - 1,5 года? Delphi не рассматриваем. Заранее спасибо за ответ.
    • От Pulsarius
      Здравствуйте! Очень нужна помощь с TIdTCPServer или возможно моя задача решается каким-то другим компонентом или библиотекой. В общем, мне нужно получить с сокета не только данные, но и весь пакет целиком, т.е. со всеми TCP и IP заголовками. Возможно ли сделать это через TIdTCPServer? Конечно можно на C++ самостоятельно реализовать TCP/IP стек, но не хотелось бы терять на это время и "изобретать велосипед" в очередной раз. А конкретнее мне нужно получить весь TCP/IP пакет с заголовками и данными, запаковать его ещё в PPP и отправить на COM порт, чтобы добиться некого аналога виндового стандартного телефонного модема (Dial In). Буду благодарен за какую-либо помощь!
    • От Pulsarius
      Всем привет! Кто-нибудь может подсказать как можно удалить ссылку в проекте на неиспользуемую статичную либу, чтобы она не линковалась к исполняемому файлу? Обыскал всё в настройках проекта, так и не смог найти. Дело в том, что я как-то в FMX проекте использовал невизуальный VCL компонент, добавленный через дизайнер форм. Потом я его удалил, но линковщик всё равно линкует в exe-шник библиотеки типа vcl.lib, vclx.lib, что абсолютно напрасно увеличивает размер исполняемого файла.
    • От Pulsarius
      Здравствуйте!
      Может кто-нибудь уже проходил через подобное и знает как это реализовать и подскажет. Мне нужно программно создать виртуальный модем и входящее подключение через него. Ну или хотя бы через командную строку. Пробовал через RAS API, но получается не то, что мне нужно. Вот визуализация того, что мне нужно проделать:
       
    • От MolarMak
      Всем доброго времени суток, столкнулся с такой проблемой, на определенной форме включается медиаплеер и начинает проигрывать определенный трек, но при блокировке трек продолжает играть. Как обработать событие блокировки экрана и по нему отключать медиаплеер? Пишу на c++ builder.
      Пробовал делать через EnteredBackground, руководствовался заметкой по написанию подобного на Delphi xe http://delphifmandroid.blogspot.com/2013/10/blog-post.html
      Возможно есть другие варианты решения?
    • От Axbor
      Очень не хватает примеров на C++. Решил поделится опытом.
      Рассмотрим создание собственного "ListBoxItem"а на C++.
      И так начнем.
      Для начало создадим стиль для нашего "ListItem"а. В моем случае оно выглядит так:

      Структура выглядеть следующим образом:

      А вы сразу можете создать собственный стиль.
      Создадим класс для нашего "Item"а. Я назвал его TMyListBoxItem.
      Нужно знать следующие вещи:
      ApplyStyle() вызывается когда стиль загружен.
      FreeStyle() когда стиль выгружен.
      GetDefaultStyleLookupName() когда стиль не задано берется названые стиля по умолчанию.
      FindStyleResource("стиль") ищет в стиле ресурс с заданным названием.
       
      ListBox автоматически очищает из невидимых "Item"ов стиль что бы избежать от расходы на память. И заново загружает когда оно видимо. При этом вызывается соответствующие функции приведенные выше
       
      я приведу только некоторые кусочки кода. Остальное всё можете посмотреть в прикреплённых файлах.
      class TMyListBoxItem : public TListBoxItem { private: // Переменные для хранения данных System::UnicodeString FTimeTo; System::UnicodeString FTimeFrom; //.... // Визуальные компоненты TText* FTextTimeTo; TText* FTextTimeFrom; //... // Функции для присваивания данных, это нужно при написании "properties" void __fastcall SetTimeTo(const System::UnicodeString Value); void __fastcall SetTimeFrom(const System::UnicodeString Value); protected: void __fastcall ApplyStyle(); void __fastcall FreeStyle(); System::UnicodeString __fastcall GetDefaultStyleLookupName(); virtual void UpdateStyleData(); __published: __property System::UnicodeString TimeTo = {read=FTimeTo, write=SetTimeTo}; __property System::UnicodeString TimeFrom = {read=FTimeFrom, write=SetTimeFrom}; public: __fastcall TMyListBoxItem(System::Classes::TComponent* AOwner); }; Теперь напишем сами функции.
      void __fastcall TMyListBoxItem::ApplyStyle() { // Вызов метода предка TListBoxItem::ApplyStyle(); TFmxObject *StyleObject; // Поиск ресурса из стиля. Посмотрите в скрине, там есть ресурс с названием "timeto" типа TText StyleObject = FindStyleResource("timeto"); // dynamic_cast нужен для корректного преобразования типов. Если тип найденного ресурса не является TText то указателю будет присвоен NULL FTextTimeTo = dynamic_cast<TText*>(StyleObject); StyleObject = FindStyleResource("timefrom"); FTextTimeFrom = dynamic_cast<TText*>(StyleObject); UpdateStyleData(); } void __fastcall TMyListBoxItem::FreeStyle() { // Стиль выгружен из памяти. Нужно очистить указатели что бы избежать ошибок FTextTimeTo = NULL; FTextTimeFrom = NULL; TListBoxItem::FreeStyle(); } System::UnicodeString __fastcall TMyListBoxItem::GetDefaultStyleLookupName() { // название стиля для нашего "Item"а по умолчанию return "mylistboxitemstyle"; } void TMyListBoxItem::UpdateStyleData() { if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; if(FTextTimeFrom) FTextTimeFrom->Text = FTimeFrom; } void __fastcall TMyListBoxItem::SetTimeTo(const System::UnicodeString Value) { FTimeTo = Value; if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; } Вот и всё. Остается только добавит в наш проект ListBox и button для проверки.
      Вот функция создания нашего "Item"а:
      void __fastcall TForm1::Button1Click(TObject *Sender) { TMyListBoxItem *Item = new TMyListBoxItem(this); Item->Parent = ListBox1; Item->StyleLookup = "customstyle1"; Item->TimeFrom = "11:20"; Item->TimeTo = "12:50"; } Скриншот программы:

      В архиве мой класс и стиль. Для корректного отображения некоторых символов нужен fontcustom
      Какие вопросы задавайте. Отдельное спасибо Ярославу за мануал на дельфи: 
      http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/
      Администраторы и модераторы, прошу подкорректировать если что то неправильно.
      ListBoxItem.zip
  • Последние посетители   0 пользователей онлайн

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

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