2013-09-18 2 views
2

Выполнив DocWiki, я развертывание моего SQLite БД с активами \ внутренней \Развертывание базы данных SQLite на устройстве Android - какой путь?

и использовал следующий код:

SQLConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db'); 

Однако, когда я пытаюсь и доступ к одной из таблиц Безразлично» t существует.

Какова правильная настройка для развертывания/доступа для SQLite?

+0

Вы можете вставить больше кода, чтобы мы могли увидеть проблему? У меня был подобный - на окнах, я не видел никаких таблиц, хотя они были там, но только в конструкторе форм. Когда я выполнил приложение, данные были там. – Asped

+0

Имеют схожие проблемы только на Android, в Windows все в порядке. Пути в порядке, я проверил и файл виден. У кого-нибудь это работает с TSQLConnection на Android? –

+0

Как вы копируете БД из 'assets \ internal \' в пути к документам? – mjn

ответ

4

Я только что прошел через развертывание базы данных SQLite в приложение для Android. Вот что я узнал.

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

Я также использую компонент TFDConnection вместо компонента TSQLConnection.

Так на TFDConnection BeforeConnect:


    {$IF DEFINED(IOS) or DEFINED(ANDROID)} 

    FDConnection1.Params.Values['Database'] := 
    TPath.GetDocumentsPath + PathDelim + 'MyDatabase.s3db'; 

    {$ENDIF} 

И TFDConnection AfterConnect:


FDConnection1.ExecSQL('CREATE TABLE IF NOT EXISTS MyTable (myField1 TEXT NOT NULL)'); 

Я только проверил этот метод на эмуляторе, и мой Droid X.

Также убедитесь, что вы включая компоненты TFDGUIxWaitCursor и TFDPhysSQLiteDriverLink.

+1

Спасибо, но мне нужно развернуть существующий db. –

+0

Вы пробовали использовать TFDConnection? – FLDelphi

+0

Имеют схожие проблемы только на Android, в Windows все в порядке. Пути в порядке, я проверил и файл виден. –

0

Я использовал FireDac.

FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db'; 

Я использую это на FDConnection1BeforeConnect.

Все, поэтому обязательно обязательно укажите файл базы данных в Разделе.

Я следовал за этим TUT Click Here

-1

Добавить использует «System.IOUtils»

В Подключение кнопки:

var 
    DbYol : string; 
begin 

DbYol := System.IOUtils.TPath.GetDocumentsPath + PathDelim + 'SqliteDers.s3db'; 

With FDConnection1 do 
begin 
LoginPrompt := False; 
Params.Clear; 
Params.Values['Database'] := DbYol; 
Params.Values['DriverID'] := 'SQLite'; 
Params.Values['CharacterSet'] := 'utf8'; 
Connected := True; 
// Create new database if no exist 
end; 

With FDQuery1 do 
begin 
Active := False; 

Connection := FDConnection1; 
SQL.Clear; 
SQL.Add('CREATE TABLE IF NOT EXISTS DERS ('); 
SQL.Add(' ADI nvarchar(10)'); 
SQL.Add(');'); 
ExecSQL; 
göre ayarlıyoruz 
SQL.Clear; 
SQL.Add('SELECT'); 
SQL.Add(' ADI'); 
SQL.Add(' FROM DERS'); 
Active := True; 
end; 

Это хороший пример с деталями.

http://www.brsatalay.com/xe5-mobil-uygulamada-sqlite-veritabani-kullanimi

+1

Обратите внимание, что [ссылки только ответов] (http://meta.stackoverflow.com/tags/link-only-answers/info) не приветствуются, ответы SO должны быть конечной точкой поиска решения (vs. еще одна остановка ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

+0

@kleopatra спасибо за информацию Im new. –

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Ozan

1

Я обнаружил, что при внесении изменений в БД и развернуть эти изменения, изменения иногда не вступает в силу на устройстве (тестировались только на Android). Удаление приложения из самого устройства и выполнение «свежего» развертывания/установки обеспечит развертывание измененной базы данных SQLITE с помощью приложения.

** i.m.o - вы должны сделать это только для тестирования/отладки.Я полностью согласен с поста @FLDelphi «s и будет реализовывать свой метод в моем APP однажды сделал ***

+0

Сначала удалите приложение на Android. У меня тоже такая ситуация. – alitrun

1

Правильный набор развертывания (Все конфигурации - Android платформы):

Local Name: myDB.db 
Remote Path: .\assets\internal\ 
Remote Filename: myDB.db 

Event BeforeConnection должны cantain следуйте по коду:

procedure TDM.conSQLiteBeforeConnect(Sender: TObject); 
var 
    dbPath: string; 
begin 
{$IF DEFINED(iOS) or DEFINED(ANDROID)} 
    dbPath := TPath.Combine(TPath.GetDocumentsPath, 'myDB.db'); 
{$ENDIF} 
    FDConnection1.Params.Values['Database'] := dbPath; 
end; 
Смежные вопросы