Перейти к содержанию
Fire Monkey от А до Я

masmat

Пользователи
  • Постов

    75
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные masmat

  1.  

     

     

    а вот как загрузить, вот это и проблемой встало. Не могу сообразить

    когда-то делал так:

     

    aMStream := TMemoryStream.Create;
    // считываем в aMStream, потом записываем в параметр пишущего запроса:
    {$IF CompilerVersion >= 28}
      aQuery.Params[i].SetStream(aMStream, ftBlob, true);
    {$ELSE}
      aQuery.Params[i].LoadFromStream(aMStream, ftBlob, 0);
    {$ENDIF}
    

    Спасибо. Буду пробовать

  2. ))) Прикольно, а что ж вы этого не указали! Это самое главное))) Не соблюли правила форма! Мы же не можем попасть вам в мозг! А зачем делать темповую, не совсем понял? Попробуйте достать из первой базы в поток, и вставить во вторую из потока.

    Сорри, действительно тормознул.

     

    Вот через поток и не могу вставить в blob поле. В поток то я нашел как выгрузить, 2-3 варианта, а вот как загрузить, вот это и проблемой встало. Не могу сообразить

  3. Да прямо запросом: insert into Таб2  (BLOB2) select BLOB1 from Таб1

     

    Хм. у меня Query для Таб1 и Таб2 разные, т.к. файлы БД разные, и оба подключены к разным FDConnection.

    В этом варианте такой запрос не проканает. Как мне тут указать, что select нужно выполнять в другом Query.

    Или получается, что нужно делать темповую таблицу в существующем файле БД, потом оттуда запросом перетаскивать картинку, а потом временную таблицу удалять?

    Думаю, что Android мне не простит столько телодвижений и начнет тормозить

  4. Закрываешь все соединения (FDConnection.Close) и спокойно перезаписываешь файл базы данных.

    Главное - это не деплоить файл базы данных в apk, а создавать его при первом открытии. иначе андроид не даст его удалить или перезаписать.

    При указанном мной способе, файл перезаписывается на УРА 

  5. Под Android я делаю так. Вставляю изначально файл БД в Deploy.

    Потом вызываю при необходимости процедуру

    procedure TForm1.RefreshBD;
    { TODO -cKod : RefreshBD - обновление БД }
    var
      PackageName: JString;
      zip: TZipFile;
    begin
         // Отключаемся от базы
          FDConnection1.Connected := False;
    
          // Получаем имя apk файла
          PackageName := SharedActivityContext.getPackageResourcePath;
    
          if TFile.Exists(JStringToString(PackageName)) then
          begin
            // Удаляем старый файл базы
            TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db');
    
            // Извлекаем новый файл базы
            zip := TZipFile.Create;
            zip.Open(JStringToString(PackageName), TZipMode.zmRead);
            zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False);
            zip.Close;
            zip.free;
    end;
      // Подключаемся к базе
      FDConnection1.Connected := True;
    end;

     

    Под iOS вставляю в ресурсы, потом вот так

     

    procedure TForm1.RefreshBD;
    { TODO -cKod : RefreshBD - обновление БД }
    begin
         // Отключаемся от базы
          FDConnection1.Connected := False;
    
      if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then
        rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA));
    
      if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then
        begin
          TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');
          rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');
        end
      else
        begin
          rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');
        end;
      FDConnection1.Connected := True;
    end;
  6. Интересный вопрос. 

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

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

     

    Как-то не рационально. Ладно, посмотрим в будущем.

  7. Ярослав спасибо. Данная инструкция вроде сработала, Loader файл проглотил, жду теперь 2 недели.

     

    Однако это сработало только с 4 раза, именно поэтому я спросил тут.

     

    Однако возникает новый вопрос, если я сейчас удалил все сертификаты Development. то смогу ли я продолжать разработку, без выпуска релиза AppStore.

  8. Из моего опыта: На скорость также влияет количество подключаемых юнитов, т.е. иногда бывает так, что вы кинули компонент на форму (среда автоматом подключает необходимые юниты), а потом передумали и удалили его, но среда не почистила список юнитов. Я лично наблюдал такую ситуацию, приложение тоже долго грузилось, когда вручную почистил список юнитов, всё встало на свои места.

     

    Да да, с этим вообще беда

  9. точно больше никаких обработок не делаешь в OnCreate OnShow? точно не открываешь в DataModule никакой базы данных запросом не индекисруемым? Вот одна форма 5 лейблов и одна кнопка и больше ничего и никаких обработок грузится все это 5 секунд? 

     

    у меня был такой косяк когда на форме было намного больше компонентов, около 30, тогда загрузка шла 5 секунд на ХЕ7. пришлось из все раскидать по другим формам. 

     

    Это новый проект, там точно ничего не было в Create и Show.

    У меня появилась одна догадка в чем может быть дело, но пока не могу утверждать это.

    Когда на форме много компонентов и ты начинаешь их удалять, то в файлах проекта остаются от них следы.

    Такое наблюдалось у меня при удалении компонент: TabControl, ImageList, Image, Grid-ы

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

     

    Эксперименты продолжаются

  10. masmat, что за ограничение значит 1000 сессий? О чем вы? Речь про сам компонент или про ограничения сервиса Google Maps?

    В компоненте TMapView можно использовать только карту Google Map, другие не удавалось подключить (пробовал в XE 8.1)

    Так вот, по лицензионной политике Google при превышении порога в 1000 запросов (не помню то ли в день, то ли в месяц) карта работать перестанет. Нужно будет покупать лицензию.

    Так было на октябрь 2015 года. Может сейчас политика Google изменилась, нужно уточнять.

  11.  

    В XE8 добавлен новый компонент TMapView, который позволяет отобразить карту в вашем приложении и не только. Поддерживаемые платформы: Android и iOS.

     

     

    Ярослав, Вы забыли указать, что компонент допускает в бесплатном варианте до 1000 сессий, потом он не будет работать.

  12.  

    Вообщем добился я результата в 4 секунды запуска, т.е. показа черного экрана заставки.

     

    Для достижения этого нужно было всего лишь оставить на форме один Button.  :D  :D  :D

     

    Сокращение времени загрузки происходило при удалении компонентов Label. 

    Получилось 1 Label = 1 секунда.

    Это что то новое))))

     

     

    Вот и я теперь не знаю куда копать.

    На Андроиде всё приложение запускается за 6-8 секунд, в зависимости от аппарата.

    А на iOs это же приложение за 30 секунд.

     

    Пришлось начать писать проект под iOS с "нуля" и наткнулся сразу на эту проблему. И это только несколько компонентов и 2 формы. А дальше еще БД есть и т.д. с этим связанное.

  13. Вообщем добился я результата в 4 секунды запуска, т.е. показа черного экрана заставки.

     

    Для достижения этого нужно было всего лишь оставить на форме один Button.  :D  :D  :D

     

    Сокращение времени загрузки происходило при удалении компонентов Label. 

    Получилось 1 Label = 1 секунда.

  14. вот такой способ например

     

    создаём сплеш-форму пустую, на OnActivate формы выполняем Application.CreateForm(наши формы....)

    убираем все формы с автокреата, кроме сплеш-форм

     

    Время запуска не изменилось. Заставка запуска так и висит 15-16 секунд, потом все быстро запускается, что я даже не успеваю увидеть сплэш-форму.

    Вот как уменьшить момент показа черного экрана? Я ставил туда типовую картинку от Delphi, потом поставил туда свою картинку, на которой написано типа "Идет загрузка, подождите пожалуйста", но блин ждать 15 секунд на запуск приложения это много.

     

    Потом скорость работы приложения меня устраивает, но вот сам запуск очень смущает

  15. Вообщем странные всё эти тормоза.

    Новый проект, 2 формы, создаются автоматически.

    На каждой форме по несколько контролов (панель, лабель)

     

    Запуск 15 секунд до открытия первой формы.

     

    Другие же приложения могут быстро запускаться, почему из под Delphi они так медленно запускаются?

    Есть у кого-нибудь мысли? 

  16.  

    Попробуйте использовать этот модуль. При помощи него можете выполнять действие в отдельном потоке.

    Использование:

     

    procedure StartAsyncThread;
    begin
      Run(TAsyncTask,
        procedure(ATask: IAsyncTask)
        begin
            //что делать
        end,
        procedure(ATask: IAsyncTask)
        begin
        //Что делать после завершения
        end);
    end;
    

     

    Спасибо. Сейчас буду пробовать. По результатам обязательно отпишусь

  17. А не думали что это задержка при обращении к БД? Особенно на это указывает что задержка исчезает не сразу - возможно срабатывает кэширование записей БД.

     

    Я выношу всю работу с БД в отдельный поток и индикацией загрузки на форме. Форму если она часто вызывается лучше один раз создать, потом просто скрывать и отображать. B еще чисто по ощущениям - фрейм создается быстрее. Сейчас стараюсь вместо форм использовать фреймы с динамическим созданием.

     

    И еще не забывайте про отрисовку стилей - http://fire-monkey.ru/topic/1495-tmultiview-kak-izbezhat-zaderzhki-pri-pervom-poiavlenii-tmultivie/?hl=preloadcontent#entry7293

     

    .

     

    1. Думал про БД. Даже делал специально выборку всех данных в одном запросе, что бы положить в память. Но не помогает. Если Вы заметили, я писал, что отключал получение данных, все равно форма открывается первые 3-4 раза долго.

     

    2. Выносите БД в отдельный поток - буду признателен, если поделитесь как это сделать. Может поможет.

     

    3. "Форму если она часто вызывается лучше один раз создать, потом просто скрывать и отображать." - я так же писал, что она создается один раз и потом не закрывается, а скрывается через Hide, т.е. она не уничтожается

     

    P.S. За ссылку спасибо

  18. Ситуация:

     

    Есть Form1, на ней есть ListView, в который загружается список значений одного из полей БД SQLLite.

    По нажатию на Item, производится выборка SQL запросом из БД. Результат выборки 1 строка.

    Далее свойство Text (или Cells у StringGrid) компонентов (Label - 6 шт., Button - 4 шт., StringGrid - 7х3, Memo - 1 шт.) на Form2 заполняются значениями из полей БД, выбранной записи.

    После этого вызывается Form2.Show;

     

    Поведение:

    Если открывать разные Item-ы, то в первые 3-4 раза открытия формы Form2 производится задержка до 4 секунд. Потом всё открывается быстро.

     

    Дополнительно:

    Закрытие формы Form2 процедурами Close или скрытие Hide, не влияет на скорость.

    Форма Create создается на этапе запуска приложения.

     

    Вопрос: Что за поведение такое? 

    Есть ощущение, что iOS убивает форму Form2 и создает её заново, но после того как форма была открыта несколько раз, он перестает это делать.

    Я понимаю, если бы я первый раз открывал форму и при этом создавая её, но она то уже создана.

    Я даже отключал весь процесс заполнения данными, просто открываю форму, с незаполненными компонентами. Все равно такое же поведение.

     

    P.S. на Андроиде такое не наблюдается.

  19.  

    Может кто подскажет.

    Запускаю приложение на iPhone, открываю всякие там формы, делаю выборки из БД, показываю и скрываю объекты. 

    Если это делается первый раз, то это как-то медленно все выполняется, Если такая операция выполнялась ранее, то она выполняется быстро.

    То ли приложение постепенно выгружается в оперативку и оттуда работает, то ли я не пойму куда копать.

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

     

     

    Все это понятно, но блин как-то это все раздражает

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