Перейти к содержанию
  • Регистрация
  • 0
Вадим Шавров

Импорт/экспорт БД

Вопрос

Приветствую. Как реализовать экспорт БД из программы, расположенной по адресу:

 2018-05-03_10-13-53.thumb.png.d54695ef94f679b521d16ee2d1a0450d.png

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

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

Можно ли это как-то реализовать?

1666241421_Screenshot__Android_20180503-100223.thumb.png.38c7751efaf3516ff7ea7cfc7fdf930e.png

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


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

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

  • 2

Вот так:

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)

Изменено пользователем Евгений Корепов

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


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

Да, конечно. Что то из этих, лишнее уберите:

  Androidapi.JNI.Webkit,
  FMX.Platform.Android,
  Androidapi.Helpers,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Net,
  Androidapi.JNI.Os,
 

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


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

Вроде бы ошибок нет, а как правильно её вызывать?

ShareFile('storage/emulated/0/Documents/data.db', ???);

aFileName - это полный путь к файлу или только название "data.db'?

aComment - а это я вообще не понимаю для чего :(

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


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

Вроде бы ошибок нет, а как правильно её вызывать?

ShareFile('storage/emulated/0/Documents/data.db', ???);

aFileName - это полный путь к файлу или только название "data.db'?

aComment - а это я вообще не понимаю для чего :(

Конечно полный путь, откуда иначе функция узнает какой файл отправлять?

AComment - комментарий, типа "Это файл №199 из такого то приложения, служит для того то". Но никто не заставляет вас его писать.

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

И убедитесь в существовании файла перед его отправкой.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 03.05.2018 в 10:23, Вадим Шавров сказал:

Приветствую. Как реализовать экспорт БД из программы, расположенной по адресу:

 2018-05-03_10-13-53.thumb.png.d54695ef94f679b521d16ee2d1a0450d.png

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

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

Можно ли это как-то реализовать?

1666241421_Screenshot__Android_20180503-100223.thumb.png.38c7751efaf3516ff7ea7cfc7fdf930e.png

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

Моё имя Олег. Могу ли я Вам задать по этой теме вопросы?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 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;

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

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

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

 

Изменено пользователем Олег Киреев

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 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;

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

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

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

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


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

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

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

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

//Поделится БД
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;

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

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 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;

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

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

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

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


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

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

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;

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

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

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
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;

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


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

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

//Поделится БД
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;

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

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

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


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

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

Но я до этого  попробовал задеплоить сюда .\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;

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
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;

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

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

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


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

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

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

//Поделится БД
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;

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

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

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

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

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


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

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

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

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

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


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

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

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

//Поделится БД
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;

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

 

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


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

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

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

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

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

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

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

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

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


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

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

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