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

Олег Киреев

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

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

  • Посещение

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

    7

Сообщения, опубликованные Олег Киреев

  1. Здравствуйте уважаемый Azaz.

    1. Я извиняюсь но уважаемый Администратор просит в правилах: "

    2.2. Каким должен быть текст вопроса?

    • Текст вопроса нужно начать с указания используемой версии RAD Studio, Версии ОС и модель устройства (если речь идет о мобильной разработке)"

    2.  У компонента TListBox есть своё свойство-ШоуСкроллБарс.  Достаточно поставить птичку.

    С Уважением. Олег.

  2. Здравствуйте Уважаемые.

    Подскажите пожалуйста как устранить ошибку (скрин в приложении) на строке TNetworkState.Create в приложении для OS Android в Delphi 10.3. на телефоне 10-й Андроид.

    Процедура такая:

    //Поделиться сохранённым файлом
    procedure TForm_DB_BOKA_Glavn.ButtonПоделитьсяClick(Sender: TObject);
    var
    NS: TNetworkState;
    begin
    NS := TNetworkState.Create;
    if not NS.IsConnected then
      begin
      ShowMessage('Нет подключения к интернету.');
      Abort;
      end else
       begin
       if NS.IsWifiConnected then ShowMessage('Подключено через WiFi');
       if NS.IsMobileConnected then ShowMessage('Подключено через WWAN');
       if FileExists(TPath.GetDownloadsPath+'/Модель_'+ComboBoxВсеМодели.Selected.Text+'.txt') then
         begin
         ShareFile(TPath.GetDownloadsPath+'/Model_'+ComboBoxВсеМодели.Selected.Text+'.txt', 'Это файл карточки модели '++ComboBoxВсеМодели.Selected.Text);
         Application.ProcessMessages;
         end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/Model_'+ComboBoxВсеМодели.Selected.Text+'.txt'+' не найден.');
       end;
    end;

    Процедура ShareFile такая:

    procedure ShareFile(aFileName, aComment : String);
    {$IFDEF ANDROID}
    var Intent    : JIntent;
        uri       : Jnet_Uri;
        AttachmentFile: JFile;
        S : String;
    {$ENDIF ANDROID}

    begin
    {$IFDEF ANDROID}

      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
      Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      S:=TPath.GetFileName(aFileName);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment));
      Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(aComment));
      AttachmentFile := TJFile.JavaClass.init(StringToJString(aFileName));
      Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
      Intent.setType(StringToJString('text/plain'));
    //  Intent.setDataAndType(StrToJURI('file:' + TPath.Combine(TPath.GetSharedDownloadsPath, 'picture.png')), StringToJString ('image/png'));
      SharedActivity.startActivity(Intent);
    {$ENDIF ANDROID}
    end;
    При этом разрешение к памяти у телефона есть на это приложение. Интересно что в другом моём приложении где те же процедуры всё работает. Но перед тем как это 2-е приложение я запустил после обновления 9-го Андроида на 10-й система спросила сама разрешения а в этом нет. Я вручную разрешал. Может тут дело не в разрешениях???

    Screenshot.jpg

  3. Здравствуйте уважаемые.

    Думаю что мой вопрос в продолжении этой темы. Пожалуйста, кто знает, подскажите как решить следующую проблему.

    Есть приложение для OS Android сделанное на Сиэтле 10.0 (IDE установлена на ПК с OS Win 7) протестированное  успешно на телефоне Самсунг Галакси J6 (OS Android 9). Пробую скомпелировать и запустить это же приложение на IDE Rio 10.3.2. Компеляция проходит успешно а само приложение на телефоне запускается до заставки и виснет. При установке на телефон его OS сообщает что приложение разработано для другой версии OS Android и будет работать не корректно. Телефон остался тот же с той же OS Android 9. Файлы AndroidManifest старый и новый прилагаю. Также прилагаю фото юнита и SDK менеджера. Всё в архивном файле.

    С Уважением. Олег.

    Новая папка.rar

  4. Приложение для получения информации расчётным путём об углах:
    - вертикальной плоскости;
    - в горизонтальной плоскости;
    - объёмный;
    - эквивалентный
     в шарнирах карданных валов на
    основе сделанных замеров на собранном автобусе, троллейбусе, грузовике.
    Может пригодиться работникам сервисных служб, лицам эксплуатирующим грузовую или
    пассажирскую автомобильные техники, лицам не конструкторских служб. 
    Особенно в случае нахождения в месте недоступном к интернету и компьютеру.
    Работает на устройствах под OS Android.
    Существует и более расширенная версия для OS Windows.
    Пожалуйста, с предложениями и пожеланиями обращайтесь к разработчику:
    Кирееву Олегу по тел. +375 29 676 13 84 или пишите на kireevoleg1966@gmail.com.
     Буду рад Вашему любому отзыву.
     С Уважением.

     

     

     

     

     

     

     

     

     

     

     

     

    UgolKardZamer_v5.rar

    3.jpg

    4.jpg

    1.jpg

    2.jpg

    5.jpg

    6.jpg

    7.jpg

    8.jpg

  5. Я делаю так:
    1.Создаю файл базы (БД) например для Виндовс Acces (пример моего в приложении).
    2.Создаю файл TreeView.dat.
    3.Подключаюсь к БД.
    4.Создаю нове ветки так:
    //Ввести ветку
    procedure TForm_Glavn.SpeedButton_vvod_vetkiClick(Sender: TObject);
    begin
    //проверка наличия текста в Едите
    if Edit_Mame_Vetok.Text = '' then
     begin
     MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
     Abort;
     end;
    TreeView1.Items. Add (TreeView1. Selected, Edit_Mame_Vetok.Text) ;
     //база
    Query_Glav.Insert;
    Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
    Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
    Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
    Query_Glav.Post;

    //сохраняем дерево
    F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
       try
         F.WriteComponent(TreeView1);
           finally
         F.Free;
       end;
    Edit_Mame_Vetok.Text:='';
    end;

    5.Создаю подветки так:
    //Ввести подветку
    procedure TForm_Glavn.SpeedButton_vvod_podvetkiClick(Sender: TObject);
    begin
    if TreeView1.Selected = nil then
       begin
       MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
       Exit; //если не выбрана ветка выходим
       end;

    //проверка наличия текста в Едите
    if Edit_Mame_Vetok.Text = '' then
     begin
     MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
     Abort;
     end;

     TreeView1.Items.AddChild (TreeView1. Selected, Edit_Mame_Vetok.Text);

     //база
    Query_Glav.Insert;
    Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
    Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
    Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
    Query_Glav.Post;

    //сохраняем дерево
    F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
       try
         F.WriteComponent(TreeView1);
           finally
         F.Free;
       end;
    Edit_Mame_Vetok.Text:='';
    end;

    6.Прикрепляю файл так:
    // Прикрепить файл
    procedure TForm_Glavn.SpeedButton_FileClick(Sender: TObject);
    var
     IconStream:TMemoryStream;
    begin
    if TreeView1.Selected = nil then
       begin
       MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
       Exit; //если не выбрана ветка выходим
       end;

    OpenDialog1.InitialDir:=Base;
    if Opendialog1.Execute then
        begin
         //заносим файл в потоке
         SpeedButton_File.Caption:='Подождите......';
         Application.ProcessMessages;
         IconStream:=TMemoryStream.Create;
         IconStream.LoadFromFile(OpenDialog1.FileName);
         //становимся в невидимой таблице на указанной модели
         Query_Glav.Locate('Imya_vetok',Edit_Mame_Vetok.Text,[loPartialKey, loCaseInsensitive]);
         Query_Glav.Edit;
         if (ExtractFileExt(Opendialog1.FileName) = '.pdf')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=3;
         if (ExtractFileExt(Opendialog1.FileName) = '.docx')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=2;
         if (ExtractFileExt(Opendialog1.FileName) = '.jpg')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=0;
         if (ExtractFileExt(Opendialog1.FileName) = '.rar')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=1;
         (Query_Glav.FieldByName('File') as TBlobField).LoadFromStream(IconStream);
         IconStream.Free;
         Application.ProcessMessages;
         MessageDl.MessageDlg('Файл добавлен в базу!', mtInformation,[mbYes],0);
         SpeedButton_File.Caption:='    Прикрепить файл';
        end else MessageDl.MessageDlg('Ошибка ввода!', mtInformation,[mbYes],0);
    end;

     7. Удаляю ветку или подветку так:
    //Удалить ветку/ подветку
    procedure TForm_Glavn.SpeedButton_DeleteClick(Sender: TObject);
    begin
    if TreeView1.Items.Count = 0 then //проверка наличия веток вообще
      begin
         MessageDl.MessageDlg('Так нет же веток!', mtInformation,[mbYes],0);
         Abort;
        end;
    if TreeView1.Selected.HasChildren=True then //проверка наличия подветки
       begin
         MessageDl.MessageDlg('Сначала удалите подветку!', mtInformation,[mbYes],0);
         Image1.Refresh;
         Abort;
        end;
    if TreeView1.Selected.HasChildren=False then //проверка наличия подветки
        begin
        SpeedButton_Delete.Caption:='Подождите.....';
        Application.ProcessMessages;
        //становимся в невидимой таблице на указанной ветке
        Query_Glav.Locate('Imya_vetok',TreeView1.Selected.Text,[loPartialKey, loCaseInsensitive]);
        if Query_Glav.FieldByName('Imya_vetok').AsString <> '' then Query_Glav.Delete;//удаляем в базе
        Application.ProcessMessages;
        TreeView1.Items.Delete(TreeView1.Selected); //удаляем в дереве
        Application.ProcessMessages;
        Image1.Refresh;
        Application.ProcessMessages;
        SpeedButton_Delete.Caption:=' Удалить ветку/ подветку';
        end;

    //сохраняем дерево
    F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
       try
         F.WriteComponent(TreeView1);
           finally
         F.Free;
       end;
    Edit_Mame_Vetok.Text:='';
    end;


    8. Переименовываю ветки так:
    //Переименовать ветку/ подветку
    procedure TForm_Glavn.SpeedButton3Click(Sender: TObject);
    begin
    //проверка наличия текста в Едите
    if Edit_Mame_Vetok.Text = '' then
     begin
     MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
     Abort;
     end;
    //становимся в невидимой таблице на указанной модели
         Query_Glav.Locate('Imya_vetok',TreeView1.Selected.Text,[loPartialKey, loCaseInsensitive]);

    TreeView1.Selected.Text:=Edit_Mame_Vetok.Text;

    //база
    Query_Glav.Edit;
    Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
    Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
    Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
    Query_Glav.Post;


    //сохраняем дерево
    F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
       try
         F.WriteComponent(TreeView1);
           finally
         F.Free;
       end;
    Edit_Mame_Vetok.Text:='';
    end;


    9.Открываю прикреплённый файл так:
    // Открыть прикреплённый файл отдельно
    procedure TForm_Glavn.SpeedButton4Click(Sender: TObject);
    var
    ImageData:TMemoryStream;
    begin
    if TreeView1.Selected = nil then
       begin
       MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
       Exit; //если не выбрана ветка выходим
       end;

    //становимся в невидимой таблице на указанной модели
        Query_Glav.Locate('Imya_vetok',Edit_Mame_Vetok.Text,[loPartialKey, loCaseInsensitive]);

    ImageData:=TMemoryStream.Create;
    (Query_Glav.FieldByName('File') as TBlobField).SaveToStream(ImageData);
    ImageData.Position:=0;
    if ImageData.Size<>0 then
     begin
     if Query_Glav.FieldByName('RashirenieFile').AsInteger=3 then Path:=Base+'\Temp\Dokument.pdf';
     if Query_Glav.FieldByName('RashirenieFile').AsInteger=2 then Path:=Base+'\Temp\Dokument.docx';
     if Query_Glav.FieldByName('RashirenieFile').AsInteger=0 then Path:=Base+'\Temp\Dokument.jpg';
     if Query_Glav.FieldByName('RashirenieFile').AsInteger=1 then Path:=Base+'\Temp\Dokument.rar';
     ImageData.SaveToFile(Path);
     ImageData.Free;
     ImageData:=nil;

     if FileExists(Path) then
      begin
      ShellExecute (0, 'open', pChar(Path), nil, nil, SW_SHOW);
      end else
            MessageDl.MessageDlg('Файл'+Path+' в папке Data не найден.', mtInformation,[mbYes],0);
     end else
            MessageDl.MessageDlg('В этой ветке документа нет.', mtInformation,[mbYes],0);
    end;

    Снимок_таб_Акцесс.jpg

  6. Подскажите пожалуйста почему когда я пытаюсь заполнить ComboBox из базы SQLite в мобильном приложении для Android вот так:

    //заполняем  ComboBox  двигателя
    FDQuery_ComboBox.Active:=False;
    FDQuery_ComboBox.SQL.Clear;
    FDQuery_ComboBox.SQL.Add('SELECT Dvig_ob FROM TabSR ');
    FDQuery_ComboBox.Active:=True;
    //ShowMessage('Количество строк: '+IntToStr(FDQuery_ComboBox.RecordCount));
    for i:=1 to FDQuery_ComboBox.RecordCount do
       Begin
       FDQuery_ComboBox.RecNo := i;
       ComboBox_Engin.Items.Add(FDQuery_ComboBox.Fields[0].AsString);
       End;

    в  FDQuery_ComboBox.RecordCount всего ровно 50 позиций хотя в таблице TabSR 288 строк????

    СпасиБО. С Уважением.

  7. Сам спросил и сам ответил:

    Сделал проще вот так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
      begin
      ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
      Application.ProcessMessages;
      end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
    Form_glavn.Realign;
    end;

    Теперь телефон не зависает.

     

  8. 3 часа назад, mazayhin сказал:

    Возможно? это связано с восстановлением подключения к БД? На момент от правки она закрыта?

    Если попробовать отправить другой какой-то файл, который не используется приложением, будет ли эта проблема?

    Попробовал другой файл. Та же проблема зависает телефон. Может что ещё подскажете?

  9. 1 час назад, mazayhin сказал:

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

    Посмотрите статью https://delphifmandroid.blogspot.com/2014/02/deployment-manager.html

    Там описано про пути деплоя, и как потом найти на устройстве, используя System.IOUtils

    СпасиБо с этим разобрался. 

    А ещё подскажите пожалуйста почему зависает телефон когда я отправляю файл так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
    begin
       Try
       ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
       Sleep(100);
       ShowMessage('Отправлено.');
       Except
       ShowMessage('Не отправлено.');
       End;
    end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
    end;

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

    С Уважением. Олег Киреев.

  10. А ещё подскажите пожалуйста почему зависает телефон когда я отправляю файл так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
    begin
       Try
       ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
       Sleep(100);
       ShowMessage('Отправлено.');
       Except
       ShowMessage('Не отправлено.');
       End;
    end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
    end;

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

    С Уважением. Олег Киреев.

  11. 1 час назад, mazayhin сказал:

    Олег, если файл деплоится в external, то путь к нему надо получать так:

    
    TPath.Combine(TPath.GetSharedDocumentsPath, 'DB_BOKA.db3')

    СпасиБО. Буду знать.

    Но я до этого  попробовал задеплоить сюда .\assets\Download\ и приложение нашло его так:

    //поиск файла
    procedure TForm_glavn.Button10Click(Sender: TObject);
    var
      FileToFind: string;
    begin
      FileToFind := FileSearch('/storage/emulated/0/Android/data/com.embarcadero.BOKA/files/Download/DB_BOKA.db3', GetCurrentDir);
      if FileToFind = '' then
        ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
      else
        ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
    end;

  12. В 16.11.2019 в 15:19, Евгений Корепов сказал:

    Файл будет лежать там, куда вы его положили. Откуда нам знать где на вашем телефоне может лежать какой то файл? 

    Дело в том что этот файл задеплоин так:

    1536490910__.thumb.jpg.9a7af7cf0712816bf9a36b24858c15c0.jpg.

    Я пытаюсь узнать действительно ли он там вот так:

    //поиск файла
    procedure TForm_glavn.Button10Click(Sender: TObject);
    var
      FileToFind: string;
    begin
      FileToFind := FileSearch('.\assets\external\DB_BOKA.db3', GetCurrentDir);
      if FileToFind = '' then
        ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
      else
        ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
    end;

    Сообщение показывает "Не смог найти".

    Подскажите пожалуйста что здесь не так?

    С Уважением. Олег Киреев.

  13. В 03.05.2018 в 10:29, Евгений Корепов сказал:

    Вот так:

    
    procedure ShareFile(aFileName, aComment : String);
    {$IFDEF ANDROID}
    var Intent    : JIntent;
        uri       : Jnet_Uri;
        AttachmentFile: JFile;
        S : String;
    {$ENDIF ANDROID}
    begin
    {$IFDEF ANDROID}
      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
      Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      S:=TPath.GetFileName(aFileName);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment));
      Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(aComment));
      AttachmentFile := TJFile.JavaClass.init(StringToJString(aFileName));
      Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
      Intent.setType(StringToJString('text/plain'));
    //  Intent.setDataAndType(StrToJURI('file:' + TPath.Combine(TPath.GetSharedDownloadsPath, 'picture.png')), StringToJString ('image/png'));
      SharedActivity.startActivity(Intent);
    {$ENDIF ANDROID}
    end;

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

    P.S. И файл должен находится в общедоступной папке (к примеру TPath.GetSharedDocumentsPath)

    Здравствуйте Евгений.

    Пожалуйста ответьте мне на такой вопрос по этой теме.

    Я пытаюсь отправить файл базы вот так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3') then
    begin
       Try
       ShareFile(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
       ShowMessage('Отправлено.');
       Except
       ShowMessage('Не отправлено.');
       End;
    end else ShowMessage('Файл '+TPath.GetSharedDocumentsPath+'/DB_BOKA.db3'+' не найден.');
    end;

    себе на почту.

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

    С Уважением. Олег.

  14. В 03.05.2018 в 12:21, Вадим Шавров сказал:

    Всё работает, огромное Вам СПАСИБО!

    Здравствуйте Вадим.

    Пожалуйста ответьте мне на такой вопрос по этой теме.

    Я пытаюсь отправить файл базы вот так:

    //Поделится БД
    procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
    begin
    if FileExists(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3') then
    begin
       Try
       ShareFile(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
       ShowMessage('Отправлено.');
       Except
       ShowMessage('Не отправлено.');
       End;
    end else ShowMessage('Файл '+TPath.GetSharedDocumentsPath+'/DB_BOKA.db3'+' не найден.');
    end;

    себе на почту.

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

    С Уважением. Олег.

     

  15. СпасиБО SLAVZ. Попробую.

    Может Вам  пригодится я вот так вышел и положения:

    Сначала:

    //выбираем фото из галереи устройства
    procedure TForm_haracteristik.TakePhotoFromLibraryAction1DidFinishTaking(
      Image: TBitmap);
    begin
    Image_ФотоХаракДвиг.Bitmap.Assign(Image);
    end;

    Потом вношу в Базу:

    //ввести харак-ку
    procedure TForm_haracteristik.Button_ВвестиClick(Sender: TObject);
    begin
    if Edit_НазваниеХарактеристики.Text='' then
       begin
       ShowMessage('Вы не ввели название характеристики.');
       Abort;
       end;
    //проверяем наличие дубля названия характеристики:
    FDQuery_Engin.Open;
    FDQuery_Engin.SQL.Clear;
    FDQuery_Engin.SQL.Add('select * from Tab_Harak_Engin where Name_Harak = ' + #39+ Edit_НазваниеХарактеристики.Text +#39);
    FDQuery_Engin.Active:=True;
    if FDQuery_Engin.RecordCount > 0 then
      begin
      ShowMessage('Такое название уже есть !');
      Abort;
      end else
       begin
        Try
        FDQuery_Engin.Active:=False;
        FDQuery_Engin.SQL.Clear;
        FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin ORDER BY Name_Harak' );
        FDQuery_Engin.Active:=True;
        //вставляем строку новой модели:
        FDQuery_Engin.Insert;
        FDQuery_Engin.FieldByName('Name_Harak').AsString:=Edit_НазваниеХарактеристики.Text;
        //заносим в поток файл картинки
         IconStream:=TMemoryStream.Create;
         Image_ФотоХаракДвиг.Bitmap.SaveToStream(IconStream);
         IconStream.Position := 0;
         (FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).LoadFromStream(IconStream);
         IconStream.Free;
        FDQuery_Engin.Post;
        ShowMessage('Введено.');
        Except
        ShowMessage('Ошибка ввода в базу.');
        End;
       end;
    //перезагружаем Boxы
    Box_НазвХарДвиг.Clear;
    Box_НазвХарДвигУдаление.Clear;
    FDQuery_ComboBox_Engin.Active:=False;
    FDQuery_ComboBox_Engin.SQL.Clear;
    FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak');
    FDQuery_ComboBox_Engin.Active:=True;
      for i:=1 to FDQuery_ComboBox_Engin.RecordCount do
        begin
        FDQuery_ComboBox_Engin.RecNo:=i;
        Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
        Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
        end;
    end;

    Так удаляю из базы если надо:

    //удалить
    procedure TForm_haracteristik.Button_УдалитьClick(Sender: TObject);
    begin
    if Box_НазвХарДвигУдаление.ItemIndex=-1 then
       begin
       ShowMessage('Вы не выбрали имя характеристики.');
       Abort;
       end;
    TX:='';
    TX:=Box_НазвХарДвигУдаление.Selected.Text;

    //становимся на эту позицию
    FDQuery_Engin.Active:=False;
    FDQuery_Engin.SQL.Clear;
    FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+TX+ #39);
    FDQuery_Engin.Active:=True;
     Try
     FDQuery_Engin.Delete;
     ShowMessage('Удалено.');
     Except
     ShowMessage('Не удалось удалить.');
     End;

    //перезагружаем Boxы
    Box_НазвХарДвиг.Clear;
    Box_НазвХарДвигУдаление.Clear;
    FDQuery_ComboBox_Engin.Active:=False;
    FDQuery_ComboBox_Engin.SQL.Clear;
    FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak');
    FDQuery_ComboBox_Engin.Active:=True;
      for i:=1 to FDQuery_ComboBox_Engin.RecordCount do
        begin
        FDQuery_ComboBox_Engin.RecNo:=i;
        Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
        Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
        end;
    end;
     

    Так просматриваю:

    //просмотр картинки
    procedure TForm_haracteristik.ComboBox_НазвХарДвигChange(Sender: TObject);
    begin
    //становимся на эту позицию
    //FDQuery_Engin.Locate('Name_Harak',TX,[loPartialKey, loCaseInsensitive]);

    FDQuery_Engin.Active:=False;
    FDQuery_Engin.SQL.Clear;
    FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+Box_НазвХарДвиг.Selected.Text+ #39);
    FDQuery_Engin.Active:=True;
     Try
      //заносим в поток файл картинки
      IconStream:=TMemoryStream.Create;
      (FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).SaveToStream(IconStream);
      If IconStream.Size<>0 then
       begin
       IconStream.Position:=0;
       Image_Просмотр.Bitmap.LoadFromStream(IconStream);
       IconStream.Free;
       end  else
        begin
        ShowMessage('Нет фото.');
        Exit;
        end;
     Except
     ShowMessage('Не удалось загрузить фото.');
     End;
    end;

  16. Здравствуйте Ярослав.

    СпасиБО за ссылку. Я её изучил. Очень полезно. Но у меня немного другая задача. Мне надо занести в БД сфотографированную картинку. Как заносить в БД потоком я знаю, но как получить в переменную имя этого файла фото???? Под Виндовс есть компонент OpenDialog и через него всё просто. Под Андроид такого компонента нет. Пожалуйста Ярослав посоветуйте как это реализовать?

    С Уважение Олег. 

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