Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich (https://www.delphipraxis.net/189263-delphi-10-seattle-android-5-1-unidac-connect-sqlite-nur-manchmal-erfolgreich.html)

Devil1925 23. Mai 2016 15:41

Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Hallo,
Ich habe folgendes Phänomen: Im Installationsverzeichnis meiner App liegt auch eine SQLite - Datei. Nun versuche ich mich mit dieser zu Connecten. Allerdings funktioniert dies nur manchmal. die Anderen Male bekomme ich eine Zugriffsverletzung. Folgendes ist mir dabei noch aufgefallen.

- Das erste Connect scheitert immer
- Das zweite Connect scheitert selten
- Ab dem dritten Connect ist kein Muster erkennbar
- Nach einer Gewissen Zeit Stürzt die App einfach ab ohne eine Fehlermeldung. (Zufällige Zeit)

Wenn da jemand einen Rat weiss wäre das Super!

Rollo62 23. Mai 2016 17:42

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Machst du soetwas beim Start ?

Das funktioniert für mich auf allen Plattformen.

EDIT:
Bei den Pfaden kann das natürlich in die Hose gehen wg. der Zugriffsrechte.
Deshalb habe ich Alles unter TPath.GetDocumentsPath abgelet.

Rollo

Delphi-Quellcode:
procedure TMeasuresDm.FDConnection1BeforeConnect(Sender: TObject);
var
  sFile: string;
  LStoragePath: TS4Storage_Path;

begin

    sFile := '';

    // Get Path+FileName
    LStoragePath := TS4Storage_Path.Create;
    try
      sFile := LStoragePath.FileIn_Documents_APP( CDb_Measure );

    finally
      LStoragePath.Free;
    end;

    FDConnection1.Params.Database := sFile;

end;


procedure TMeasuresDm.FDConnection1AfterConnect(Sender: TObject);
var
  sSQL: string;
  sFN: string;

begin

  //
  // Initial creation, if not already in place, remove the CopyOnStart DB
  //

  //###############
  // Data Table
  //###############
  sSQL := 'CREATE TABLE IF NOT EXISTS ' +
          'Measure (iId INTEGER PRIMARY KEY AUTOINCREMENT, ' +
                   'iType integer, ' +
                   'sText TEXT, '   +
                   'sDescr TEXT, '  +
                   'dRes REAL, dVal1 REAL, dVal2 REAL, dVal3 REAL, dCreated REAL, ' +
                   'sUnit TEXT)';

  FDConnection1.ExecSQL( sSQL ); //'CREATE TABLE IF NOT EXISTS Kunden (Name VARCHAR(100))');


  FDQueryMeasures.Active := True;

  if FDQueryMeasures.Active then
  begin
    ...
    ...
    ...
  end;

end;

Devil1925 24. Mai 2016 07:31

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
das ist der Code, welchen ich derzeit bei Klick auf einen Button ausführe:

Delphi-Quellcode:
  UniConnection1.Close;
  UniConnection1.Database := TPath.Combine(TPath.GetDocumentsPath, 'Test.sqlite');
  UniConnection1.Connect;
In der Connection ist als Provider "SQLite" ausgewählt und es existiert auch ein Entsprechender TSQLiteUniProvider.

Was ich noch vergessen habe zu erwähnen ist vielleicht, das ich die Zugriffsverletzung nur bei der DB im App-Verzeichnis bekomme, nicht jedoch bei einer App, welche im nicht geschützten Bereich also beispielsweise im Downloadordner liegt.

bra 24. Mai 2016 08:59

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Berechtigungsproblem. Ich vermute mit "App-Verzeichnis" meinst du "c:\Program Files\...". Hier hast du je nach Windows-Version nur Zugriff, wenn die Anwendung mit Admin-Rechten läuft. In diesen Verzeichnissen sollten deshalb keine Benutzer-Daten gespeichert werden.

Devil1925 24. Mai 2016 09:06

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Ich bin auf android unterwegs... nicht auf Windows!

um genau zu sein Android 5.1.1

Auch funktionierte die App unter Android 4.2 noch einwandfrei. Die "Einzige" Änderung die Vorgenommen wurde ist, dass Android 5.1.1 installiert wurde.


[Edit]
zu meinem Letzten Post: ich meinte nicht app im nicht geschützten bereich, sondern Datenbank im nicht geschützten bereich
[/Edit]

bra 24. Mai 2016 10:06

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Liegt die DB dort irgendwo auf der SD-Karte oder wirklich im der App zugewiesenen Bereich? Ab Android 5 (bzw. 4.4?) haben Apps nämlich keinen beliebigen Schreibzugriff auf die SD-Karte mehr.

Devil1925 24. Mai 2016 10:13

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
also die DB liegt im Installationsverzeichnis der APP, die DB wird direkt dort abgelegt bei der Installation (über die Bereitstellung). Es gibt auch keine Externe SD-Karte, sondern nur die Interne.
Der Connection wird folgender String als Database übergeben:

/data/data/com.embarcadero.Project6/files/Test.sqlite

Rollo62 24. Mai 2016 16:54

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Also der Pfad TPath.GetDocuments sollte funktionieren, aber was ist UniConnection ?
Benutzt du UniDac für Android (ja sorry, steht schon bei dir im Header) ?


Damit kenne ich mich nicht aus, aber versuch es doch mal mit FireDac, das läuft bei mir.

Rollo

Devil1925 24. Mai 2016 19:38

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Die Problematik mit firedac in der app habe ich hier ausführlich erklärt. Mit firedac funktioniert SQLITE aber dann kein mssql mehr...

Devil1925 25. Mai 2016 07:57

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Ich habe das Thema gerade nochmal in der Echten Anwendung probiert und hier funktioniert das Connect garnicht... und in der Testanwendung nur manchmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz