Delphi-PRAXiS

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.

Devil1925 25. Mai 2016 08:34

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Kann es eventuell sein, dass meine App noch zusätzliche Rechte benötigt, welche ich eventuell noch nicht beachtet und deshalb noch nicht vergeben habe?

bra 25. Mai 2016 09:02

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
In der Debug-Version sind ja normalerweise alle Berechtigungen gesetzt. Funktioniert es denn damit?

Devil1925 25. Mai 2016 09:50

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
In der Debug Version stürzt die App einfach ohne jegliche Meldungen ab.

Rollo62 25. Mai 2016 14:07

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Dafür kann es 1000 Gründe geben.
Z.B. dies oder du fängst die ApplicationEvents nicht ab (auch siehe Link).
Kannst du mit den RadDemos arbeiten ohne Absturz ?

Vielleicht am Besten von da weitermachen und aufbauen.

Ich hatte auch Probleme beim Wechsel der App von Rx10 nach Rx10.1, da hat dann geholfen das
Ganze Projekt neu zusdammenzubauen.
Manche XML und PROJ Files werden dann neu angelegt und neu gesetzt.
Das habe ich schon öfters mal gemacht, und hat das ein oder andere Mal geholfen.

Rollo

bra 25. Mai 2016 16:55

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Zitat:

Zitat von Devil1925 (Beitrag 1338902)
In der Debug Version stürzt die App einfach ohne jegliche Meldungen ab.

Ich würde erstmal versuchen, das zu beheben. Sonst wird das ja nur ein Stochern im Dunkeln.

Wenn du ein gerootetes Android-Gerät hast, kannst du dir mit Catlog (https://play.google.com/store/apps/d...n.logcat&hl=de) relativ einfach die Protokolle anschauen. Da stehen dann auch Absturzmeldungen, die dir vielleicht weiterhelfen.

Sir Rufo 25. Mai 2016 20:26

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Rooten muss man aber nicht
https://developer.android.com/studio...ne/logcat.html

Devil1925 21. Jun 2016 13:51

AW: Delphi 10 Seattle Android 5.1 Unidac Connect SQLite nur manchmal erfolgreich
 
Da ich inzwischen die Lösung gefunden habe möchte ich diese natürlich auch mit euch Teilen:

Es lag an der uniDAC Komponente. Diese Aktion funktioniert nun mit der Neuen Komponente (Version 6.3.12) einwandfrei, allerdings ist hier zu beachten, dass es in dieser Version nicht möglich ist von einer Android Anwendung in eine MSSQL - Datenbank zu schreiben, was allerdings in der nächsten Version behoben werden soll.
Siehe hier: http://forums.devart.com/viewtopic.p...=33816#p116904


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.

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